• 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. 测试验证

        运行写入程序,并结束程序运行
       
        运行读取程序,查看获取到的数据

  • 相关阅读:
    第三次上机作业
    第二次实训作业
    java第二次作业
    java程序设计第一次作业
    实训作业1
    java2
    我的第一次java作业
    第六次实训作业异常处理
    事件处理程序
    实训作业4
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/16291238.html
Copyright © 2020-2023  润新知