ABAPのレポートプログラムにおいて重要な概念にイベントブロックがあります。
ABAPのプログラムは各種イベントをトリガーに、そのイベントに応じたタイミングで処理が走る形になります。そのため、こういう機能を実装したい場合は、どのイベントにどの処理を書く必要があるのかを判断できる必要があります。
ということで今回は、ABAPのレポートプログラムにおいてのイベントブロックについて説明します。Dynproの場合はまた別のイベントブロックがあるので、それは別の機会に書きたいと思います。
●レポートプログラムのイベントブロック
- INITIALIZATION
- AT SELECTION-SCREEN
- START-OF-SELECTION
- END-OF-SELECTION
- TOP-OF-PAGE
- END-OF-PAGE
- AT LINE-SELECTION
- AT USER-COMMAND
INITIALIZATION:初期処理
最初はINITIALIZATIONです。このイベントは初期処理と呼ばれており、プログラムを起動した後にまずこの部分が処理されます。
レポートプログラムの場合、選択画面で実行条件入力を実行ボタンを押したらプログラムが走るのですが、INITIALIZATIONに書いた処理は、選択画面が表示される前に動くことになります。そのため、この部分では、選択画面項目の初期値を設定したり、グローバル変数の初期化を行ったりというような、プログラムが動く前段階として行なっておきたい処理を書くことになります。
1つ注意点としては、一度実行ボタンをクリックして一覧画面等が表示され戻るボタンで選択画面に戻ってくるような場合には、処理されないという点です。あくまでも処理の最初に一度だけ実行されるイベントだということは覚えておいてください。
AT SELECTION-SCREEN:選択画面処理
AT SELECTION-SCREENは選択画面処理と言われるように、選択画面に関する処理を実行するためのイベントブロックです。
主に、選択画面に入力した値のチェックを行います。入力値の正当性を確認したり、会社コードや利益センタ・原価センタなど部門の権限チェックを実施したりします。
処理が実行されるトリガーとしては、選択画面でEnterが押されたり、実行ボタンをクリックしたりといった画面上でのアクションで実行されます。なので、実行ボタンが押された場合はAT SELECTION-SCREENに書いた処理が実行され、その後にメイン処理が実行される形になります。
ちなみにジョブで実行した場合には、実際には画面が表示されるわけではありませんが、AT SELECTION-SCREENも処理されます。
START-OF-SELECTION:主処理
そのプログラムのメインの処理を書くためのイベントブロックがSTART-OF-SELECTIONです。
選択画面で実行ボタンがクリックされたタイミングで処理が走ります。基本的にはイベントブロックを書いて、それに適した処理を書いていくべきですが、もし何もイベントブロックを書かずにベタに処理を書いていくと、プログラム全体がSTART-OF-SELECTIONの扱いになります。
END-OF-SELECTION:終了処理
そのプログラムの一連の処理の流れにおいて最後に行うべき処理を書くためのイベントブロックがEND-OF-SELECTIONです。
START-OF-SELECTIONに書いた処理が全て終わった後に、一覧画面や結果画面が表示される前にEND-OF-SELECTIONに書いた処理が流れます。実際には処理ブロックを完了させる命令等を使う場合に主処理とは分けておきたいケースだけ注意しておけば、START-OF-SELECTIONの中に、そのまま処理を書いても良いのですが、一覧や結果画面を表示する処理は分けておいた方が可読性も上がるので、うまく活用するのが良いでしょう。
TOP-OF-PAGE:ページヘッダー処理
結果ページを表示する際に、各ページのヘッダー部分を記載するためのイベントブロックがTOP-OF-PAGEです。
WRITE命令がSTART-OF-SELECTIONもしくはEND-OF-SELECTIONで実行される直前にこのイベントが処理されます。また、改ページする際にも処理が走るので、各ページに共通してヘッダー部分に表示する内容がある場合に、このイベントブロックを使用します。
END-OF-PAGE:ページフッター処理
TOP-OF-PAGEがページ毎のヘッダーですが、それと同じイメージでフッター部分に表示する内容を記述するのが、END-OF-PAGEです。
改ページする直前か、出力内容の最後にこのイベントブロックに書いた処理が走る形です。
AT LINE-SELECTION:一覧選択処理
WRITE命令で作成した一覧上でクリック等のアクションのあったタイミングで走る処理を記述するイベントブロックです。
最近ではALVで一覧を作成することが多く、WRITE命令で一覧を作成すること自体が少なくなっているので、このイベントを活用するケースも少なくなっていますが、昔に作られたアドオンプログラムのメンテナンスをするケースでは知っておいた方がスムーズに対応できると思うので、頭の片隅にでも入れておいてください。
AT USER-COMMAND:ユーザーコマンド処理
一覧画面もしくは結果画面に設置したボタンをクリックされた場合などに行いたい処理を書くイベントブロックです。
機能コードを割り当てたボタンをクリックするなどのアクションをトリガーに処理が走ります。
今後、Fioriがメインになると、この辺りの知識も少しずつ必要なくなっていくかもしれませんが、それまでは新規アドオンだけでなく保守においても触れることがある内容なので、知っておいて損はないと思うので、覚えておいてください。
コメント