聊聊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内存的介绍,希望对您有所帮助。

定期更文,欢迎关注

 

posted @ 2024-03-21 14:01  斌将军  阅读(3)  评论(0编辑  收藏  举报