原文链接:https://blog.csdn.net/qq_30797051/article/details/124816115
也可参考:https://blogs.sap.com/2020/04/28/shared-memory-objects-transfer-data-between-abap-programs/
1. 创建Shared Memory实现类
创建新的实现类,并勾选共享内存启用
添加全局属性
集成接口:
实现方法
GET_MEMORY_DATA
METHOD get_memory_data. et_data = gt_data. ENDMETHOD.
SET_MEMORY_DATA
METHOD set_memory_data. gt_data = it_data. ENDMETHOD.
2. 创建Shared Memory内存区域
事务代码:SHMA
实现类构造器IF_SHM_BUILD_INSTANCE~BUILD
METHOD if_shm_build_instance~build. DATA: area TYPE REF TO zcl_test_area_001, root TYPE REF TO zcl_test_shma_001, exception TYPE REF TO cx_root. DATA: lt_data TYPE TABLE OF sflight. TRY. area = zcl_test_area_001=>attach_for_write( ). "请求写入锁 CATCH cx_shm_error INTO exception. RAISE EXCEPTION TYPE cx_shm_build_failed EXPORTING previous = exception. ENDTRY. CREATE OBJECT root AREA HANDLE area. CALL METHOD root->set_memory_data EXPORTING it_data = lt_data. area->set_root( root ). area->detach_commit( ). "提交并释放锁 ENDMETHOD.
3. 创建Shared Memory测试程序
写入Shared Memory
DATA: lo_area TYPE REF TO zcl_test_area_001, lo_root TYPE REF TO zcl_test_shma_001. DATA: lt_sflight TYPE TABLE OF sflight. SELECT * FROM sflight INTO TABLE lt_sflight UP TO 50 ROWS. TRY. “直接调用区域构造函数 zcl_test_area_001=>build( ). CATCH cx_shma_not_configured. RETURN. CATCH cx_shm_inconsistent. RETURN. CATCH cx_shm_build_failed. RETURN. ENDTRY. TRY. lo_area = zcl_test_area_001=>attach_for_update( ). ""请求更新锁 CATCH cx_shm_pending_lock_removed. RETURN. CATCH cx_shm_change_lock_active. RETURN. CATCH cx_shm_version_limit_exceeded. RETURN. CATCH cx_shm_exclusive_lock_active. RETURN. CATCH cx_shm_inconsistent. RETURN. CATCH cx_shm_no_active_version. RETURN. ENDTRY. lo_root ?= lo_area->get_root( ). IF lo_root IS INITIAL. CREATE OBJECT lo_root AREA HANDLE lo_area. ENDIF. CALL METHOD lo_root->set_memory_data EXPORTING it_data = lt_sflight. lo_area->set_root( lo_root ). lo_area->detach_commit( ). "提交并释放锁 WRITE: / '写入完成!'.
读取Shared Memory
DATA: lo_area TYPE REF TO zcl_test_area_001, lo_root TYPE REF TO zcl_test_shma_001. DATA: lt_sflight TYPE TABLE OF sflight. TRY. lo_area = zcl_test_area_001=>attach_for_read( ). ""请求读取锁 ENDTRY. lt_sflight = lo_area->root->get_memory_data( ). lo_area->detach( ). "释放锁 BREAK-POINT.
运行写入程序,并结束程序运行
运行读取程序,查看获取到的数据