!--a11y-->

ユーザインタラクションの後、ABAP 実行時環境で、機能コード自体(%EX や %PC など) を処理するか、対応するイベントをトリガするかがチェックされます。PAI イベントがトリガされる通常の画面とは異なり、実行時環境では一覧イベントの発生時に 3 つの特別なイベントがトリガされます。対応するイベントブロックを ABAP プログラムに使用して、ユーザアクションに反応することができます。プログラム内でSY-UCOMM システム項目を使用して、機能コードにアクセスすることができます。書込み対象の OK_CODE はありません。
ユーザが機能コード PF<nn> (<nn> は 01 から 24 までの値) を選択すると、常に AT PF<nn> イベントがトリガされます。標準一覧ステータスでは、対応するイベントブロックがプログラムに定義されていれば、事前定義済のシステム機能用に予約されていない機能キー F<nn> はすべて機能コードPF<nn> を持っています。
AT PF<nn>.
<statements>.
これらのイベントブロックは、ユーザが対応する機能キーを選択すると実行されます。一覧内におけるカーソルの位置は無関係です。
これらのイベントブロックを使用する場合、一時的なテストバージョン専用として使用してください。本稼動プログラムでは、機能コードを機能キーに割り当てるために、各自のダイアログステータスで AT USER-COMMAND だけを使用する必要があります。独自のインタフェースを使用するときには、機能による実行内容を説明する機能テキストが表示されます。AT PF<nn> イベントブロックを使用するときにはこれは表示されません。
ユーザがカーソルを一覧行に置くことによって機能コード PICK がトリガされると、常に AT LINE-SELECTION がトリガされます。機能コード PICK はデフォルトで、機能キー F2 ( つまりダブルクリック) とリンクされます。このため、別のユーザアクションに対するリアクションのない単純なプログラムの場合、このイベントブロックを指定するだけで済みます。
AT LINE-SELECTION.
<statements>.
セクション一覧のダイアログステータスで説明されているように、プログラムに AT LINE-SELECTION イベントが含まれる場合、機能コード PICK は常に標準一覧ステータスに追加されます。
PICK を他の機能キーやメニューエントリに割り当てた場合、ユーザがこれらを選択すると、AT LINE-SELECTION もトリガされます。意味論的な理由により、これは避ける必要があります。
逆に見ると、行選択に対するリアクションのないより広範なプログラムの場合、機能コード PICK の使用は避ける必要があります。代わりに、別の機能コードを F2 に割り当て、可能な限り多数のイベントが AT USER-COMMAND イベントをトリガするようにします。
一覧処理時にユーザがシステムまたは PICK か PF<nn> によって処理される機能コードを選択すると、イベント AT USER-COMMAND がトリガされます。このイベントに独自の一覧の GUI ステータスを定義する必要があります。プログラムの独自の機能コードに反応するためには、以下のイベントブロックを定義する必要があります。
AT USER-COMMAND.
<statements>.
このイベントブロックに、IF または CASE 構造を使用して、機能コードの区別を指定することができます。これらはシステム項目 SY-UCOMM に用意されています。SY-LSIND や SY-PFKEY など、一覧イベントで書き込まれる他のシステム項目があります。これらのシステム項目を使用して、ケースの区別を指定することができます。
プログラムから一覧イベントをトリガするには、以下のように指定します。
SET USER-COMMAND <fc>.
この命令は、現在の一覧が完成した後で有効になります。一覧が表示される前に、使用しているダイアログステータスに関わりなく、機能コード<fc> に割り当てられたイベントがトリガされます。
この影響は、ユーザが機能を選択した場合と同じです。つまり、事前定義された一覧機能コードの割込と処理が実行時環境で行われ、機能コード PICK と PF<nn> によって AT LINE-SELECTION と AT PF<nn> イベントがトリガされ、ユーザ定義機能コードによって AT USER-COMMAND イベントブロックがトリガされます。
カーソルを一覧行に置いた場合のみ、機能コード PICK によってイベントがトリガされます。
システム機能用に予約された機能コードと組み合わせてこの命令を使用すれば、プログラムからシステム機能を呼び出すことができます。たとえば、SET USER-COMMAND '%SC' を使用して、検索ダイアログボックスを直接呼び出したり、表示される前に一覧を適切に置くことができます。
一覧の作成時に複数の SET USER-COMMAND 命令を使用する場合、最後の命令だけが実行されます。

AT LINE-SELECTION の例。
REPORT demo_list_at_line_selection.
START-OF-SELECTION.
WRITE 'Basic List'.
AT
LINE-SELECTION.
WRITE: 'Secondary List by Line-Selection',
/ 'SY-UCOMM =', sy-ucomm.
プログラムを実行すると、標準一覧ステータスの基本一覧が表示されます。詳細一覧ではSY-UCOMM に値 PICK があります。

