!--a11y-->

インタラクティブ一覧イベントに割り当てられていないイベントブロックの処理時、およびダイアログモジュールの処理時に、ABAP プログラムは一覧出力を基本一覧に書き込みます。
ABAP システム項目 SY-LSIND には、新たに作成された一覧の索引が含まれます。基本一覧の作成中は、SY-LSIND はゼロです。
デフォルト設定で、基本一覧には標準一覧ステータスおよび標準ページヘッダがあります。TOP-OF-PAGE イベントおよび END-OF-PAGE イベントは、基本一覧の作成中に発生します。これらのイベントのすべての出力は、基本一覧のページヘッダまたはページフッタに置かれます。実行可能プログラムでは、基本一覧は自動的に一覧処理者に送信され、END-OF-SELECTION イベントの最後に表示されます。それ以外の場合、画面上で LEAVE TO LIST-PROCESSING 命令が発生する PAI 処理ブロックの後に表示されます。
ユーザが一覧でアクションを実行するたびに、実行時環境では、機能コードに対応して定義されているイベントブロックがあるかどうかがチェックされます。このイベントブロックが存在する場合、SY-LSIND の値が自動的に 1 増加 し、該当するイベントブロックが実行されます。このブロック中に発生するすべての一覧出力では、データが索引SY-LSIND と共に新規一覧 ( 一覧レベル) に置かれます。新規一覧レベルを作成するためには、基本一覧の GUI ステータスでユーザアクションが許可されなければならず、対応するイベントブロックがプログラムに定義されていなければなりません。
インタラクティブ一覧イベント中に作成された一覧は、すべて詳細一覧です。それぞれのインタラクティブ一覧イベントごとに、新規詳細覧が作成されます。1 つの ABAP プログラムで、1 つの基本一覧と 20 個までの詳細一覧を作成することができます。ユーザが次のレベルで一覧を作成すると ( つまり、SY-LSIND の値が増加すると) 、前の一覧が保存され、新規一覧が表示されます。ユーザは、現在表示されている一覧をインタラクティブに処理することができます。
イベントキーワードの処理ブロック全体を処理した後、あるいは、EXIT または CHECK のために処理ブロックを終了した後、この一覧が表示されます。デフォルト設定で、新規一覧は前一覧を完全に上書きします。ただし、ダイアログボックスでの一覧照会を行うことができます。詳細一覧のイベントブロックに他のダイアログステータスが設定されていない場合、前の一覧レベルのステータスが採用されます。ただし、詳細一覧には標準ページヘッダがありません ( 下記を参照してください) 。
イベントブロックの詳細一覧をプログラミングすることで、重要な結果が生成されます。処理ブロックをネストすることはできません ( 参照: ABAP プログラムの構造) 。したがって、インタラクティブ一覧の処理ブロック内で他のイベントを処理することはできません。
特に、以下の操作ができないことに留意してください。
キ 他のインタラクティブイベントを処理するために別の処理ブロックを使用する。特定のユーザアクションが常にプログラム内の同じ処理ブロックをトリガする。使用する命令が処理されるように、処理ブロック内で制御命令 (IF 、CASE) を使用する必要があります。このために使用可能なシステム項目が多数用意されています。
キ イベント TOP-OF-PAGE を使用して、二次一覧の一覧構造に影響を与える。二次一覧のページヘッダのレイアウトを作成するには、イベント TOP-OF-PAGE DURING LINE-SELECTION を使用する必要があります ( 下記を参照してください) 。ただし、二次一覧でイベントEND-OF-PAGE は処理されません。
キ 二次一覧のデータを検索するために、GET や GET LATE などのイベントを使用しますが、SELECT 命令の使用は必須です。実行可能プログラム ( レポート) に割り当てられた論理データベースは、基本一覧にのみ使用することができます。インタラクティブイベント中に論理データベースを使用するために、SUMIT を使用して別の実行可能プログラムの呼出を行うことができますが、汎用モジュールの使用による論理データベース呼出の方が適しています。
上位レベルの一覧から次に低いレベル (SY-LSIND) に戻るときに、ユーザは詳細一覧の 前画面 を選択することができます。前の一覧の表示がリリースされて、前の一覧レベルに戻ります。リリースされた一覧のコンテンツは削除されます。
イベントブロックからの出力を表示する一覧レベルを指定するために、システム項目 SY-LSIND の値を変更することができます。これは、ABAP システム項目 を決して上書きしてはならない、というルールに対する数少ない例外のひとつです。既存の一覧レベルに対応する索引値だけが許可されます。これにより、指定した索引の値以上の索引を持つ既存の一覧レベルが、すべて削除されます。たとえば、SY-LSIND の値を 0 に設定した場合、すべての二次一覧が削除され、基本一覧が現在の二次一覧を上書きします。
SY-LSIND を変更した場合、該当するイベントの最後にのみこの変更が反映されます。索引 SY-LSIND のある一覧にアクセスする命令を使用する場合 (SCROLL などの INDEX オプションを使用) 、これらの命令の後にSY-LISND の新規値を設定する必要があります。この値は、イベントブロックの最後の命令に置くのが最適です。
一覧での各ユーザアクションの後で、以下のABAP システム項目 が該当するイベントブロックに送信されます。
|
システム項目 |
情報 |
|
SY-LSIND |
現在イベント ( 基本一覧 = 0) 中に登録される一覧の索引 |
|
SY-LISTI |
イベントがトリガされた一覧レベルの索引 |
|
SY-LILLI |
イベントがトリガされた行の絶対値 |
|
SY-LISEL |
イベントがトリガされた行のコンテンツ |
|
SY-CUROW |
イベントがトリガされたウィンドウの行の位置 ( カウントは 1 から開始します ) |
|
SY-CUCOL |
イベントがトリガされたウィンドウの列の位置 ( カウントは 2 から開始します ) |
|
SY-CPAGE |
イベントがトリガされた一覧の最初の表示ページのページ番号 |
|
SY-STARO |
イベントがトリガされた一覧の最初の表示ページの最初の行の番号 ( カウントは 1 から開始します ) この行にはページヘッダが含まれる場合があります。 |
|
SY-STACO |
イベントがトリガされた一覧の最初の表示列の番号 ( カウントは 1 から開始します ) |
|
SY-UCOMM |
イベントをトリガした機能コード |
|
SY-PFKEY |
現在表示されている一覧のステータス |
詳細一覧では、標準ページヘッダは表示されず、イベント TOP-OF-PAGE もトリガされません。詳細一覧のページヘッダを作成するには、以下のような別の TOP-OF-PAGE イベントを使用する必要があります。
TOP-OF-PAGE DURING LINE-SELECTION.
このイベントは、 各 詳細一覧ごとにトリガされます。別の一覧レベルで別のページヘッダを作成する場合、このイベントの処理ブロックをプログラミングする必要があります。たとえば、制御命令 (IF 、CASE) に SY-LSIND や SY-PFKEY などのシステム項目を使用します。
基本一覧の場合と同様に、縦方向にスクロールしても、詳細一覧のページヘッダは表示されたままになります。
ABAP では、メッセージを表示して、ユーザの誤った入力や誤っていると推定される入力に反応することができます。エラーの深刻度によって、プログラム処理がどのように続行するかが決定されます。
一覧処理では、個々のメッセージタイプのメッセージ処理は以下のとおりです。
キ A (= 異常終了): 強制終了
ダイアログボックスにメッセージが表示されます。ユーザが ENTER を使用してメッセージを確認すると、トランザクション全体 (SA38 など) が終了します。
キ E (= エラー) または W (= 警告):
メッセージがステータスバーに表示されます。ユーザが ENTER を押してエラーを確認すると、現在のイベントブロックが強制終了し、前の一覧レベルが引き続き表示されます。基本一覧の作成中にエラーまたは警告メッセージを使用すると、プログラム全体が強制終了します。
キ I (= 情報):
ダイアログボックスにメッセージが表示されます。ユーザがメッセージを確認する (ENTER) と、MESSAGE 命令の後でプログラム処理が続行します。
キ S (= ステータス)
メッセージが現在の一覧のステータスバーに表示されます。
キ X (= 終了) 実行時エラー
このメッセージタイプは、実行時エラーをトリガし、ショートダンプを生成します。
標準レポートは、個別一覧を生成するプログラムです。この一覧には、必要なすべての詳細情報が含まれていなければなりません。この手順では、ユーザが該当するデータを取り出す必要のある広範な一覧が生成される可能性があります。バックグラウンド処理では、これが唯一使用可能な方法です。バックグラウンドジョブを開始した後では、プログラムに影響を与えることができません。必要な選択はジョブの開始前に行う必要があり、一覧には詳細情報が含まれていなければなりません。
ダイアログセッションでは、このような制限はありません。プログラムの実行中にユーザが存在し、プログラムフローを直接制御して操作することができます。オンライン環境の利点をすべて利用するために、標準レポートがインタラクティブレポートに導入されました。
インタラクティブレポートでは、ユーザはアクティブに検索を実行し、セッション中にデータを表示することができます。広範囲な詳細一覧を 1 つ使用する代わりに、インタラクティブレポートを使用して要約形式の基本一覧を作成すれば、ユーザはカーソルを置いてコマンドを入力することで、この一覧から詳細情報を呼び出すことができます。このように、インタラクティブレポートを使用すれば、情報検索で、実際に必要なデータだけを取り出すことができます。詳細情報は、詳細一覧に表示されます。
インタラクティブレポートでは、詳細一覧を作成するだけではなく、一覧からトランザクションや他の実行可能プログラム ( レポート) を呼び出すこともできます。これらのプログラムでは、一覧に入力値として表示される値が採用されます。たとえば、ユーザは一覧からトランザクションを呼び出して、一覧に表示されたデータを含むデータベーステーブルを変更することができます。

