SAP内存:主会话之间的数据共享(主会话:即单开的SAP窗口,SAP最多支持同时打开6个主会话)
引言
在MM03事务下输入一个物料号A后,若再打开一个外部回话,进入物料相关的事务代码(包含有需要输入物料号的文本框),此时会话中将自动填充物料号A。这是因为使用了SAP内存,SAP内存使用SPA/GPA技术传递程序间数据。(传递内存参数来给其他程序输入字段赋值的操作叫做“SPA/GPA技术”)SAP/GPA参数指的是SAP内存的参数,可在表TPARA中进行确认。SPA/GPA技术只限相同的用户共享内存,(又叫User Specific参数)
实例解释:
A、输入事务代码MM03,再输入物料号:
B、输入事务代码MM02时,系统将自动填充物料号:
这是因为使用了SAP内存,按F1进入技术信息可以查看到Parameter ID:
该参数ID保存在表TPARA中,用户可以通过以下两种方式在表内维护新的SAP参数(PID:PARAMETER ID):
方法1:SE80->Workbench->Edit Object
方法2:SM30->TPARA表,维护条目
SAP内存应用
1、PARAMETERS、SELECT-OPTION 后接MEMORY ID
在SE38下报表程序的选择界面上的参数PARAMETERS或SELECT-OPTION变量使用MEMORY ID来连接字段与参数:
例如在程序 ZTEST20200508_01下有参数P_DATE并且设置了MEMORY ID ZMID1:
在另一程序ZTEST20200511_01下也有参数P_DATE并且设置了MEMORY ID ZMID1:
其中一个程序输入P_DATE参数值后(运行,系统会记录到SAP内存):
可以在另一程序界面下看见输入的参数值(由系统自动带出SAP内存值):
注意:同样也可以在同一个窗口的内部会话内使用SAP内存实现数据共享:
运行程序YTEST_20200514_02,并在界面中输入参数GV_DATE的值后,内部调用程序YTEST_20200514_01,调用的程序界面也会自动填充GV_DATE1参数值:
2、使用SET/GET PARAMETER ID
解释:SET PARAMETER ID 'RID' FIELD <FIELD NAME1>语句,系统将值存储在SPA参数‘RID’中的<FIELD NAME1>.中。标识符‘RID’必须在SAP表TPARA中定义。如果SPA参数‘RID’已经包含值,则SET PARAMETER语句会将其覆盖(用<FIELD NAME1>.的内容)。在被调事务的PBO模块中,使用GET PARAMTER ID 'RID' FIELD <FIELD NAME2>获取值
实例:SE80或者SM30在表TPARA中创建了名称为ZMID2的参数ID:
在程序A中使用了SET PARAMETER ID 'ZMID2' FIELD GV_DATE2的语句:
(运行过A后)在程序B中使用了GET PARAMETER ID 'ZMID2' FIELD GV_DATE2的语句:
输出B中的GV_DATE2:
注意:由于使用了SAP内存,PID保存的字段值会一直存在,直到该用户退出本次系统登录。
特别的:
在数据元素中若设置了PARAMETER ID,则使用同一数据元素的参数也会有上述效果。在数据元素中设置了PID:
(需在表TPARA中创建该参数ID,也可双击参数ID创建)
在程序A中应用含有该参数ID的数据元素:
在程序B中同样应用该参数ID的数据元素:
运行程序B输出为:
其他应用:
1、使用HIDE语句,将字段值保存到HIDE内存领域
2、Debug界面查询Goto->System Areas->SAP Memory.可以查看SAP内存