!--a11y-->

ユーザ定義選択画面は、実行可能プログラム ( レポート) 、汎用モジュール、およびモジュールプール内で作成できます。ユーザ定義選択画面を呼び出すには、以下の 3 つの方法があります。
選択画面が定義されたどのプログラムからでも、プログラムフローにおける任意のポイントで選択画面を呼び出すことができます。これには、次の構文を使用します。
CALL SELECTION-SCREEN <numb> [STARTING AT
<x1> <y1>]
[ENDING AT <x2>
<y2>].
この文は、選択画面番号 <numb> を呼び出します。呼び出す選択画面は、標準選択画面 ( 画面番号 1000) またはユーザ定義選択画面 ( 任意の画面番号) として、呼出元プログラム内で定義されている必要があります。選択画面を呼び出すには、常に CALL SELECTION-SCREEN を使用する必要があります。CALL SCREEN は使用しないでください。CALL SCREEN を使用すると、システムによって選択画面が処理されません。
STARTING AT および ENDING AT 追加オプションを使用すると、ユーザ定義選択画面をモーダルダイアログボックスとして表示できます。これは、選択画面の定義で AS WINDOW 追加オプションを使用していない場合でも有効です。しかし、AS WINDOW 追加オプションを使用することをお奨めします。それにより、選択画面の処理中に発生する警告およびエラーメッセージも、モーダルダイアログボックスとして表示されるためです ( 以下の例を参照) 。
選択画面からプログラムに戻ると、CALL SELECTION-SCREEN 文は、以下のようにリターンコードSY-SUBRC を設定します。
キ ユーザが選択画面で実行を選択した場合は、SY-SUBRC = 0
キ ユーザが選択画面でキャンセルを選択した場合は、SY-SUBRC = 4
選択画面の処理時には必ず、各種の選択画面イベントがトリガされます。関連するイベントブロックのシステム項目SY-DYNNR には、現在有効になっている選択画面の番号が保持されます。

REPORT SELSCREENDEF.
SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME
TITLE TIT1.
PARAMETERS:
CITYFR LIKE SPFLI-CITYFROM,
CITYTO LIKE SPFLI-CITYTO.
SELECTION-SCREEN END OF BLOCK
SEL1.
SELECTION-SCREEN BEGIN OF SCREEN 500 AS
WINDOW.
SELECTION-SCREEN
INCLUDE BLOCKS SEL1.
SELECTION-SCREEN
BEGIN OF BLOCK SEL2
WITH FRAME TITLE TIT2.
PARAMETERS:
AIRPFR LIKE SPFLI-AIRPFROM,
AIRPTO LIKE SPFLI-AIRPTO.
SELECTION-SCREEN
END OF BLOCK SEL2.
SELECTION-SCREEN END OF SCREEN
500.
INITIALIZATION.
TIT1 =
'Cities'.
AT SELECTION-SCREEN.
CASE
SY-DYNNR.
WHEN
'0500'.
MESSAGE
W159(AT) WITH 'Screen 500'.
WHEN
'1000'.
MESSAGE
W159(AT) WITH 'Screen 1000'.
ENDCASE.
START-OF-SELECTION.
TIT1 =
'Cities for Airports'.
TIT2 =
'Airports'.
CALL
SELECTION-SCREEN 500 STARTING AT 10 10.
TIT1 = 'Cities
again'.
CALL
SELECTION-SCREEN 1000 STARTING AT 10 10.
この実行可能プログラムには、標準選択画面、およびユーザ定義選択画面番号 500 の定義が含まれます。選択画面 500 はモーダルダイアログボックスとして表示されるように定義され、標準選択画面の SEL1 ブロックを保持します。画面のタイトルが定義されているフェーズに注目してください。ここでは例を示す目的で、AT SELECTION-SCREEN イベント内でメッセージクラス AT の警告メッセージを呼び出しています。
プログラムを起動すると、次の一連の画面が表示されます。
1. 標準選択画面。ユーザが実行を選択すると、ステータスバーに警告 SCREEN 1000 が表示されます。
2. ユーザが Enter を押して、警告を確認すると、選択画面 500 がモーダルダイアログボックスとして呼び出されます。ユーザが実行を選択すると、別のダイアログボックスに、警告 SCREEN 500 が表示されます。
3. ユーザがこの警告を確認すると、選択画面が再度呼び出されますが、今回はモーダルダイアログボックスとして表示されます。標準選択画面をモーダルダイアログボックスとして定義することはできないので、ユーザが 実行を選択したときに発行される警告メッセージは、モーダルダイアログボックスとしてではなくステータスバーに表示されます。

