PR

【ABAP】イベントブロックを1から分かりやすく解説

blank ABAP

"INITIALIZATION" "AT-SELECTION-SCREEN"に代表されるイベントブロックについて解説します。

イベントブロックを理解すれば、ABAPがどのように実行されていくのか?ABAPはどういう言語なのか?を深く知ることができます。

このページで学べる内容
  • 【前提】イベントドリブン言語とは?
  • イベントブロックとは何か?
  • イベントブロックの実行順序
  • イベントブロックの書き方・使い方

普段何気なくイベントブロックを使っているが結局どういう意味があるの?という疑問をお持ちの方にも役に立つ内容です。是非最後までご覧ください。

スポンサーリンク

前提:イベントドリブン言語とは?

バイナリ, 手, キーボード, タップ, 入力してください, 入力, ストア, 1, Null, デジタル

ABAPはイベントドリブン言語です。

イベントドリブン言語を一言で説明すると「イベントの発生をトリガーにプログラムが実行される言語」となります。

イベントとは?

ユーザによるキーボードの操作マウスのクリックなどによって、システムに何らかの変更が加えられシステムの状態が変化する出来事のことです。

例えば・・・

”Enter”ボタンを押す」

"戻るボタン" をマウスでクリックする」

"選択画面" が表示される」

つまり、「ENTERが押される」「実行ボタンが押される」「選択画面が表示される」という「イベントをトリガーに特定の処理が行われる」のがイベントドリブン言語です

ABAPも、上記で説明した内容と同じように「実行ボタンを押す」「選択画面が表示される」などのイベントに応じてプログラムが処理されるように設計されています。

したがって、ABAPをコーディングしていく上で、そのソースコードがいつ実行されるのか?を知っていないと適切なコーディングができません。ABAPのイベントブロックを正確に理解することは非常に重要です。

ABAP:イベントブロックとは?

イベントブロックとは、その名の通りイベントの区切りです。

イベントドリブン,イベントブロック,ABAP

ABAPでは、イベン卜ブロックは後述するイベントキーワードで始まり、次のイベントキーワードまでが1つのイベントブロックとなります。

イベントブロックの実行順序

ABAPでは、このイベントは基本的に事前に決められた順序で呼び出されるようになっています。

イベントブロックの実行順序
  1. LOAD-OF-PROGRAM
  2. INITIALIZATION
  3. AT-SELECTION-SCREEN
  4. START-OF-SELECTION
  5. GET
  6. TOP-OF-PAGE
  7. END-OF-PAGE
  8. END-OF-SELECTION
  9. AT LINE-SELECTION

それぞれのイベントブロックの意味について以下で詳しく解説していきます。

LOAD-OF-PROGRAM

LOAD-OF-PROGRAM.

プログラム開始時を示すイベントブロックです。プログラムが実行される際、1番最初に1度だけ実行されるイベントブロックです。(プログラムが呼び出される時点で処理される。)

ただし、このイベントブロックの利用頻度は決して高くありません。次に解説するINITIALIZATIONも似たようなイベントブロックであるため、そちらを利用する方が圧倒的多数です。

INITIALIZATION

INITIALIZATION.

このイベントはLOAD-OF-PROGRAMの直後、「プログラムが実行されて選択画面が表示される前」を示します。

このイベントは、選択画面が表示される前を示すため、例えば選択画面を持つ機能などで、事前に選択項目に初期値を入れておきたい場合などに利用されるのがメイン。

INITIALIZATIONの注意点

このイベントが発生するのは、プログラム実行後1度だけです。

他のイベントはボタンを押すたびに発生するなど、複数回発生する場合もありますが、INITIALIZATIONが複数回実行されることはないという点に注意してください。

AT SELECTION-SCREEN

AT SELECTION-SCREEN.

「AT-SELECTION-SCREEN」は選択画面イベントと呼ばれます。

選択画面で”Enter”を押したタイミング」です。

例えば、ユーザが入力した値をチェックしたい場合(氏名は全角カタカナで書いていることをチェックしろ!など)という命令を書こうと思った場合には、このイベントブロックの中で記述します。

チェックした結果はMESSAGE命令を通して画面に表示されます。「 AT SELECTION-SCREEN 」イベントでエラーメッセージが出力された場合は、再入力が可能になります。(処理が再度「 AT SELECTION-SCREEN 」イベントに戻ります。)

後述する「START-OF-SELECTION」イベントでは、エラーメッセージが吐き出されても元の画面に戻りません。すなわち、実行前の画面からやり直しになります。

START-OF-SELECTION

START-OF-SELECTION.

「START-OF-SELECTION」は、標準処理ブロックと呼ばれます。分かりやすく説明すると「実行ボタンが押された後」に実行されるイベントブロックが、「START-OF-SELECTION」です。

標準処理ブロックと名の付く通り、ほとんどの処理はこのブロック内で実行されるため、START-OF-SELECTIONは「デフォルトイベント」とも呼ばれます。

特にイベントを宣言しないで処理を記述した場合、その処理は ”START-OF-SELECTION” に割り当てられます。

したがって、以下の3つの処理は全て同じ処理として認識されます。イベントブロックの位置に注目してご覧ください。

サンプルコード1:START-OF-SELECTION

DATA text001 TYPE string.

START-OF-SELECTION.
text001 = `Hello!`.
WRITE text001.

サンプルコード2:START-OF-SELECTION

DATA text001 TYPE string.
text001 = `Hello!`.

START-OF-SELECTION.
WRITE text001.

サンプルコード3:START-OF-SELECTION

DATA text001 TYPE string.
text001 = `Hello!`.
WRITE text001.

もし、イベントブロックを何も記述しない場合は、全てこの「START-OF-SELECTION」イベントに属することになります。

TOP-OF-PAGE

TOP-OF-PAGE.

一覧の作成時、新しいページが始まるタイミングに直後に実行されるイベントブロックです。

その名の通り、ページのヘッダ情報を付与するのが主な役割です。もっと具体的に言えば、一覧ページが複数ページとなる場合には、その都度「TOP-OF-PAGE」イベントが実行されます。

END-OF-PAGE

END-OF-PAGE.

「TOP-OF-PAGE」の対でページのヘッダを作成するためのイベントブロックです。

このイベントブロックが実行されるのは、一覧の作成時に次のページに達したときです。 つまり、一覧画面が複数ページとならない場合には、このイベントブロックは実行されません。

END-OF-SELECTION

END-OF-SELECTION.

プログラムのメイン処理が終了するタイミングで実行されるイベントブロックです。基本的には、最後に動くイベントブロックであると理解してOK

※このイベントブロックが終わると、プログラムの実行が完了します。

このイベントブロックでは、例外処理を記述したり、処理結果の登録(ログの出力)を行ったりすることが多いです。

ただ、「END-OF-SELECTION」をわざわざ記述する必要があるプログラムは少ないため、こちらのイベントブロックも利用頻度は高くありません。

SAP/ABAPを1から学習したい方は

blank

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

blank

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

タイトルとURLをコピーしました