詳細一覧の作成
REPORT demo_list_interactive_1.
START-OF-SELECTION.
WRITE: 'Basic List, SY-LSIND =', sy-lsind.
AT
LINE-SELECTION.
WRITE: 'Secondary List, SY-LSIND =', sy-lsind.
プログラムを実行すると、基本一覧が表示されます。GUI ステータス によって、自動的に機能選択 (F2) の使用が許可されます。一覧行を選択すると、AT LINE-SELECTION イベントがトリガされ、最初の詳細一覧が基本一覧を上書きします。この一覧には標準ページヘッダがありません。この一覧は、基本一覧の GUI ステータスを継承します。ユーザは、 選択 を選択して、このような一覧を 19 まで作成することができるようになりました。19 より多い数の一覧を作成しようとすると、実行時エラーが発生します。ユーザは前画面 を使用して前の一覧に戻ることができます。

詳細一覧のナビゲーション
REPORT demo_list_interactive_2.
START-OF-SELECTION.
WRITE: 'Basic List, SY-LSIND =', sy-lsind.
AT
LINE-SELECTION.
IF sy-lsind = 3.
sy-lsind = 0.
ENDIF.
WRITE: 'Secondary List, SY-LSIND =', sy-lsind.
プログラムを実行すると、基本一覧が表示されます。
Basic List, SY-LSIND = 0
GUI ステータス によって、自動的に機能選択 (F2) の使用が許可されます。ユーザがカーソルを一覧の行に置いて 選択 を選択すると、AT LINE-SELECTION イベントがトリガされ、以下の行を含む詳細一覧が表示されます。
Secondary List, SY-LSIND = 1
再度 選択 を選択すると、以下の内容が生成されます。
Secondary List, SY-LSIND = 2
前画面 を使用すると、前の一覧レベルに戻ります。 3 度目に 選択 を選択すると、以下の行を含む詳細一覧が生成されます (IF 条件があるためです) 。
Secondary List, SY-LSIND = 0
一覧レベル 1 と 2 が削除されます。前画面を選択すると、一覧処理の開始点に戻ります。 選択 を選択すると、索引 1 のある詳細一覧が作成されます。ただし、レベル 0 の一覧は基本一覧 ( ページヘッダがない) ではなくなり、詳細一覧となります。

