[SAP ABAP] SAP内存与ABAP内存

内存是程序之间为了传递数据而使用的共享存储空间

在SAP ABAP编程中,内存分为SAP内存和ABAP内存

1.SAP内存与ABAP内存定义

1.1 SAP内存

定义:SAP内存是SAP系统中的一个全局内存区域,所有的SAP系统用户和会话都可以访问。它用于在整个SAP系统范围内保存和共享数据

与ABAP内存不同,SAP内存不仅仅局限于ABAP程序,还可以被SAP系统的其他组件(如UI、RFC等)访问

生命周期:SAP内存的生命周期是基于用户会话的,直到会话结束时,SAP内存中的数据才会被清除。不同用户的SAP内存是隔离的,因此一个用户会话中的数据对其他用户会话不可见

数据访问方式:SAP内存数据的读写通常使用SETGET语句,数据存储在SAP的内存中,不仅限于ABAP程序,还可以通过RFC等进行访问

使用场景:用于跨ABAP程序的数据传递

例如,用户在一个程序中设置某个值,在另一个程序中获取

1.2 ABAP内存

定义:ABAP内存是ABAP程序内部的一种内存区域,用于在同一个用户会话中,存储和共享数据。它是程序临时保存数据的地方,可以在不同的ABAP程序、函数模块、报告等之间进行数据传递

生命周期:ABAP内存的生命周期通常限于用户的当前会话。当会话结束时,ABAP内存中的数据会被清除

SAP通常一个会话对应一个GUI窗口

通过SAP GUI系统工具条上的 按钮可以新建一个新的GUI窗口

ABAP内存是只有在同一个会话(窗口)中执行的所有程序才能共享内存  

数据访问方式:可以使用EXPORTIMPORT语句将数据存入和从ABAP内存中取出。数据存放在一个全局内存区域中,所有同一会话的ABAP程序都可以访问

使用场景:主要用于在同一会话中的不同程序、报告或者函数模块之间传递数据,避免重复的数据库查询,提高性能

2.使用场景

2.1 SAP内存中数据的读写

① 在程序ZVIA_MEMORY_SET中编写代码,往SAP内存中写入数据

SET PARAMETERS ID ID名 FIELD 数据名.

REPORT ZVIA_MEMORY_SET.

* 向SAP内存写入数据
DATA lv_sapmmr TYPE c LENGTH 25.
lv_sapmmr = 'SAP MEMORY'.

SET PARAMETER ID 'VIA_SAP_MEMORY' FIELD lv_sapmmr.

WRITE : / 'SAP内存写入成功'.

②  在程序ZVIA_MEMORY_GET中编写代码,从SAP内存中读取数据

GET PARAMETERS ID ID名 FIELD 数据名.

REPORT ZVIA_MEMORY_GET.

* 读取SAP内存数据
DATA lv_sapmmr TYPE c LENGTH 25.

GET PARAMETER ID 'VIA_SAP_MEMORY' FIELD lv_sapmmr.

WRITE : / 'SAP MEMORY:',lv_sapmmr.

提示Tips:注意这里GET PARAMETERS ID的ID名要和SET PARAMETERS ID的ID名相同

③ 在不同的会话(不同的GUI窗口)中分别运行上述2个程序

运行 ZVIA_MEMORY_SET 程序

另一个会话运行 ZVIA_MEMORY_GET 程序

 在同一个会话中(同一个GUI窗口)中运行上述2个程序

先运行 ZVIA_MEMORY_SET 程序

同一个GUI窗口再运行 ZVIA_MEMORY_GET 程序

SAP内存的数据是全局内存,所有程序都可以进行访问

2.2 ABAP内存中数据的读写

① 在程序ZVIA_MEMORY_SET中编写代码,往ABAP内存中写入数据

EXPORT 数据名 TO MEMORY ID ID名.

REPORT ZVIA_MEMORY_SET.
 
* 向ABAP内存写入数据
DATA lv_abapmmr TYPE string.
lv_abapmmr = 'ABAP MEMORY'.

EXPORT lv_abapmmr TO MEMORY ID 'VIA_ABAP_MEMORY'.

WRITE : 'ABAP内存写入成功'.

② 在程序ZVIA_MEMORY_GET中编写代码,从ABAP内存中读取数据

IMPORT 数据名 FROM MEMORY ID ID名.

REPORT ZVIA_MEMORY_GET.
 
* 读取ABAP内存数据
DATA lv_abapmmr TYPE string.

IMPORT lv_abapmmr FROM MEMORY ID 'VIA_ABAP_MEMORY'.

WRITE : 'ABAP MEMORY:',lv_abapmmr.

提示Tips:注意这里IMPORT的ID名要和EXPORT的ID名相同

③ 在不同的会话(不同的GUI窗口)中分别运行上述2个程序

运行 ZVIA_MEMORY_SET 程序

另一个会话运行 ZVIA_MEMORY_GET 程序

在不同的会话中,读取不到ABAP内存中的数据,因为ABAP内存中的数据只能用于用户的同一个会话中,通常一个GUI窗口对应一个会话,在另一个GUI窗口读取不到ABAP内存中的数据

 在同一个会话中(同一个GUI窗口)中运行上述2个程序

先运行 ZVIA_MEMORY_SET 程序

同一个GUI窗口再运行 ZVIA_MEMORY_GET 程序

在同一个会话中,是可以读取到ABAP内存中的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值