タイトル通り、本ポストは選択画面定義についてのメモ。
選択画面では単一選択や複数選択の入力フィールドやそれをまとめるブロックを始めとした
要素を実装することができる。
以下に様々な要素を組み合わせたサンプルを示す。(コード、画面イメージ)
★コード
*&----------------------------------------------------------*
*& Report ZTEST_SELECTION_SCREEN
*&----------------------------------------------------------*
REPORT ZTEST_SELECTION_SCREEN.
*作業領域定義
TABLES:
sscrfields,
sflight,
t001,
ekpo.
*メイン選択画面
SELECTION-SCREEN:
BEGIN OF TABBED BLOCK tb1 FOR 20 LINES,
tab (20) param USER-COMMAND param,
tab (20) selop USER-COMMAND selop,
tab (20) scetc USER-COMMAND scetc,
tab (20) popup USER-COMMAND popup,
END OF BLOCK tb1.
*従属画面定義
"0101画面
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE TEXT-T00.
PARAMETERS:
r_flag1 TYPE flag RADIOBUTTON GROUP r1 USER-COMMAND r1,
r_flag2 TYPE flag RADIOBUTTON GROUP r1,
r_flag3 TYPE flag RADIOBUTTON GROUP r1,
r_flag4 TYPE flag RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b11.
SELECTION-SCREEN BEGIN OF BLOCK b12 WITH FRAME TITLE TEXT-T01.
PARAMETERS:
p_carrid TYPE sflight-carrid OBLIGATORY DEFAULT 'AA',
p_seatmx TYPE sflight-seatsmax,
p_bukrs TYPE bukrs VISIBLE LENGTH 10 AS LISTBOX,
p_cb TYPE char01 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b12.
SELECTION-SCREEN END OF SCREEN 101.
"0102画面
SELECTION-SCREEN BEGIN OF SCREEN 102 AS SUBSCREEN.
SELECT-OPTIONS:
s_conid FOR sflight-connid,
s_fldat FOR sflight-fldate NO INTERVALS,
s_price FOR sflight-price,
s_curr FOR sflight-currency NO-EXTENSION,
s_plne FOR sflight-planetype.
SELECTION-SCREEN END OF SCREEN 102.
"0103画面
SELECTION-SCREEN BEGIN OF SCREEN 103 AS SUBSCREEN.
PARAMETERS p_sctst1 TYPE char10.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN COMMENT /1(15) TEXT-T02.
SELECTION-SCREEN COMMENT /10(15) TEXT-T03.
SELECTION-SCREEN SKIP.
PARAMETERS p_sctst2 TYPE char10.
SELECTION-SCREEN END OF SCREEN 103.
"0104画面
SELECTION-SCREEN BEGIN OF SCREEN 104 AS SUBSCREEN.
SELECTION-SCREEN PUSHBUTTON /10(10) btnpu USER-COMMAND btnpu.
SELECTION-SCREEN END OF SCREEN 104.
*ウィンドウ画面定義
SELECTION-SCREEN BEGIN OF SCREEN 201 TITLE TEXT-T04 AS WINDOW.
PARAMETERS:
p_ebeln TYPE ekpo-ebeln,
p_ebelp TYPE ekpo-ebelp,
p_werks TYPE ekpo-werks,
p_matnr TYPE ekpo-matnr.
SELECTION-SCREEN END OF SCREEN 201.
*イベントブロック
INITIALIZATION.
"タブの表示テキスト指定
param = 'Parameters'.
selop = 'SelectOptions'.
scetc = 'etc'.
popup = 'popup'.
btnpu = 'BTN_POPUP'.
"初期表示タブを指定
tb1-prog = sy-repid.
tb1-dynnr = 101.
tb1-activetab = 'param'.
AT SELECTION-SCREEN.
"タブの切り替えを設定
CASE sy-dynnr.
WHEN 1000.
CASE sscrfields-ucomm.
WHEN 'param'.
tb1-dynnr = 101.
WHEN 'selop'.
tb1-dynnr = 102.
WHEN 'scetc'.
tb1-dynnr = 103.
WHEN 'popup'.
tb1-dynnr = 104.
WHEN 'btnpu'.
"画面呼び出し
CALL SELECTION-SCREEN 0201
STARTING AT 30 5
ENDING AT 115 10.
ENDCASE.
ENDCASE.
AT SELECTION-SCREEN OUTPUT.
"ラジオボタンの選択によって、項目の入力の可否を制御
IF r_flag1 = abap_on.
LOOP AT screen.
CASE screen-name.
WHEN 'p_carrid'.
screen-input = 1.
WHEN 'p_seatmx'.
screen-input = 1.
WHEN 'p_bukrs'.
screen-input = 1.
WHEN 'p_cb'.
screen-input = 1.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ELSEIF r_flag2 = abap_on
OR r_flag3 = abap_on
OR r_flag4 = abap_on.
LOOP AT screen.
CASE screen-name.
WHEN 'p_carrid'.
screen-input = 0.
WHEN 'p_seatmx'.
screen-input = 0.
WHEN 'p_bukrs'.
screen-input = 0.
WHEN 'p_cb'.
screen-input = 0.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
★画面イメージ

※1上記、Parametersタブのr_flag1以外のラジオボタンを選択すると「TEXT-T01のテキスト」ブロック内の条件は入力不可になる。
※2上記、Parametersタブのp_bukrsはリストボックス型となる


