!--a11y-->

別個のダイアログボックスに表示される入力ヘルプの他に、入出力項目をドロップダウンボックスとして定義することもできます。ドロップダウンボックスには事前に定義された入力値が表示され、ユーザはその中から値を選択することができます。ドロップダウンボックスに値を入力することはできません。ユーザは、一覧内の値のいずれかを使用しなければなりません。ユーザが値を選択すると同時に、PAI イベントがトリガされます。ドロップダウンボックスを項目に使用する場合、同時に入力ヘルプボタンを使用することはできません。
現在、リストボックスタイプのドロップダウンボックスのみがサポートされています。リストボックスは、80 文字以内の 1 つのテキスト列を含む値一覧です。内部的には、各テキスト項目に 40 文字以内のキーがあります。ユーザが行を選択すると、テキスト項目の内容が Dynpro の入力項目に挿入され、キーの内容が Dynpro 項目に挿入されます。入出力項目と Dynpro 項目の内容および長さは、必ずしも同じであるとは限りません。
入出力項目をリストボックスにするには、スクリーンペインタでドロップダウン属性に値 L または LISTBOX を設定する必要があります。表示長属性によって、リストボックスと項目の出力幅が決まります。リストボックス項目には機能コードを割り当てることができます。この場合、ユーザが一覧から値を選択するとすぐに PAI イベントがトリガされ、機能コードが SY-UCOMM および OK_CODE 項目にセットされます。機能コードを割り当てなかった場合は、通常のように、つまり、ユーザが GUI ステータスから押ボタンまたはエレメントを選択すると、PAI イベントがトリガされます。
リストボックスを入出力項目に割り当てている場合、Dynpro エレメントの値一覧属性を使用して、値一覧をコンパイルする方法を指定することができます。以下の 2 つの方法があります。
キ 入力ヘルプからの値一覧 ( 推奨)
値一覧 属性に何も入力しなかった場合、テキスト項目には、Dynpro 項目に割り当てられている入力ヘルプに表示される最初の列が使用されます。入力ヘルプは、ABAP ディクショナリ、Dynpro 、または POV ダイアログモジュールで定義することができます。入力ヘルプは、2 つの列に配置されます。キーは、自動的に書き込まれます。
キ PBO モジュールからの値一覧 ( 非推奨)
値一覧 属性に A を入力した場合は、汎用モジュール VRM_SET_VALUES を使用して (PBO イベントなどで) Dynpro が送信される前に、自分で値一覧に書き込まなければなりません。その際、データ型 VRM_VALUES の内部テーブルを汎用モジュールのインポートパラメータ VALUES に渡す必要があります。VRM_VALUES は、データ型グループ VRM に属します。行データ型は、2 つのテキスト項目 KEY ( 長さ 40) と TEXT ( 長さ 80) から成る構造です。テーブルで、KEY 項目内の可能なユーザエントリを TEXT コンポーネント内のテキストと結合することができます。インポートパラメータ ID で対応する入出力項目を指定します。

入力ヘルプからの値一覧を含むドロップダウンボックス ( 推奨)
*&---------------------------------------------------------------*
*&
レポート
DEMO_DROPDOWN_LIST_BOX
*
*&---------------------------------------------------------------*
REPORT demo_dropdown_list_box.
*&---------------------------------------------------------------*
*&
グローバル宣言
*
*&---------------------------------------------------------------*
* Dynpro インタフェース
TABLES sdyn_conn.
DATA ok_code TYPE sy-ucomm.
* グローバルデータ
TYPES: BEGIN OF type_carrid,
carrid type spfli-carrid,
carrname type
scarr-carrname,
END OF type_carrid.
DATA itab_carrid TYPE STANDARD TABLE
OF type_carrid WITH HEADER LINE.
*&---------------------------------------------------------------*
*&
実行時環境によって呼び出される処理ブロック
*
*&---------------------------------------------------------------*
* イベントブロック START-OF-SELECTION
START-OF-SELECTION.
CALL SCREEN 100.
* ダイアログモジュール PBO
MODULE status_0100 OUTPUT.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE.
* ダイアログモジュール PAI
MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE.
*
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'SELECTED'.
MESSAGE i888(sabapdocu) WITH sdyn_conn-carrid.
ENDCASE.
ENDMODULE.
* ダイアログモジュール POV
MODULE create_dropdown_box INPUT.
SELECT carrid carrname
FROM
scarr
INTO
CORRESPONDING FIELDS OF TABLE itab_carrid.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield =
'CARRID'
value_org
= 'S'
TABLES
value_tab
= itab_carrid
EXCEPTIONS
parameter_error
= 1
no_values_found
= 2
OTHERS =
3.
IF sy-subrc <> 0.
...
ENDIF.
ENDMODULE.
Dynpro 100 の次画面 ( 静的に定義) は 100 です。この Dynpro の唯一の入力項目は、コンポーネント SDYN_CONN_-CARRID です。そのドロップダウン属性は L に設定され、出力長は 20 です。値一覧属性は空で、機能コードSELECTED が割り当てられています。画面上のボタンの機能コードは、EXECUTE および CANCEL です。CANCEL は、機能タイプ E として GUI ステータスで定義されています。
Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE OUTPUT.
MODULE status_0100.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
MODULE user_command_0100.
PROCESS ON VALUE-REQUEST.
FIELD sdyn_conn-carrid MODULE create_dropdown_box.
ユーザは、Dynpro 項目に値を入力することはできません。ユーザが Dynpro 100 で入力項目を選択すると、リストボックスが表示されます。値一覧属性は空なので、入力メカニズムが開始されます。この場合、Dynpro 制御ロジックでイベントブロック PROCESS ON VALUE-REQUEST が生成されます。このイベントブロックによって、他のすべてのメカニズムが制御されます。2 列の内部テーブルが該当するダイアログモジュールに書き込まれ、F4IF_INT_TABLE_VALUE_REQUEST 汎用モジュールを使用して入力ヘルプに渡されます。テーブルの 2 列がリストボックスに挿入されます。
ユーザがリストボックスの行を選択すると、機能コード SELECTED を使用して PAI イベントがトリガされ、内部テーブルの最初の列の値が入力項目にコピーされます。