AT PF<nn> の例。
REPORT demo_list_at_pf.
START-OF-SELECTION.
WRITE 'Basic List, Press PF5, PF6, PF7, or PF8'.
AT pf5.
PERFORM out.
AT pf6.
PERFORM out.
AT pf7.
PERFORM out.
AT pf8.
PERFORM out.
FORM
out.
WRITE: 'Secondary List by PF-Key Selection',
/ 'SY-LSIND =', sy-lsind,
/ 'SY-UCOMM =',
sy-ucomm.
ENDFORM.
プログラムを実行すると、基本一覧が表示されます。ユーザは二次一覧を作成するために機能キー F5 、 F6 、 F7 、 F8 を押すことができます。たとえば、ユーザが押す 14 番目のキーが F6 である場合、表示される二次一覧の出力は以下のようになります。
Secondary List by PF-Key Selection
SY-LSIND = 14
SY-UCOMM = PF06

AT USER-COMMAND の例。
REPORT demo_list_at_user_command NO STANDARD PAGE HEADING.
START-OF-SELECTION.
WRITE: 'Basic List',
/ 'SY-LSIND:', sy-lsind.
TOP-OF-PAGE.
WRITE 'Top-of-Page'.
ULINE.
TOP-OF-PAGE DURING
LINE-SELECTION.
CASE sy-pfkey.
WHEN 'TEST'.
WRITE 'Self-defined GUI for Function Codes'.
ULINE.
ENDCASE.
AT
LINE-SELECTION.
SET PF-STATUS 'TEST' EXCLUDING 'PICK'.
PERFORM out.
sy-lsind = sy-lsind - 1.
AT
USER-COMMAND.
CASE sy-ucomm.
WHEN 'FC1'.
PERFORM out.
WRITE / 'Button FUN 1 was pressed'.
WHEN 'FC2'.
PERFORM out.
WRITE / 'Button FUN 2 was pressed'.
WHEN 'FC3'.
PERFORM out.
WRITE / 'Button FUN 3 was pressed'.
WHEN 'FC4'.
PERFORM out.
WRITE / 'Button FUN 4 was pressed'.
WHEN 'FC5'.
PERFORM out.
WRITE / 'Button FUN 5 was pressed'.
ENDCASE.
sy-lsind = sy-lsind - 1.
FORM
out.
WRITE: 'Secondary List',
/ 'SY-LSIND:', sy-lsind,
/ 'SY-PFKEY:',
sy-pfkey.
ENDFORM.
プログラムを実行すると、プログラムで定義したページヘッダを含む以下の基本一覧が表示されます。
行をダブルクリックして AT LINE-SELECTION イベントをトリガすることができます。ステータス TEST が設定され、機能コード PICK が無効化されます。ステータス TEST には機能コード FC1 から FC5 までが含まれます。これらの機能コードは、アプリケーションツールバーのボタンに割り当てられます。詳細一覧のページヘッダは、ステータスによって異なります。
ここでは、行をダブルクリックしてもイベントがトリガされなくなっています。ただし、ユーザ定義ボタンが 5 つ含まれるアプリケーションツールバーがあります。これらのボタンを使用して、AT USER-COMMAND イベントをトリガすることができます。CASE 命令には各ボタンに対する異なるリアクションが含まれています。
それぞれのインタラクションイベントごとに、SY-LSIND システム項目の値が 1 ずつ減少します ( つまり自動増加が取り消されます) 。すべての詳細一覧のレベルは、基本一覧のレベルと同一になっています ( 上書きされたことになります) 。詳細一覧の作成中は、SY-LSIND の値はまだ 1 のままです。

SET USER-COMMAND の例。
REPORT demo_list_set_user_command NO STANDARD PAGE HEADING.
START-OF-SELECTION.
SET USER-COMMAND 'MYCO'.
WRITE 'Basic List'.
AT
USER-COMMAND.
CASE sy-ucomm.
WHEN 'MYCO'.
WRITE 'Secondary List from USER-COMMAND,'.
WRITE: 'SY-LSIND', sy-lsind.
SET USER-COMMAND 'PF05'.
ENDCASE.
AT
pf05.
WRITE 'Secondary List from PF05,'.
WRITE: 'SY-LSIND', sy-lsind.
SET CURSOR LINE 1.
SET USER-COMMAND 'PICK'.
AT
LINE-SELECTION.
WRITE 'Secondary List from LINE-SELECTION,'.
WRITE: 'SY-LSIND', sy-lsind.
SET USER-COMMAND '%SC'.
このプログラムでは、基本一覧が 1 つと詳細一覧が 3 つ作成されます。プログラムが開始すると、ただちに 3 つ目の詳細一覧が、一覧検索用のダイアログボックスと共に表示されます。このダイアログボックスは、事前定義済の機能コード %SC を設定することで表示されます。ユーザは、他の一覧を照会するために、 前画面 を選択します。
イベント AT PF05 では、一覧行にカーソルを置くために SET CURSOR 命令が使用されます。これにより、機能コード PICK がサポートされます。