我有两种方法:METHOD_B()
和METHOD_A()
。
在METHOD_A_A
中,我使用了另一种方法et_entityset
,该方法向我返回了内部表et_entityset
和一些数据。
我想将METHOD_B()
导出到内存并从et_entityset
的内存中导入,但是当我导入In method METHOD_A():
DATA et_entityset TYPE some_type.
lo_camp->METHOD_A_A(
EXPORTING
it_order = SOMETHING
IMPORTING
et_entityset = et_entityset
).
IF et_entityset IS NOT INITIAL.
EXPORT lt_mem_content FROM et_entityset TO MEMORY ID 'lt_memory_content'.
ENDIF.
时,它总是空白。
我的最小可重复示例:
In METHOD_B():
DATA lt_mem_content TYPE some_type.
IMPORT lt_mem_content TO lt_mem_content FROM MEMORY ID 'lt_memory_content'.
READ TABLE lt_mem_content INTO DATA(ls_mem_content) INDEX 1.
DATA(lv_content_id) = ls_mem_content-id.
{{1}}
答案 0 :(得分:3)
导出到内存/导入到内存仅在会话中有效。 因此,假设您没有使用export和memory命令犯错/大写小写错误,那么我只能假设您不再使用会话中的调用顺序。 例如,对无状态服务的新呼叫,新的rfc呼叫不重用会话。
跨工作流程跨会话选项。
Export ... to SHARED BUFFER
但是,不能保证会有值存在,因为有一种自动的按需自由算法,该算法将丢弃条目以为新条目腾出空间。 因此,如果您打算使用此功能,请确保将足够的内存分配给共享内存缓冲区。在AL12中,您可以监视条目。
答案 1 :(得分:1)
Export to memory
和Import to memory
使用的“ ABAP内存”只能由在同一"ABAP session"中运行的程序访问(解释不同类型的内存和会话类型)在基于ABAP的系统中。
如果两个程序通过SUBMIT
,CALL TRANSACTION
,过程调用等语句直接或间接调用,则它们可以在同一ABAP会话中运行。
例如:
使两个程序通过ABAP存储器交换一些数据的示例:
REPORT zprogram1.
DATA variable TYPE string.
EXPORT memory_name_1 = `A` TO MEMORY ID 'my Z memory 1'.
SUBMIT zprogram2 AND RETURN.
IMPORT memory_name_2 = variable FROM MEMORY ID 'my Z memory 2'.
ASSERT variable = `AB`. " <=== proof that data was transferred via ABAP memory
REPORT zprogram2.
DATA variable TYPE string.
IMPORT memory_name_1 = variable FROM MEMORY ID 'my Z memory 1'.
variable = variable && `B`.
EXPORT memory_name_2 = variable TO MEMORY ID 'my Z memory 2'.
PS:“ ABAP会话”可能被称为旧名称“外部会话”。