ABAPでも、VBAのようなマクロを定義することができます。ABAPマクロは、1つのプログラム内で同じような命令を複数回利用する場合に、極稀に用いられることがあります。
ABAPマクロは、複数の処理を1セットにまとめて定義しておき後から呼び出して利用するという点でサブルーチンや、汎用モジュールと同じ働きをします。ただし、利用方法や利用目的がそれらとは異なり、マクロならではの注意点も存在します。
このページで学べる内容
- ABAPマクロの使い方
- プレースホルダの意味と使い方
- ABAPマクロの注意点
ある程度慣れたABAPerでも、意外と知らない豆知識を解説していますので是非最後までご覧ください。
構文ルール:ABAPマクロ
ABAPマクロの利用手順は大きく2つに分かれます。
始めに、ABAPマクロの定義。そして、次がABAPマクロの実行です。それぞれ分けて解説します。まずは、マクロの定義から。
ABAPマクロの定義
DEFINE (マクロ名).
・・・・
END-OF-DEFINITION.
※DEFINEとEND-OF-DEFINITIONの間に、マクロ内で行う具体的な処理を記述します。処理は、どれだけ長くでも問題ありません。
まず、マクロを利用する前に必ず上記命令でマクロの定義を行う必要があります。処理内容については、基本的に通常と同じようにコーディングしていきます。
ABAPマクロの実行
(マクロ名).
ABAPマクロの実行は、マクロ名をベタ打ちしピリオドを打てば完了となります。ただし、ABAPマクロの実行文は、定義文の後の行に記述しなければなりません。(定義文の前の行に実行文を書いてもマクロは実行されません。)
もし仮に、同じ名前のマクロが再定義された場合は、マクロの内容は定義文の行以降では再定義した処理内容で上書きされるため注意しましょう。
ここからは、サンプルコードを用いて、プレースホルダを用いたABAPマクロの実行方法を学習しましょう。
プレースホルダを用いたABAPマクロ
プレースホルダを用いることで汎用モジュールやサブルーチンのようにインプットとアウトプットを定義することができます。
プレースホルダというとよくわからなくなりますが、簡単に言えばサブルーチンの「USING」「CHANGING」のようなものです。
DATA:
ADD_NUMBER TYPE i VALUE 1,
RESULT TYPE i.
DEFINE calc.
RESULT = 10 + &1.
END-OF-DEFINITION.
calc ADD_NUMBER.
WRITE RESULT.
プレースホルダの指定:定義
プレースホルダの指定は、ABAPマクロの定義文の中に「&」指定を行います。
プレースホルダは、最大で9個まで保持することが可能です。(プレースホルダをあまり多く指定しすぎると可読性が落ちるのでお勧めしません。)
DEFINE calc.
RESULT = 10 + &1.
END-OF-DEFINITION.
プレースホルダの指定:実行
プレースホルダを保持しているABAPマクロの実行は、マクロ名の後ろに実際に用いる値やデータオブジェクトを指定します。
calc ADD_NUMBER.
プレースホルダが複数個ある場合は、&1~&9の順に並べていくだけです。
ちなみに、サンプルコードの結果は「11」となります。
ABAPマクロ利用時の注意点
ここまで解説してきたABAPマクロですが、実際はほぼ利用されません。
標準のプログラムなどでたまに見かける程度です。
では、なぜあまり用いられることがないのか?2つの観点から整理します。
可読性の低下
ABAPマクロは、定義の中身までデバッグすることができません。
※デバッグ実行時にABAPマクロの定義部分の中身の処理まで追うことができません。
DATA:
ADD_NUMBER TYPE i VALUE 1,
RESULT TYPE i.
DEFINE calc.
RESULT = 10 + &1.
END-OF-DEFINITION.
calc ADD_NUMBER.
WRITE RESULT.
具体的に言うと、グレーハイライト部分にブレイクポイント設置しても、ABAPマクロの定義文の中身まで処理を追ってくれないのです。
したがって、ABAPマクロを利用するぐらいであれば、汎用モジュールやサブルーチンといった形でモジュール化したほうが良いということです。
サブルーチンや汎用モジュールが多用されるのに、ABAPマクロはその存在すらあまり知られていないのはここに大きな原因があります。
利便性の低さ
ABAPマクロは、サブルーチンや汎用モジュールと異なり必ず実行文の前に定義文を書く必要があります。
サブルーチンや汎用モジュールでは、①実行文⇒②定義文としても問題ありませんが、ABAPマクロの場合①実行文⇒②定義文とするとエラーになります。
インクルードプログラムなどを用いてコーディングする場合には、なおさら注意が必要となるため、ABAPマクロはだれにも利用されたがらない存在なのです。
サンプルコードで用いたように、簡単な定義文と実行文の組み合わせであれば用いてもよいかもしれませんが、できるだけサブルーチンや汎用モジュールなどで代用したほうがよいでしょう。
ここまで解説してきて結論がさみしいですが、ABAPマクロはできるだけ利用しないことをお勧めします。
1からABAPを学習したい方は・・・
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!