当程序在 SAP ECC 中运行时,“系统堆栈”存储所有全局变量,无论在该单个会话中调用什么模块/程序。
当它调用支持 RFC 的功能模块 (FM) 时,会在被调用系统中创建一个新的系统堆栈,并且当被调用 FM 完成时,只能在 ECC 中检索被调用 FM 中定义的导出参数。
有没有办法在ABAP中访问另一个系统堆栈的全局变量?
例如,就我而言:
- The FM
BAPI_MATERIAL_AVAILABILITY
在 ECC 系统中通过 RFC 调用 FMBAPI_APOATP_CHECK
在 APO 系统中。
- 当 APO FM 完成时,除了 APO RFC 功能模块中定义的参数之外,我想访问 APO 系统堆栈的一些全局变量。我需要访问 ECC 系统中的 GTC 对象引用。
PS:通常我们使用下面的ABAP语句来访问同一堆栈中的内存,但是当内存位于另一个系统中时它不起作用:
ASSIGN '(PrgmName)Globalvariable' TO FIELD-SYMBOLS(<lo_data>).
由于 RFC 连接在调用后不会自动关闭,因此在调用之后,用户会话的内存将被保留,因此您可以调用在 APO 系统中创建的自定义启用 RFC 的功能模块,该模块访问您的内存。希望并返回其值。请注意,对象引用不能通过 RFC 传递。
为了让您更好地理解,我改编了关于内存区域的官方数据 https://help.sap.com/doc/abapdocu_753_index_htm/7.53/en-US/index.htm?file=abenmemory_organization.htm显示当 2 个 ABAP 系统之间的连接未关闭时 RFC 调用如何重用内存:
图例(箭头“1”和“2”):
- 在第一次 RFC 调用时,会打开一个连接,创建一个新的用户会话、ABAP 会话和内部会话。全局变量存储在内部会话内名为“(数据)对象”的块中。调用结束时,连接将被保留,包括第一个内部会话及其全局变量。
- 在使用相同连接的下一个 RFC 调用中(现有连接被重用),用户会话被重用(连同其 ABAP 和内部会话)来执行功能模块,因此它可以访问先前调用的全局变量。 )。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)