SAP Shared Memory Objects在不同會話不同ABAP程式中傳輸資料示例
阿新 • • 發佈:2022-05-20
原文連結: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, exceptionTYPE 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.4. 測試驗證
執行寫入程式,並結束程式執行
執行讀取程式,檢視獲取到的資料