ABAPメモリで値の受け渡し(Import、Export)

  アドオンプログラム

概要

同一セッションで動いているプログラム間でメモリ領域を使用してデータを受け渡すことができます。
EXPORT 命令を使用してそのデータを ABAP メモリに保存し、IMPORT 命令を使用して ABAP メモリから読み込むことができます。
ABAP メモリはセッション終了時に解放されるか、又は、FREE 命令によって強制的に解放する事ができる。

サンプルコード

***** テスト用変数定義 *****
TYPES: BEGIN OF t_item,
         vbeln type vbeln,
         posnr type posnr,
       END OF t_item.

DATA: it_item_ori  TYPE TABLE OF t_item. "出力用内部テーブル
DATA: it_item_copy TYPE TABLE OF t_item. "取得用内部テーブル
DATA: wa_item TYPE t_item.

***** テストデータ格納処理 *****
wa_item-vbeln = '0000000001'.
wa_item-posnr = '00001'.
APPEND wa_item TO it_item_ori.

wa_item-vbeln = '0000000002'.
wa_item-posnr = '00001'.
APPEND wa_item TO it_item_ori.

***** 内部テーブル:it_item_oriをメモリ:ZMEMORYへ格納 *****
EXPORT it_item_ori TO MEMORY ID 'ZMEMORY'.

***** メモリ:ZMEMORYから内部テーブル:it_item_oriを取得し内部テーブル:it_item_copyへ格納 *****
IMPORT it_item_ori TO it_item_copy FROM MEMORY ID 'ZMEMORY'.

***** メモリ:ZMEMORYの解放 *****
FREE MEMORY ID 'ZMEMORY'.

説明

EXPORT 命令までを呼び出し元のプログラムへ記述、IMPORT 命令から呼び出し先のプログラムへ記述する必要があります。
用途は多く、IDCOのユーザーEXITから伝票登録時のユーザーEXITに値を渡したり、アドオンプログラムから伝票登録時のユーザーEXITに値を渡したりする事が可能です。
標準プログラムのパラメータは拡張する事ができないので、それをメモリを使用して拡張するのだと考えれば良いと思う。
注意しないといけないのが、メモリの使用先を調べる事ができないので、「どのプログラムに対してメモリを渡している」・「どのプログラムからメモリを取得している」
という事を記述しておかなければ調べるのにとても苦労する事があります。

Typeの定義方法はこちらを参照
Dataの定義方法はこちらを参照