ALVを出力する前に、選択画面でユーザにALVの出力レイアウトを指定してもらう場面があります。
このトピックでは、購買組織を元に出力レイアウト選択機能を追加する例を取り上げて説明します。
プログラムの実装
変数の定義を追加
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 TABLES t_outtab = gtbl_account_doc EXCEPTIONS * program_error = 0 OTHERS = 0
本文はhttp://sapecc.insidekb.jp/doku.php/96/36/46/38