为什么“导出和导入到内存ID”为空白?

时间:2019-09-26 15:19:15

标签: sap abap

我有两种方法: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}}

2 个答案:

答案 0 :(得分:3)

导出到内存/导入到内存仅在会话中有效。 因此,假设您没有使用export和memory命令犯错/大写小写错误,那么我只能假设您不再使用会话中的调用顺序。 例如,对无状态服务的新呼叫,新的rfc呼叫不重用会话。

跨工作流程跨会话选项。

Export ... to SHARED BUFFER

但是,不能保证会有值存在,因为有一种自动的按需自由算法,该算法将丢弃条目以为新条目腾出空间。 因此,如果您打算使用此功能,请确保将足够的内存分配给共享内存缓冲区。在AL12中,您可以监视条目。 enter image description here

答案 1 :(得分:1)

Export to memoryImport to memory使用的“ ABAP内存”只能由在同一"ABAP session"中运行的程序访问(解释不同类型的内存和会话类型)在基于ABAP的系统中。

如果两个程序通过SUBMITCALL TRANSACTION,过程调用等语句直接或间接调用,则它们可以在同一ABAP会话中运行。

例如:

  • 如果有两个HTTP调用,那将是两个不同的ABAP会话。 BSP(这是一种古老的SAP技术)有一个例外,BSP级别有一个“有状态”标志,该标志保留并重用了ABAP会话。
  • 如果用户一次登录(一个用户会话)并打开一个新窗口(Ctrl + N),则在该窗口中执行的所有程序都将在第二个“ ABAP会话”中运行,即,在每个会话中运行的两个程序无法通信通过“ 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会话”可能被称为旧名称“外部会话”。