内存是程序之间为了传递数据而使用的共享存储空间
在SAP ABAP编程中,内存分为SAP内存和ABAP内存
1.SAP内存与ABAP内存定义
1.1 SAP内存
定义:SAP内存是SAP系统中的一个全局内存区域,所有的SAP系统用户和会话都可以访问。它用于在整个SAP系统范围内保存和共享数据
与ABAP内存不同,SAP内存不仅仅局限于ABAP程序,还可以被SAP系统的其他组件(如UI、RFC等)访问
生命周期:SAP内存的生命周期是基于用户会话的,直到会话结束时,SAP内存中的数据才会被清除。不同用户的SAP内存是隔离的,因此一个用户会话中的数据对其他用户会话不可见
数据访问方式:SAP内存数据的读写通常使用SET
和GET
语句,数据存储在SAP的内存中,不仅限于ABAP程序,还可以通过RFC等进行访问
使用场景:用于跨ABAP程序的数据传递
例如,用户在一个程序中设置某个值,在另一个程序中获取
1.2 ABAP内存
定义:ABAP内存是ABAP程序内部的一种内存区域,用于在同一个用户会话中,存储和共享数据。它是程序临时保存数据的地方,可以在不同的ABAP程序、函数模块、报告等之间进行数据传递
生命周期:ABAP内存的生命周期通常限于用户的当前会话。当会话结束时,ABAP内存中的数据会被清除
SAP通常一个会话对应一个GUI窗口

ABAP内存是只有在同一个会话(窗口)中执行的所有程序才能共享内存
数据访问方式:可以使用EXPORT
和IMPORT
语句将数据存入和从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内存中的数据