メモリ領域の使用

24.2 メモリ領域の使用

SAPメモリとABAPメモリ

プログラムを作ると、「別の処理(別プログラム)に値を渡したい」場面が出てきます。
そのときに使えるのが「メモリ領域」です。メモリ領域を使うと、ファイル出力やDB更新をせずに、値を一時的に引き継ぐことができます。
ABAPで扱う代表的なメモリには、次の2種類があります。
●SAPメモリ
●ABAPメモリ

SAPメモリ

SAPメモリは、SAP GUI上の複数セッション(複数モード)から参照できるメモリ領域です。
初心者の段階では、次の理解で十分です。

・主な用途:選択画面の値(入力値)を保持・引き継ぐ
・代表例:PARAMETERS/SELECT-OPTIONS の MEMORY ID
・代表命令:SET PARAMETER / GET PARAMETER

たとえば、選択画面で入力した会社コードなどを「次回も初期値として出したい」「別画面でも同じ値を使いたい」といった目的に向いています。

ABAPメモリ

ABAPメモリは、同一ユーザセッション内で、プログラム間のデータ受け渡しに使えるメモリ領域です。「あるプログラムで作ったデータを、別のプログラム側で受け取りたい」という場面で利用します。 ABAPメモリでは、主に次の命令を使います。

・EXPORT:データをABAPメモリに保存する
・IMPORT:ABAPメモリからデータを読み込む

また、SUBMIT で別プログラムを呼び出す場合に、オプションを使わずに値を受け渡したいときにABAPメモリが利用できます。

実装の考え方としては、次のように分けます。
・呼び出し元プログラム:EXPORT までを書く
・呼び出し先プログラム:IMPORT 以降を書く

SAPメモリとABAPメモリの使い分け

メモリはどちらも「一時的に値を保持する」点は同じですが、目的が少し違います。

・SAPメモリ:選択画面などの「入力値」を保持して、次回も使いやすくする(初期値・引き継ぎ)
・ABAPメモリ:プログラム同士で「処理用データ」を受け渡す(EXPORT/IMPORT で渡す)

サンプルコードで、「メモリ領域」を使って値を一時的に引き継ぐ方法を確認します。
メモリを使うと、ファイル出力やDB更新を行わずに、別のタイミング/別のプログラムで同じ値を再利用できます。
ABAPでよく扱うメモリは、次の2種類です。

・SAPメモリ:主に「選択画面の入力値」を次回以降に引き継ぐための仕組み
・ABAPメモリ:プログラム間でデータを受け渡すための仕組み(EXPORT/IMPORT)
ここでは、それぞれを最小構成のサンプルで体験します。

■ サンプルコード:SAPメモリ(GET/SET PARAMETER)のサンプル
*&---------------------------------------------------------------------*
*& Report Z_SAMPLE242_SAPMEMORY
*&---------------------------------------------------------------------*
*& 概要:SAPメモリ(SET/GET PARAMETER)
*&---------------------------------------------------------------------*
REPORT Z_SAMPLE242_SAPMEMORY.

"※IDは例です(実務ではプロジェクトで決めたIDを使います)
PARAMETERS P_BUKRS TYPE BUKRS.

INITIALIZATION.
  "前回保存した値があれば初期値として取り出す
  GET PARAMETER ID 'ZBUK' FIELD P_BUKRS.

START-OF-SELECTION.
  "今回入力した値をSAPメモリに保存する(次回起動時に使える)
  SET PARAMETER ID 'ZBUK' FIELD P_BUKRS.

  WRITE: / '入力された会社コード:', P_BUKRS.
  WRITE: / 'SAPメモリに保存しました(次回の初期値になります)'.

「GET PARAMETER」は、以前に保存した値があれば取り出して初期値に設定します。
そのため、プログラム起動直後に実行されるINITIALIZATIONに書くのが基本です。

「SET PARAMETER」は、今回入力した値をSAPメモリに保存します。
この処理を行うことで、次回起動時に「GET PARAMETER」で同じ値を初期表示できます。

SAPメモリは「入力値を引き継ぐ」用途に向いており、選択画面の使い勝手を上げる目的で利用されます。

■ サンプルコード:SAPメモリ(GET/SET PARAMETER)のサンプル
*&---------------------------------------------------------------------*
*& Report Z_SAMPLE242_ABAPMEMORY_SEND
*&---------------------------------------------------------------------*
*& 概要:ABAPメモリにEXPORTして別レポートへ渡す(送信側)
*&---------------------------------------------------------------------*
REPORT Z_SAMPLE242_ABAPMEMORY_SEND.

PARAMETERS P_TEXT TYPE STRING.

START-OF-SELECTION.

  "ABAPメモリにデータを保存(IDで箱を識別)
  EXPORT P_TEXT = P_TEXT TO MEMORY ID 'ZTXT'.

  "別レポートを呼び出す(同一セッション内)
  SUBMIT Z_SAMPLE242_ABAPMEMORY_IMPORT AND RETURN.

*&---------------------------------------------------------------------*
*& Report Z_SAMPLE242_ABAPMEMORY_IMPORT
*&---------------------------------------------------------------------*
*& 概要:ABAPメモリからIMPORTして受け取る(受信側)
*&---------------------------------------------------------------------*
REPORT Z_SAMPLE242_ABAPMEMORY_IMPORT.

DATA GV_TEXT TYPE STRING.

START-OF-SELECTION.

  "ABAPメモリからデータを取り出す
  IMPORT P_TEXT = GV_TEXT FROM MEMORY ID 'ZTXT'.

  IF GV_TEXT IS INITIAL.
    WRITE: / 'ABAPメモリにデータがありません。'.
  ELSE.
    WRITE: / '受け取った文字列:', GV_TEXT.
  ENDIF.

ABAPメモリは プログラム間のデータ受け渡しに使います。
送信側で「EXPORT」、受信側で「IMPORT」を行うことで、同じセッション内で値を引き継げます。
「MEMORY ID」は、「保存先の名前」です。
送信側(EXPORT)と受信側(IMPORT)は、同じIDを指定する必要があります。
受信側では、データが存在しない場合もあるため、IMPORT後は初期値(空)かどうかを確認してから使うと安全です。
ABAPメモリは便利ですが、使いすぎると処理の流れが追いにくくなるため、「プログラム間の受け渡しが本当に必要な場合」に限定して使うのがコツです。

・SAPメモリ:選択画面の入力値を次回に引き継ぐ(GET/SET PARAMETER)
・ABAPメモリ:プログラム間でデータを渡す(EXPORT/IMPORT)

この2つを区別できれば、メモリを「便利な道具」として安全に使えるようになります。


NEXT>> 第25章 ファイル操作

研修の詳細はこちら