首页 > 代码库 > SAP开发经验之内存共享

SAP开发经验之内存共享

内存传值

1用户内存共享

1.1   Sap内存:

1.1.1 共享范围:被所有的主session访问,内存数据可以在同一个session中不同程序之间,或者不同session之间共享。

1.1.2 作用范围:整个中端session时间内有效。

1.1.3 用法:

SET PARAMETER ID ‘MAT’ FIELD P_MATNR.

GET PARAMETER ID ‘MAT’ FIELD P_MATNR.

1.2   ABAP内存:

1.2.1  共享范围:在一个session不同程序之间共享数据。

1.2.2  作用范围:一个session时间内有效。

1.2.3  用法:

EXPORT P_MATNR = P_MATNR TO  MEMORY ID ‘ZTESTMAT’.

INPORT P_MATNR = P_MATNR FROM  MEMORY ID ‘ZTESTMAT’.

1.3   External mode与Internal mode

用户登陆后最多可以打开6个窗口,这个Sap中称之为External Mode。而在一个窗口中,运行某程序后,可以通过CALL TRANSACTION/SUBMIT或者其他代码跳转到其他程序,这个称之为Internal Mode。Internal Mode的调用栈做多为9层。

ABAP 内存属于Internal Mode间可以共享的数据,而External Mode间无法共享。

1.4   实例:

1.4.1  ABAP内存共享实例

REPORT  Z2014HZJ_TEST_MEMORY01.

DATA MATNR TYPE MATNR.

IMPORT MATNR FROM MEMORY ID ‘ZTEST_MATNR‘.

WRITE: MATNR.

 

REPORT  Z2014HZJ_TEST_MEMORY02.

DATA MATNR TYPE MATNR.

MATNR = ‘000001234‘.

EXPORT MATNR TO MEMORY ID ‘ZTEST_MATNR‘.

SUBMIT Z2014HZJ_TEST_MEMORY01.  (运行此程序)

运行结果:

 

图1.1 ABAP内存共享实例运行结果

1.4.2 SAP内存共享实例

REPORT  Z2014HZJ_TEST_MEMORY01.

DATA MATNR TYPE MATNR.

GET PARAMETER ID ‘ZTEST‘ FIELD MATNR. "内存值在注销本次登录后失效

WRITE: MATNR.

 

REPORT  Z2014HZJ_TEST_MEMORY02.

DATA MATNR TYPE MATNR.

MATNR = ‘000001234‘.

SET PARAMETER ID ‘ZTEST‘ FIELD MATNR.

                   运行结果:

 

图1.2 SAP内存共享实例运行结果

 

 

2不同用户之间共享内存

2.1   SHARED MEMORY/SHARED BUFFER: 服务器上的一片所有用户共享的内存

如果EXPORT SHARED BUFFER,则必须用IMPORT SHARED BUFFER才能读取到,用IMPORT SHARED MEMORY是读不到的。

2.2   实例:

REPORT  Z2014HZJ_TEST_MEMORY02.

DATA: MATNR TYPE MATNR.

MATNR = ‘678901‘.

EXPORT MATNR TO SHARED BUFFER INDX(AA) ID  ‘ZTEST_SHARED_BUFFER‘.(先运行此程序,BUFFER值被存储到服务器,服务器下所有用户俱可读取,若该值没有进行手动删除(DELETE),则保存至服务器关机为止)。

 

REPORT  Z2014HZJ_TEST_MEMORY01.

DATA: MATNR TYPE MATNR.

IMPORT MATNR FROM SHARED BUFFER INDX(AA) ID  ‘ZTEST_SHARED_BUFFER‘.

WRITE: MATNR.

DELETE FROM SHARED BUFFER INDX(AA) ID  ‘ZTEST_SHARED_BUFFER‘.(在本机或者另外的机器上运行此程序均可从服务器读取到值)。

INDX是系统中符合特定格式的表,IMPORT/EXPORT语句并没有在INDX表中添加记录,服务器仅仅是借用INDX表结构管理该片共享内存(BUFFER)。

SHARED BUFFER不访问数据库。

