ALV出力でレイアウト選択機能の実装
0 302

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
  • 0 302
    みんなのツイート (0)

    関連サマリー


    • ALV開発 0 Votes 207 閲覧数


      このトピックでは、ALVの項目カタログを取り上げて説明します。

      概要

      項目カタログは、ALVで出力される各列(項目)のデータ型情報等が定義されます。 項目カタログに格納される定義情報は、以下のように分類することができます。

      項目名
      内部出力テーブルの項目名を指定します。列定義構造体のキー項目になります。データ型情報
      ABAPデータ型や出力長などの情報が定義されます。
      ABAPディクショナリーの項目を参照して定義するとマニュアルで定義するとの2パターンがあります。単位や通貨情報
      数量や金額などの項目は、それぞれ関連する単位や通貨の情報を定義する必要があります。列の書式情報列の出力オプション項目カタログの項目

      項目カタログの項目一覧は下記のリンクをご参考ください。 項目カタログの項目-SAP Help Portal

      項目カタログの生成

      基本的に、ALVを使用して表示する一覧ごとに項目カタログが必要です。項目カタログを生成する方法として、以下の方法があります。

      データディクショナリ構造を使用して自動的に生成ABAPプログラムでマニュアル生成上記の2 つの方法を組み合わせて半自動的に生成外部リンク

      項目カタログ-SAP Help Portal


    • ALV開発 0 Votes 67 閲覧数


      ALV出力時の項目カテゴリ制御は主に以下三つの方法があります。

      自動生成マニュアル生成半自動生成

      このトピックでは、各方法をそれぞれ取り上げて説明します。

      自動生成

      出力テーブルの構造がデータディクショナリに定義されている場合、汎用モジュールを呼び出す際に入力パラメータI_STRUCTURE_NAMEで構造体の名前を指定することにより、項目カテゴリは内部に自動的に生成されることになります。 ここで注意すべきのは、出力テーブルは必ず該当構造体を使って定義しなけれなりません。そうではない場合、なかみが同じでも、実行時ランタイムエラーが発生します。

      16をこのやり方で見直す場合、ABAPディクショナリに該当構造体を定義しておけば、以下のようにソースプログラムがすごくシンプルになります。

      REPORT YLWF_ALV_FC_AUTO. *ALV用のタイププール TYPE-POOLS: slis. TYPES ttbl_account_doc TYPE STANDARD TABLE OF YLWF_FC_AUTO_STRUC. DATA g_account_doc TYPE YLWF_FC_AUTO_STRUC. DATA gtbl_account_doc TYPE ttbl_account_doc. DATA: g_bukrs TYPE bukrs. SELECTION-SCREEN BEGIN OF BLOCK LAYOUT WITH FRAME . SELECT-OPTIONS: S_BUKRS FOR g_bukrs. SELECTION-SCREEN END OF BLOCK LAYOUT. START-OF-SELECTION. SELECT bukrs belnr gjahr buzei pswbt pswsl FROM bseg INTO CORRESPONDING FIELDS OF TABLE gtbl_account_doc UP TO 10 ROWS WHERE bukrs in s_bukrs. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_structure_name = 'YLWF_FC_AUTO_STRUC' i_grid_title = '伝票照会' TABLES t_outtab = gtbl_account_doc EXCEPTIONS OTHERS = 0 . マニュアル生成

      データディクショナリでは、テーブルデータ型LVC_T_FCAT によって項目カタログが定義されています。項目カタログテーブルの各行には、出力テーブルの項目が記述されています。 項目カタログのマニュアル生成は、上記のテーブルを作成して、汎用モジュールを呼び出す際に入力パラメータIT_FIELDCATとして受け渡します。

      実装の詳細は、16をご参照ください。

      半自動生成

      項目カタログの半自動生成は、

      ABAPディクショナリーの構造体から項目カタログを自動生成する自動生成された項目カタログに対してマニュアル修正を加える

      というプロセスになります。

      ABAPディクショナリーの構造体から項目カタログを自動生成するには、汎用モジュールLVC_FIELDCATALOG_MERGEを使用します。


    • ALV開発 0 Votes 239 閲覧数


      このトピックでは、ALVコントロールを利用したALV出力実装の基本方法を取り上げて説明します。

      宣言

      イベントキャッチ

      *---------------------------------------------------------------------* * クラス イベントキャッチ(定義) * CLASS lcl_event_receiver DEFINITION *---------------------------------------------------------------------* CLASS LCL_EVENT_RECEIVER DEFINITION . PUBLIC SECTION. * 選択行のダブルクリックイベント * CATCH THELINE BOUBLECLICK EVENT METHODS CATCH_DOUBLECLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN. * グリッドのツールバー(PDFボタン=オン) * CATCH THE TOOLBAR'S PDF BUTTON METHODS HANDLE_TOOLBAR_PDF FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT. * グリッドのコマンド * CATCH THE GRID COMMAND EVENT METHODS HANDLE_UCOMM FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM . ENDCLASS. "lcl_event_receiver DEFINITION

      ALV出力用コンテナ対象

      DATA VG_GRID TYPE REF TO CL_GUI_ALV_GRID.

      ALVイベントキャッチ

      DATA: EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.コントロールの実例化

      ALV出力用コンテナ対象をインスタンス化する。

      CREATE OBJECT VG_GRID EXPORTING I_PARENT = CL_GUI_CONTAINER=>SCREEN0.カタログの作成ALV出力 CALL METHOD VG_GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING IS_LAYOUT = WL_SLA CHANGING IT_OUTTAB = TG_ALV[] IT_FIELDCATALOG = TG_FIELDCAT[] EXCEPTIONS INVALID_PARAMETER_COMBINATION = 1 PROGRAM_ERROR = 2 TOO_MANY_LINES = 3 OTHERS = 4. CALL METHOD VG_GRID->SET_READY_FOR_INPUT " EXPORTING I_READY_FOR_INPUT = 1.イベント処理の設定

      ALV出力用イベント対象をインスタンス化します。

      CREATE OBJECT EVENT_RECEIVER.

      ALV出力用イベント「ダブルクリック」を実装します。

      SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK FOR VG_GRID.

      「ツールバー」イベントを実装します。

      SET HANDLER EVENT_RECEIVER->HANDLE_TOOLBAR_FAX FOR VG_GRID ALV表示

      ALVを再表示します。

      CALL METHOD VG_GRID->REFRESH_TABLE_DISPLAY EXPORTING 

      IS_STABLE = WL_STABLE.