レイアウト選択機能の実装

 

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
   TABLES
      t_outtab           = gtbl_account_doc
    EXCEPTIONS
*      program_error      = 0
     OTHERS             = 0