詳細一覧のページヘッダ
REPORT demo_list_interactive_3.
START-OF-SELECTION.
WRITE 'Basic List'.
AT
LINE-SELECTION.
WRITE 'Secondary List'.
TOP-OF-PAGE DURING
LINE-SELECTION.
CASE sy-lsind.
WHEN 1.
WRITE 'First Secondary
List'.
WHEN 2.
WRITE 'Second Secondary
List'.
WHEN OTHERS.
WRITE: 'Secondary List, Level:', sy-lsind.
ENDCASE.
ULINE.
プログラムを実行すると、基本一覧が表示されます。ユーザは 選択 を選択して詳細一覧を作成することができます。 詳細一覧には、SY-LSIND の値に応じて設定されるページヘッダがあります。

詳細一覧のメッセージ
REPORT demo_list_interactive_4 NO STANDARD PAGE HEADING.
AT
LINE-SELECTION.
WRITE 'Basic List'.
MESSAGE s888(sabapdocu) WITH text-001.
AT
LINE-SELECTION.
IF sy-lsind = 1.
MESSAGE i888(sabapdocu) WITH text-002.
ENDIF.
IF sy-lsind = 2.
MESSAGE e888(sabapdocu) WITH text-003 sy-lsind
text-004.
ENDIF.
WRITE: 'Secondary List, SY-LSIND:', sy-lsind.
プログラムを実行すると、基本一覧が表示され、成功メッセージ 100 がステータス行に表示されます。一度クリックすると、AT-LINE-SELECTION イベントがトリガされます。最初の詳細一覧の作成時には、情報メッセージ 100 を含むダイアログボックスが表示されます。メッセージ 200 のメッセージタイプは E であるため、2 番目の詳細一覧を作成することはできません。