ALVを出力する前に、選択画面でユーザにALVの出力レイアウトを指定してもらう場面があります。 このトピックでは、16を元に出力レイアウト選択機能を追加する例を取り上げて説明します。
プログラムの実装
変数の定義を追加
DATA: g_variant TYPE disvariant. DATA: VG_SAVE TYPE CHAR1, VG_EXIT TYPE CHAR1, VG_VARIANT TYPE DISVARIANT, VG_VARIANT_EX TYPE DISVARIANT.
選択パラメータを追加
PARAMETERS: P_LAYOUT TYPE DISVARIANT-VARIANT.
初期化処理を追加
初期化処理で、デフォルトのバリアント値を取得して自動提案します。
INITIALIZATION. VG_SAVE = 'A'. "ユーザ定義レイアウトとグローバルレイアウトの両方を保存できます。 VG_VARIANT-REPORT = SY-REPID. VG_VARIANT_EX = VG_VARIANT.
- バリアントの初期化
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = VG_SAVE
CHANGING
CS_VARIANT = VG_VARIANT_EX
EXCEPTIONS
WRONG_INPUT = 1
NOT_FOUND = 2
PROGRAM_ERROR = 3
OTHERS = 4.
IF SY-SUBRC = 0.
P_LAYOUT = VG_VARIANT_EX-VARIANT.
ENDIF.
検索ヘルプ実装
* AT SELECTION-SCREEN 選択画面:レイアウトのヘルプ設定
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAYOUT .
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = VG_VARIANT
I_SAVE = VG_SAVE
IMPORTING
E_EXIT = VG_EXIT
ES_VARIANT = VG_VARIANT_EX
EXCEPTIONS
NOT_FOUND = 1
PROGRAM_ERROR = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF VG_EXIT = SPACE.
P_LAYOUT = VG_VARIANT_EX-VARIANT.
ELSE.
ENDIF.
ENDIF.
入力チェックを追加
入力チェック処理で、入力されたレイアウトバリアント値が存在するかどうかをチェックします。
AT SELECTION-SCREEN.
IF P_LAYOUT IS NOT INITIAL.
VG_VARIANT-VARIANT = P_LAYOUT.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = VG_SAVE
CHANGING
CS_VARIANT = VG_VARIANT
EXCEPTIONS
WRONG_INPUT = 1
NOT_FOUND = 2
PROGRAM_ERROR = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
レイアウト選択値を反映
汎用モジュールを呼び出してALV一覧出力を行う時、汎用モジュールの入力パラメータとしてレイアウトの選択値を受け渡します。
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_pf_status_set = 'PF_STATUS_SIMP'
it_fieldcat = gtbl_fieldcat i_structure_name = 'YLWF_AL'
is_layout = g_layout
IS_VARIANT = VG_VARIANT
i_save = VG_SAVE
TABLESt_outtab = gtbl_account_doc
EXCEPTIONS
program_error = 0
OTHERS = 0