首页 > 代码库 > 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开发经验之内存共享