!--a11y-->

イベントブロックは、イベントキーワードによって導入されます。イベントブロックは、次の処理ブロックが開始されるときに終了します。次の処理ブロックは、別のイベントキーワードによって導入される別のイベントブロックであるか、コンテキストで有効な別の処理ブロック ( サブルーチンやダイアログモジュールなど) である場合があります。すべてのキーワードには、対応するイベントと同じ名称が割り当てられます。

実行可能プログラムの構造の例:
REPORT...
NODES: SPFLI, SFLIGHT.
DATA:...
INITIALIZATION.
...
AT SELECTION-SCREEN.
...
START-OF-SELECTION.
...
GET SPFLI...
..
GET SFLIGHT...
...
GET SPFLI LATE.
...
END-OF-SELECTION.
...
FORM...
...
ENDFORM.
プログラム内で処理ブロックの発生する順序は、関連ありません。実際の処理順序は、外部イベントによって決定されます。ただし、プログラムを理解しやすくするために、システムで呼び出されるのとほぼ同じ順序でイベントブロックをプログラムに含めるようにしてください。サブルーチンは、プログラムの最後に配置してください。
2 つの例外 (AT SELECTION-SCREEN と GET) を除き、イベントブロックにはローカルデータ領域がありません。イベントブロック内の宣言命令はすべて、プログラム内のグローバルデータ宣言で処理されます。そのため、すべての宣言をプログラムの先頭に含める必要があります (ABAP プログラムの構造 も参照してください) 。
処理ブロックに割り当てられていない命令は実行されません。この例外は、REPORT または PROGRAM 命令と最初の処理ブロック間にある非宣言命令で、これらはデフォルトイベントSTART-OF-SELECTION に割り当てられています。プログラムにSTART-OF-SELECTION ブロックが明示的に含まれていない場合、これらの命令がSTART-OF-SELECTION ブロック全体を形成します。プログラムにSTART-OF-SELECTION キーワードがすでに含まれている場合は、これらの命令はこのブロックの先頭に挿入されます。プログラムに明示的なイベントブロックが含まれていない場合、すべての非宣言命令はデフォルト処理ブロックSTART-OF-SELECTION に割り当てられます。

REPORT EVENT_TEST.
WRITE / 'Statement 1'.
FORM ROUTINE.
WRITE /
'Subroutine'.
ENDFORM.
WRITE / 'Statement 2'.
PERFORM ROUTINE.
WRITE / 'Statement 3'.
これにより、以下のように出力されます。
Statement 1
このプログラムでは、イベントブロック START-OF-SELECTION のみが開始されます。このブロックは、最初の WRITE 命令で構成されています。
ここで、このプログラムに START-OF-SELECTION 命令を挿入します。
REPORT EVENT_TEST.
WRITE / 'Statement 1'.
FORM ROUTINE.
WRITE /
'Subroutine'.
ENDFORM.
START-OF-SELECTION.
WRITE /
'Statement 2'.
PERFORM
ROUTINE.
WRITE /
'Statement 3'.
出力は以下のようになります。
Statement 1
Statement 2
Subroutine
Statement 3
このプログラムで、START-OF-SELECTION 処理ブロックは FORM-ENDFORM ブロック以外のすべての命令で構成されています。同じプログラムをより読みやすくすると、以下のようになります。
REPORT SAPMZTST.
START-OF-SELECTION.
WRITE /
'Statement 1'.
WRITE /
'Statement 2'.
PERFORM
ROUTINE.
WRITE /
'Statement 3'.
FORM ROUTINE.
WRITE /
'Subroutine'.
ENDFORM.
この場合、イベントキーワード START-OF-SELECTION を省略することもできます。