この結果、ダイアログボックスには警告メッセージを確認するための Enter 機能がないので、この選択画面を終了させるにはキャンセルを使用するしかありません。
レポートトランザクションのトランザクションコードの作成では、トランザクションコードを作成した実行可能プログラムの任意のユーザ定義選択画面を、第一画面として定義できます。トランザクションコードを使用してプログラムを起動すると、INITIALIZATION および START-OF-SELECTION イベントの間に、標準選択画面ではなくユーザ定義選択画面が呼び出されます。

上記のプログラム例の場合は、トランザクションコード SELSCREEN500 を使用してレポートトランザクションを作成します。
このトランザクションを呼び出すと、実行可能プログラムが直接起動し、選択画面 500 がフル画面で表示されます。ユーザが実行を選択すると、警告がモーダルダイアログボックスとして表示されます。これは、選択画面 500 がもともとモーダルダイアログボックスとして定義されているためです。

以降の画面は、前述の例のポイント 2 以降で説明されているとおりに引き続き表示されます。
ダイアログトランザクションのトランザクションコードによって呼び出された実行可能プログラムおよびモジュールプール内の、任意の選択画面を、第一画面として使用できます。この選択画面は、画面順序における第一画面となります。
選択画面の処理中に、プログラムフローが正しい順序によって次の画面に移動するように注意する必要があります。

次のモジュールプールを例に説明します。
*&----------------------------------------------------*
*& Modulpool
SAPMSSLS
*
*&----------------------------------------------------*
INCLUDE MSSLSTOP.
INCLUDE MSSLSEVT.
MSSLSTOP をインクルードすると、選択画面 500 の以下の定義が組み込まれます。
*&----------------------------------------------------*
*& Include MSSLSTOP
*
*&----------------------------------------------------*
PROGRAM SAPMSSLS.
SELECTION-SCREEN BEGIN OF
SCREEN 500 AS WINDOW.
SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME.
PARAMETERS: CITYFR LIKE SPFLI-CITYFROM,
CITYTO LIKE SPFLI-CITYTO.
SELECTION-SCREEN END OF
BLOCK SEL1.
SELECTION-SCREEN BEGIN OF BLOCK SEL2 WITH FRAME.
PARAMETERS: AIRPFR LIKE SPFLI-AIRPFROM,
AIRPTO LIKE SPFLI-AIRPTO.
SELECTION-SCREEN END OF BLOCK SEL2.
SELECTION-SCREEN END OF
SCREEN 500.
MSSLSEVT をインクルードすると、AT SELECTION-SCREEN イベントが処理されます。
*------------------------------------------------------*
* INCLUDE MSSLSEVT
*
*------------------------------------------------------*
AT SELECTION-SCREEN.
...
LEAVE TO SCREEN 100.
SAPMSSLS プログラムに対してトランザクションコードを作成する場合、第一画面として画面 500 を入力します。

SELSCREEN_DIALOG トランザクションは、プログラムを起動し、選択画面を表示します。
ユーザによる選択画面への入力は、AT SELECTION-SCREEN イベントの発生時、またはアプリケーション論理における以降のポイントで処理できます。AT SELECTION-SCREEN イベント ( 選択画面の PAI) が処理されると、プログラムは次の画面 100 に移ります。