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

 

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 

プログラムの実行

ログインするとコメントできます。