SET PARAMETER ID
と GET PARAMETER ID
命令は、画面間のデータを受け渡すための一般的な方法の1つ。これら2つの命令は、画面間でデータを保持する一時的な領域(SAPメモリ)にデータを格納するために使用されます。
" SET SET PARAMETER ID '<parameter_id>' FIELD <data>. " GET GET PARAMETER ID '<parameter_id>' FIELD <data>.
このページでは、SAPメモリとは何か?SET/GET PARAMETER IDの使い方をSAP/ABAP初心者向けにサンプルコード付きでわかりやすくご説明します。
SAPエンジニアやABAPerを目指す方であれば知らないと恥ずかしい基本知識ですので、是非最後までご覧ください。
参考 ABAPの基本構文ルール
SAPメモリとは
ABAPの SET PARAMETER ID
と GET PARAMETER ID
命令で使用する一時的な領域(SAPメモリ)は、その名の通り「SAPのメモリ領域」で、特定のデータを一時的に格納してそれを他のプログラムやトランザクションからアクセスできるようにするための場所です。
SAPメモリの基本、その特徴を以下にまとめます。
- セッション間での共有:SAPメモリは全ての内部セッションで共有されます。つまり、あるプログラムが
SET PARAMETER ID
を使用してSAPメモリにデータを設定した場合、その後のプログラムがGET PARAMETER ID
を使用してそのデータを取得することが可能。 - 寿命:SAPメモリはSAPセッション(ログオンセッション)の寿命に連動。つまり、ユーザーがログオンしている間はデータが保持され、ユーザーがログオフするとデータは消去される。
- 限定的な容量:SAPメモリはリソースに対する制限があるため、大量のデータを格納するのには適していない。
- 汎用性:SAPメモリは、非常に広範な用途に使用され、あらゆる種類の情報(例えば、ユーザーID、選択したレコードのキー、他の画面から渡された情報など)を一時的に保存するために使用される。
SET PARAMETER ID
と GET PARAMETER ID
を使用することで、必要なデータをSAPメモリに格納し、同じセッション内の異なるプログラムやトランザクションからそれを取得することが可能になります。
以下に SET PARAMETER ID
と GET PARAMETER ID
を使用するいくつかの典型的なシナリオを挙げてみます。
シナリオ例 | 説明 |
---|---|
顧客マスタの画面間でのデータ受け渡し | 顧客マスタデータの一部(例えば、顧客ID)を取得し、SET PARAMETER ID を使用してSAPメモリに格納。次に別の画面で GET PARAMETER ID を使用してそのデータを取り出し、新しい画面で使用する。 |
ユーザー情報の画面間でのデータ受け渡し | ユーザーが特定の項目に入力した値を SET PARAMETER ID を使用してSAPメモリに格納。別の画面で GET PARAMETER ID を使用してそのデータを取り出し、新しい画面でその値を使用する。 |
トランザクション間のデータ受け渡し | あるトランザクションで取得した特定のデータ(例えば、注文番号)を SET PARAMETER ID を使用してSAPメモリに格納。別のトランケーションで GET PARAMETER ID を使用してそのデータを取り出し、新しいトランザクションでそのデータを使用する。 |
レポート/プログラム間でのデータ受け渡し | レポートまたはプログラムの一部で取得した特定のデータ(例えば、選択した行のキー)を SET PARAMETER ID を使用してSAPメモリに格納。次に、別のレポートまたはプログラムで GET PARAMETER ID を使用してそのデータを取り出し、新しいレポート/プログラムでそのデータを使用する。 |
以上がSAPメモリを利用する簡単な例です。他にも様々な場面で利用することが可能で、要件に応じた適切な設計が重要になります。
SAPメモリが何なのか?が何となくわかったところで、実際にSET/GET PARAMTER IDを利用する方法を学習していきましょう。
ABAP:SET PARAMETER ID
SET PARAMETER ID
は、SAPメモリにデータを格納するために使用されます。
構文ルール
SET PARAMETER ID '<parameter_id>' FIELD <data>. " <parameter_id>: 使用するパラメータ ID。これは通常、SAP によって定義されている。 " <data>: 一時的な領域に格納したいデータ。
SET PARAMETER ID
の一般的な使用例としては、例えばユーザーが入力した顧客番号をメモリに格納し、その顧客の詳細画面を開く際にそれを再利用するというケースが考えられます。
以下のコードはその一例で、まずユーザーに顧客番号を入力させ、それをSAPメモリに保存。続いて CALL TRANSACTION
を使用して顧客マスタの表示(XD03)トランザクションを呼び出します。XD03 トランザクションは顧客番号をパラメータ ID 'KUN' で取得するため、先に保存した値が自動的に使用されます。
DATA: lv_kunnr TYPE kunnr. PARAMETERS: p_kunnr TYPE kunnr OBLIGATORY. START-OF-SELECTION. lv_kunnr = p_kunnr. SET PARAMETER ID 'KUN' FIELD lv_kunnr. CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
参考 DATA / PARAMETERS / START-OF-SELECTION
↑のコードでは、まず lv_kunnr
にユーザーが入力した値(p_kunnr
)を格納し、その後、SET PARAMETER ID
を使用してこの値をSAPメモリに保存しています。
ABAP:GET PARAMETER ID
GET PARAMETER ID
は、SAPメモリからデータを取り出すために使用されます。
構文ルール
GET PARAMETER ID '<parameter_id>' FIELD <data>. " <parameter_id>: データを取得するパラメータ ID " <data>: データを取り出す変数
以下に、GET PARAMETER ID
を使用した一例を示します。この例では、前のトランザクションまたはプログラムで SET PARAMETER ID
を使用して設定された顧客番号を取得します。
DATA: lv_kunnr TYPE kunnr. START-OF-SELECTION. GET PARAMETER ID 'KUN' FIELD lv_kunnr. IF lv_kunnr IS INITIAL. WRITE: / 'No customer number found'. ELSE. WRITE: / 'The customer number is', lv_kunnr. ENDIF.
↑のコードでは、GET PARAMETER ID
を使用してパラメータ ID 'KUN' から顧客番号を取得。それを変数 lv_kunnr
に格納します。このパラメータ ID 'KUN' は、以前のトランザクションまたはプログラムで SET PARAMETER ID
を使用して設定されたものです。
このように、GET PARAMETER ID
を使用することで、あるトランザクションまたはプログラムで設定されたデータを他のトランザクションまたはプログラムで取得できます。これにより、異なるトランザクション間で一貫性を保つことが可能になります。
SET/GET PARAMETER ID を利用する際の注意点
最後に、SAPメモリを利用する際の注意点について解説しておきます。
注意点1 パラメータ ID
パラメータ ID は固有のキーで設定した値を取得する際に必要となります。このキーは通常、トランザクションコードやデータベーステーブルのフィールド名に基づいています。同じパラメータ ID を使用して異なるデータを設定すると、以前のデータは上書きされます。
注意点2 データの種類
SET PARAMETER ID
と GET PARAMETER ID
は、文字列型のデータを保存するために使用されます。これらの命令を使用して複雑なデータ構造(例えば、内部テーブルや構造体)を直接保存することはできません。
注意点3 エラーハンドリング
GET PARAMETER ID
を使用してデータを取得する際、該当のパラメータ ID でデータが設定されていない場合、エラーではなく初期値が返されます。したがって、データを取得した後は、それが初期値でないことを確認するためのチェックが必要となります。
以上の点に注意して、SAPメモリを適切に利用できるようになりましょう。
SAPメモリ:SET/GET PARAMTER ID のまとめ
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!