聊聊SAP内存和ABAP内存
1、区别与联系
SAP内存(SAP Memory)和ABAP内存(ABAP Memory),两者都可用于编程中的数据传递,将数据通过ID进行绑定,之后在其他程序中通过ID获取。
1.1、语法区别
1、SAP内存通过SET/GET PARAMETER,来抛接内存值,如:
SET PARAMETER ID 'MAT' FIELD p_matnr. GET PARAMETER ID 'MAT' FIELD p_matnr.
2、ABAP内存通过EXPORT/IMPORT,来抛接内存值,如:
EXPORT p_matnr TO MEMORY ID 'MAT'. IMPORT p_matnr FROM MEMORY ID 'MAT'. FREE MEMORY ID 'MAT'.
1.2、作用范围区别
在介绍作用范围区别之前,先引入三个概念,User Session、External Session 和 Internal Session。
当用户登录SAP就生成了User Session。
打开一个窗口界面,就产生了一个External Session,窗口关闭,则External Session释放。
SAP NW 7.0之前的版本,一次最多打开6个窗口,也就是6个External Session。之后的版本最多打开16个窗口。
在一个窗口内,通过CALL TRANSACTION,SUBMIT等方式调用程序,则会自动打开Internal Session,此处会根据调用打开多个Internal Session。当窗口关闭时,则释放该External Session下的所有Internal Session。
用户退出登录,则关闭所有External Session和Internal Session。
理解了这三个概念,现在回到主题,上文的ABAP内存是在Internal Session之间进行数据传递,而SAP内存是在External Session之间进行数据传递,当然也可以传数据到Internal Session中。
通俗的讲,ABAP内存是在同一个窗口内运行的程序之间,进行数据传递。而SAP内存,可以在多个窗口之间进行数据传递。如下图所示
2、代码举例
2.1、ABAP内存
在主程序抛数据
在被调程序中接收数据
而如果在另外一个窗口中运行YTEST007是不会收到数据的
2.2、SAP内存
在主程序Y001中抛SAP内存
在另一个窗口调用Y002接内存
2.3、标准SAP内存ID
在SAP中,定义了很多SAP内存ID,存放在TPARA表中,通常也与数据元素绑定
如此,可以通过SAP抛内存的方式,为初始屏幕中的字段填值
"--------------------@斌将军-------------------- DATA:lv_matnr TYPE mara-matnr. lv_matnr = '2000000585'. SET PARAMETER ID 'MAT' FIELD lv_matnr. CALL TRANSACTION 'MM03'." AND SKIP FIRST SCREEN. "--------------------@斌将军--------------------
自动填上物料
搭配AND SKIP FIRST SCREEN,就自动打开对应的物料视图。
是不是很熟悉?没错,这就是我们平时在报表中常用的穿透。
对于SAP内存传值的应用还很多。再比如,当批导上传EXCEL时,为了能记录上次导入的文件地址,避免重复选择文件,通常在文件后边加上MEMORY ID
此应用也是使用了SAP内存传值
上传文件地址
如果此时用接内存的方式,运行程序就能得到批导程序上传的文件路径
当然此时运行其他批导程序,而且MEMORY ID相同,则其他程序也会自动带出上一个批导程序的文件路径
所以内存传值也可以用在一些个性化细节的需求开发
3、结语
以上就是关于SAP内存和ABAP内存的介绍,希望对您有所帮助。
定期更文,欢迎关注