1. 程式人生 > 其它 >SAP Shared Memory Objects在不同會話不同ABAP程式中傳輸資料示例

SAP Shared Memory Objects在不同會話不同ABAP程式中傳輸資料示例

原文連結: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.
4. 測試驗證

    執行寫入程式,並結束程式執行
   
    執行讀取程式,檢視獲取到的資料