2.3   运行结果:

 

图1.3 SHARED BUFFER内存共享实例运行结果

 

3   DATABASE访问数据库

3.1 SHARED BUFFER不访问数据库,需要访问数据库用DATABASE.

3.2 访问DATABASE实例

DATA: MATNR TYPE MATNR.

MATNR = ‘45667890123‘.

EXPORT MATNR TO DATABASE INDX(AA) ID  ‘ZTEST_SHARED_AND_DATABASE‘.(运行此程序,将在数据库表INDX中添加一条记录)

运行结果:(SE16查看数据库表INDX,可以发现新增了一条RELID = AA, SRTFD = YTEST_MATNR的记录)。

 

图1.4.1 EXPORT DATABASE查看INDX表选择屏幕

 

图1.4.2 EXPORT DATABASE查看INDX表条目

 

DATA: MATNR TYPE MATNR.

IMPORT MATNR FROM DATABASE INDX(AA) ID  ‘ZTEST_SHARED_AND_DATABASE‘.(从数据库读取该记录)

WRITE: MATNR.

DELETE FROM DATABASE INDX(AA) ID  ‘ZTEST_SHARED_AND_DATABASE‘.(删除测试记录)

         运行结果:(从数据库表INDX中读取到了记录并打印)

 

        图1.5 INPORT DATABASE查看打印新增的INDX表条目

 

 

 

4附注

4.1 SHARED BUFFER对于内表的操作(SHARED MEMORY,DATABASE类似)

4.1.1 示例程序:REPORT  Z2014HZJ_TEST_MEMORY02.(共享内表)

TABLES:

          MAKT.

 

TYPES: BEGIN OF TY_MAKT.

                INCLUDE STRUCTURE MAKT.

                TYPES: END OF TY_MAKT.

 

DATA: GT_MAKT TYPE TY_MAKT OCCURS 0,

                    GW_MAKT TYPE TY_MAKT.

 

SELECT-OPTIONS:  MATNR FOR MAKT-MATNR .

 

START-OF-SELECTION.

                PERFORM FRM_GET_DATA.

                EXPORT GT_MAKT TO SHARED BUFFER INDX(AA) ID ‘SHARED_BUFFER_MAKT‘.

END-OF-SELECTION.

 

FORM FRM_GET_DATA.

                SELECT *

                      INTO CORRESPONDING FIELDS OF TABLE GT_MAKT

                      FROM MAKT

                      WHERE MAKT~MATNR IN MATNR.

                      WRITE: ‘OK‘.

                ENDFORM.

4.1.2运行结果:

 

图1.6.1 EXPORT SHARED BUFFER程序选择屏幕

 

 

图1.6.2 EXPORT SHARED BUFFER程序运行结果

 

 

4.2.1示例程序:REPORT  Z2014HZJ_TEST_MEMORY02.(读取内存中的内表)

TABLES:

                  MAKT.

 

TYPES: BEGIN OF TY_MAKT.

                          INCLUDE STRUCTURE MAKT.

TYPES: END OF TY_MAKT.

 

DATA: GT_MAKT TYPE TY_MAKT OCCURS 0,

        GW_MAKT TYPE TY_MAKT.

 

IMPORT GT_MAKT FROM SHARED BUFFER INDX(AA) ID ‘SHARED_BUFFER_MAKT‘.

LOOP AT GT_MAKT INTO GW_MAKT.

                  WRITE: / GW_MAKT-MANDT,

                GW_MAKT-MATNR,

                GW_MAKT-SPRAS,

                GW_MAKT-MAKTX,

                GW_MAKT-MAKTG.

ENDLOOP.

DELETE FROM SHARED BUFFER INDX(AA) ID  ‘SHARED_BUFFER_MAKT‘.

 

4.2.2运行结果:

 

图1.7 IMPORT SHARED BUFFER程序运行结果

本文相关图片没有显示,详细文档参见:

http://files.cnblogs.com/Goergia/%E5%86%85%E5%AD%98%E4%BC%A0%E5%80%BC.pdf

 

SAP开发经验之内存共享