Dynpro 200 の PBO モジュールからの値一覧を含むドロップダウンボックス ( 非推奨)
REPORT demo_dynpro_dropdown_listbox.
TYPE-POOLS vrm.
DATA:
name TYPE vrm_id,
list TYPE vrm_values,
value LIKE LINE OF list.
DATA: wa_spfli TYPE
spfli,
ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
TABLES demof4help.
name = 'DEMOF4HELP-CONNID'.
CALL SCREEN 100.
MODULE cancel
INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE init_listbox OUTPUT.
CLEAR demof4help-connid.
SELECT connid cityfrom cityto deptime
FROM spfli
INTO CORRESPONDING FIELDS OF wa_spfli
WHERE carrid = demof4help-carrier2.
value-key = wa_spfli-connid.
WRITE wa_spfli-deptime TO value-text USING EDIT MASK '__:__:__'.
CONCATENATE value-text
wa_spfli-cityfrom
wa_spfli-cityto
INTO
value-text SEPARATED BY space.
APPEND value TO list.
ENDSELECT.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id
= name
values
= list.
ENDMODULE.
MODULE
user_command_100.
save_ok = ok_code.
CLEAR ok_code.
IF save_ok = 'CARRIER' AND NOT demof4help-carrier2 IS
INITIAL.
LEAVE TO SCREEN 200.
ELSE.
SET SCREEN 100.
ENDIF.
ENDMODULE.
MODULE
user_command_200.
save_ok = ok_code.
CLEAR ok_code.
IF save_ok = 'SELECTED'.
MESSAGE i888(sabapdocu) WITH text-001 demof4help-carrier2
demof4help-connid.
ENDIF.
ENDMODULE.
Dynpro 100 の次画面 ( 静的に定義) は 200 です。この Dynpro のレイアウトは次のとおりです。

ABAP ディクショナリ構造 DEMOF4HELP のコンポーネント CARRIER2 が、入力項目に割り当てられています。そのドロップダウン属性は L に設定され、出力長は 15 です。値一覧属性は空で、機能コード CARRIER が割り当てられています。押ボタンには、機能タイプ E の機能コード CANCEL が割り当てられています。
Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE OUTPUT.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
MODULE user_command_0100.
Dynpro 200 の次画面 ( 静的に定義) は 100 です。この Dynpro のレイアウトは次のとおりです。

ABAP ディクショナリ構造 DEMOF4HELP のコンポーネント CONNID が、入力項目に割り当てられています。そのドロップダウン属性は L に設定され、出力長は 30 です。値一覧属性は A に設定され、機能コード SELECTED が割り当てられています。押ボタンには、機能タイプ E の機能コード CANCEL が割り当てられています。
Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE OUTPUT.
MODULE init_listbox.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
MODULE user_command_200.
ユーザは、Dynpro 項目に値を入力することはできません。ユーザが Dynpro 100 で入力項目を選択すると、項目DEMOF4HELP-CARRIER2 の入力ヘルプからコンパイルされた値一覧がリストボックスに表示されます。これは検索ヘルプ H_SCARR で、チェックテーブル SCARR に割り当てられています。値一覧には、航空会社の名称が格納されます。ユーザがエントリを選択すると、Dynpro 項目に航空会社コードが書き込まれ、PAI イベントがトリガされます。モジュールUSER_COMMAND_100 によって OK_CODE 項目がチェックされ、Dynpro 200 が呼び出されます。
Dynpro 200 の PBO イベントで、データベーステーブル SPFLI から内部テーブル LIST に値が書き込まれます。KEY 項目にはフライト番号が書き込まれ、その他の関連情報は TEXT 項目に書き込まれます。その後、テーブル LIST が汎用モジュールVRM_SET_VALUES に渡されます。ユーザが Dynpro 200 で入力項目を選択すると、内部テーブルの TEXT 列がリストボックスに表示されます。ユーザがエントリを選択すると、KEY 項目から該当するエントリが Dynpro 項目に書き込まれ、PAI イベントがトリガされます。モジュール USER_COMMAND_200 によって OK_CODE 項目がチェックされ、処理されます。