!--a11y-->

スクリーンペインタで画面を従属画面として定義するのと同様に、次のように ABAP プログラムで選択画面を従属画面として登録することができます。
SELECTION-SCREEN
BEGIN OF SCREEN <scrn> AS SUBSCREEN
[NO
INTERVALS]
[NESTING
LEVEL <n>].
...
SELECTION-SCREEN END OF SCREEN <scrn>.
この方法で定義できる選択画面は次のとおりです。
キ 画面上の従属画面
キ 画面上のタブストリップコントロール
これらの選択画面を CALL SELECTION-SCREEN で呼び出すことはできません。
NO INTERVALS オプションを指定すると、従属画面が小さくなり、すべての選択基準がそれぞれの入力項目とともに表示されます。
NESTING LEVEL オプションも従属画面のサイズを縮小します。NESTING LEVEL を指定すると、選択画面のタブストリップコントロールで従属画面を使用し、そのタブストリップにすでにフレームがある場合に、スクロールバーを非表示にすることができます。タブストリップコントロールの周りにフレームがない場合は、NESTING LEVEL 0 と指定します。タブストリップコントロールの周りのフレームが増えるごとに、NESTING LEVEL を 1 ずつ増やしてください。
選択画面を画面上の従属画面として表示したり、画面上のタブストリップコントロール内に表示すると、CALL SUBSCREEN 命令が Dynpro 制御ロジックの PBO イベントと PAI イベントの両方で実行されるので注意してください。従属画面として表示する選択画面に対して PAI モジュールをプログラムすることはできませんが、CALL SUBSCREEN 命令によって、入力データを ABAP プログラムの PAI イベントに確実に渡すことができます。
一般の選択画面と同様に、通常のユーザアクションによって通常の選択画面処理がトリガされます。これにより、ユーザの入力をチェックしたり、機能コードを処理したりすることができます。

画面上の従属画面として選択画面を使用
REPORT demo_sel_screen_as_subscreen.
SELECTION-SCREEN BEGIN OF
SCREEN 1100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF
BLOCK b1 WITH FRAME TITLE text-010.
PARAMETERS: p1(10) TYPE c,
p2(10)
TYPE c,
p3(10)
TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF
SCREEN 1100.
SELECTION-SCREEN BEGIN OF
SCREEN 1200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF
BLOCK b2 WITH FRAME TITLE text-020.
PARAMETERS: q1(10) TYPE c OBLIGATORY,
q2(10)
TYPE c OBLIGATORY,
q3(10)
TYPE c OBLIGATORY.
SELECTION-SCREEN END OF
BLOCK b2.
SELECTION-SCREEN END OF
SCREEN 1200.
DATA: ok_code TYPE
sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: number(4) TYPE n VALUE '1100'.
START-OF-SELECTION.
CALL SCREEN 100.
MODULE status_0100
OUTPUT.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE.
MODULE cancel
INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE user_command_0100
INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BUTTON1'.
number = 1100.
WHEN 'BUTTON2'.
number = 1200.
ENDCASE.
ENDMODULE.
AT
SELECTION-SCREEN.
MESSAGE s888(sabapdocu) WITH text-030 sy-dynnr.
この例では、2 つの選択画面 1100 と1200 を従属画面として定義しています。
次の画面 ( 静的に定義) は画面 100 自体です。次のようにレイアウトされています。

この画面は、従属画面領域 AREA と 2 つの押ボタンで構成されています。押ボタンの機能コードはそれぞれ BUTTON1 、BUTTON2 です。
画面 100 の Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE
OUTPUT.
MODULE status_0100.
CALL SUBSCREEN area INCLUDING sy-repid number.
PROCESS AFTER
INPUT.
MODULE cancel AT EXIT-COMMAND.
CALL SUBSCREEN area.
MODULE user_command_0100.
このプログラムを実行すると画面が表示され、その上に選択画面 1100 が従属画面として表示されています。従属画面領域にはどちらの選択画面も表示でき、その切り替えには押ボタンを使います。選択画面 1200 から 1100 に切り替える前に、必須項目にデータを入力する必要があります。入力したデータは、PAI イベントでプログラムのパラメータに渡されます。

画面上のタブストリップコントロール内の従属画面として選択画面を使用
REPORT demo_sel_screen_in_tabstrip.
SELECTION-SCREEN BEGIN OF
SCREEN 1100 AS SUBSCREEN
NO
INTERVALS.
SELECTION-SCREEN BEGIN OF
BLOCK b1 WITH FRAME TITLE text-010.
PARAMETERS: p1(10) TYPE c,
p2(10)
TYPE c,
p3(10)
TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF
SCREEN 1100.
SELECTION-SCREEN BEGIN OF
SCREEN 1200 AS SUBSCREEN
NO
INTERVALS.
SELECTION-SCREEN BEGIN OF
BLOCK b2 WITH FRAME TITLE text-020.
PARAMETERS: q1(10) TYPE c OBLIGATORY,
q2(10)
TYPE c OBLIGATORY,
q3(10)
TYPE c OBLIGATORY.
SELECTION-SCREEN END OF
BLOCK b2.
SELECTION-SCREEN END OF
SCREEN 1200.
CONTROLS mytabstrip TYPE TABSTRIP.
DATA: ok_code TYPE
sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: number(4) TYPE n VALUE '1100'.
START-OF-SELECTION.
mytabstrip-activetab = 'BUTTON1'.
CALL SCREEN 100.
MODULE status_0100
OUTPUT.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE.
MODULE cancel
INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE user_command_0100
INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BUTTON1'.
mytabstrip-activetab = save_ok.
number = 1100.
WHEN 'BUTTON2'.
mytabstrip-activetab = save_ok.
number = 1200.
ENDCASE.
ENDMODULE.
AT
SELECTION-SCREEN.
MESSAGE s888(sabapdocu) WITH text-030 sy-dynnr.
この例では、2 つの選択画面 1100 と1200 を従属画面として定義しています。
次の画面 ( 静的に定義) は画面 100 自体です。次のようにレイアウトされています。
この画面は、3 つのタブタイトル BUTTON1 、BUTTON2 、BUTTON3 を持つMYTABSTRIP という名前のタブストリップ領域 1 つからなります。それぞれの機能コードも同じ名前で、特殊機能タイプはありません。すべてのタブタイトルが 1 つの従属画面領域 AREA に割り当てられています。
画面 100 の Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE
OUTPUT.
MODULE status_0100.
CALL SUBSCREEN area INCLUDING sy-repid number.
PROCESS AFTER
INPUT.
MODULE cancel AT EXIT-COMMAND.
CALL SUBSCREEN area.
MODULE user_command_0100.
この例は、前の例とほぼ同じようにプログラミングされており、同様に動作します。唯一の違いは、押ボタンがタブタイトルに置き換えられた点と、MYTABSTRIP コントロールが宣言された点です。タブページ間の切り替えが ABAP プログラム内にプログラミングされています。ユーザがタブタイトルを選択するたびに、OK_CODE 項目の機能コードが MYTABSTRIP 構造の ACTIVETAB 要素に割り当てられます。同時に、タブストリップコントロールの従属画面領域 AREA に表示される従属画面の画面番号が変数 NUMBER に代入されます。