SAP Memory 和 ABAP Memory
ABAP MEMORY:当活动的内部会话在单个主会话中调用另一个内部会话时,使用 export 和 import 参数传递数据。 SAP MEMORY:使用 set 和 get 参数将数据从一个主会话传递到另一个主会话。

使用的语句不同
SAP memory使用SET/GET parameters
-
SET PARAMETER ID ‘MAT’ FIELD var_matnr.
-
GET PARAMETER ID ‘MAT’ FIELD var_matnr.
ABAP Memory使用EXPORT 和IMPORT
- EXPORT p_matnr TO MEMORY ID ‘memory_id’.
- IMPORT p_matnr FROM MEMORY ID ‘memory_id’.
清空 memory
-
FREE MEMORY ID ‘ZTESTMAT’. => 清空指定的ABAP memory
-
FREE MEMORY. => 清空External Session内的所有ABAP memory
共享范围不同
SAP memory 用于所有external session 间。
ABAP memory 用于同一个 external session 的 internal session 间。
作用范围不同(就是生存期)
SAP memory在登陆到退出这期间一直有效。
ABAP memory只在同一个session(window) 内有效。
Dialog 获取 SAP Memory 方式
在 dialog 屏幕上建一个 input field,然后 Parameter ID 属性与 ‘SAP_MMR’ 绑定,并打上2个勾。
Set Parameter: 允许将屏幕值返回给SAP Memory (类似于执行SET PARAMETER ID语句)
Get Parameter: 允许读取SAP Memory的值并默认显示(类似于执行GET PARAMETER ID语句).
创建共享内存对象类
-
使用SE24 创建类 ZCL_ROOT_TEST

-
为共享内存对象区域创建area rool 类 (SHMA)
-
启动事务 SHMA 并创建一个新的区域名称。(示例为 ZCL_MEM_AREA) 填写 “内存共享区域” 的简短描述。在 “根类” 中,将您创建的类放在上方(ZCL_ROOT_TEST)。
-
保存时,SAP 将生成与区域名称(ZCL_MEM_AREA)同名的区域类。新生成的 Area Class 将包含读取,写入和更新共享内存对象所需的所有方法。
-
-
创建两个实例属性name,value,可见性设置为private,参考字段MEMORY_ID
-
创建SET_DATA 和 GET_DATA方法
-
SET_DATA
DATA: my_handle TYPE REF TO zcl_mem_area. DATA: my_root TYPE REF TO zcl_root_test. TRY . CALL METHOD zcl_mem_area=>attach_for_write EXPORTING inst_name = cl_shm_area=>default_instance attach_mode = cl_shm_area=>attach_mode_default wait_time = 0 RECEIVING handle = my_handle. CREATE OBJECT my_root AREA HANDLE my_handle. CALL METHOD my_root->set_data EXPORTING name = 'name_test' value = 'value_test'. CALL METHOD my_handle->detach_commit. CATCH cx_shm_exclusive_lock_active . CATCH cx_shm_version_limit_exceeded . CATCH cx_shm_change_lock_active . CATCH cx_shm_parameter_error . CATCH cx_shm_pending_lock_removed . ENDTRY. -
GET_DATA
DATA: my_handle TYPE REF TO zcl_mem_area. DATA: my_root TYPE REF TO zcl_area_root. TRY . CALL METHOD zcl_mem_area=>attach_for_read EXPORTING inst_name = zcl_mem_area=>attach_for_write RECEIVING handle = my_handle. CREATE OBJECT my_root AREA HANDLE my_handle. CALL METHOD my_root->get_data IMPORTING name = lv_name value = lv_value. CALL METHOD my_handle->detach_commit. CATCH cx_shm_inconsistent . CATCH cx_shm_no_active_version . CATCH cx_shm_read_lock_active . CATCH cx_shm_exclusive_lock_active . CATCH cx_shm_parameter_error . CATCH cx_shm_change_lock_active . ENDTRY.
-
-
使用该类进行传递Memory Id