Почему идентификатор экспорта и импорта в память пуст? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть два метода: METHOD_A() и 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.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Экспорт в память / Импорт в память действителен только в течение сеанса.Таким образом, предполагая, что вы не допустили опечатку / заглавную строчную букву с командами экспорта и памяти, тогда я могу только предположить, что вы больше не используете последовательность вызовов в сеансе.Например, новые вызовы к службам без сохранения состояния, новые вызовы RFC, не использующие повторно сеанс.

Параметр кросс-сеанса кросс-процесса.

Export ... to SHARED BUFFER

ОДНАКО, нет НИКАКИХ гарантийзначение будет там, так как есть алгоритм автоматического освобождения по мере необходимости, который отбрасывает записи, чтобы освободить место для новых записей.Поэтому, если вы планируете использовать это, убедитесь, что для буфера общей памяти выделено достаточно памяти.в AL12 вы можете отслеживать записи.enter image description here

0 голосов
/ 27 сентября 2019

«Память ABAP», используемая Export to memory и Import to memory, доступна только для программ, работающих в одном и том же «Сеанс ABAP» (объяснение различных типов памяти и типов памяти.сеансы в системах на основе ABAP).

Две программы могут выполняться в одном сеансе ABAP, если они вызывают друг друга, прямо или косвенно, с помощью таких операторов, как SUBMIT, CALL TRANSACTION, вызов процедуры и т. д.

Например:

  • Если есть два 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» может быть более известен как старое имя «внешний сеанс».

...