当程序在SAP ECC中运行时,“系统堆栈”存储所有全局变量,而与在单个会话中调用哪些模块/程序无关。
在调用启用RFC的功能模块(FM)时,将在被调用系统中创建一个新的系统堆栈,并且在被调用FM完成后,只能在ECC中检索被调用FM中定义的导出参数。
是否可以在ABAP中访问另一个系统堆栈的全局变量?
例如,在我的情况下:
BAPI_MATERIAL_AVAILABILITY
通过RFC调用APO系统中的FM BAPI_APOATP_CHECK
。PS:通常我们使用下面的ABAP语句从同一堆栈访问内存,但是当内存在另一个系统中时,它将不起作用:
ASSIGN '(PrgmName)Globalvariable' TO FIELD-SYMBOLS(<lo_data>).
答案 0 :(得分:3)
由于在调用后RFC连接没有自动关闭,因此用户会话的内存将在调用后立即保留,因此您可以调用在APO系统中创建的自定义启用RFC的功能模块,该模块可以访问您想要的内存并返回其值。请注意,对象引用不能通过RFC传递。
为了使您更好地理解,我改编了official figure about memory areas,以显示在两个ABAP系统之间未关闭连接时RFC调用如何重用内存:
传奇(箭头“ 1”和“ 2”):