ALVはデータの一覧表示方法の一つです。ALVを使うと、データの表示や表示機能を簡単に実装できます。
AVL出力の流れ
・構造、ワークエリア、内部テーブル、プログラムID、カタログを定義する。
・SQLでデータベースの値を内部テーブルに格納する。
A. 汎用モジュール”REUSE_ALV_FIELDCATALOG_MERGE“
B. 手入力で項目を指定
XXX = SY-REPID.
・汎用モジュール”REUSE_AVL_GRID_DISPLAY“(必須)
ALV出力に表示される各列の情報を定義する構造のことです。
この記事では、フィールドカタログの設定が手入力になっていますが、汎用モジュールでフィールドカタログを設定することができます。
用語解説
プログラムID
プログラムIDは、現在実行中のABAPプログラムの一意な識別子です。システムフィールドSY-REPID
を使用して取得できます。プログラムIDは、フィールドカタログの生成やALV出力の設定に関連する関数モジュールの呼び出し時に使用されます。プログラムIDを指定することで、関数モジュールは現在実行中のプログラムに関連する情報を取得し、正確なフィールドカタログやALV出力の設定を行うことができます。
プログラムIDは現在実行中のプログラムを識別するためのもの
カタログ
カタログは、ALV出力に表示される各列の情報を定義するための構造体です。具体的には、SLISタイププールで定義されたSLIS_FIELDCAT_ALV
型の内部テーブル(例:lt_fieldcat
)で構成されています。カタログには、列のタイトル、データ型、列幅、表示・非表示、ソート順序などの情報が含まれています。
ALV出力の例①
以下にALV出力の例を挙げています。
この例では、フィールドカタログを手入力で作成する必要があります。
REPORT ZALV_SAMPLE.
TYPE-POOLS: SLIS. " SLISタイププールを使用するための宣言
TYPES: BEGIN OF ty_sflight,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
END OF ty_sflight.
DATA: lt_sflight TYPE STANDARD TABLE OF ty_sflight, " 内部テーブル
wa_sflight TYPE ty_sflight, " ワークエリア
lt_fieldcat TYPE SLIS_T_FIELDCAT_ALV, " フィールドカタログの内部テーブル
wa_fieldcat TYPE SLIS_FIELDCAT_ALV, " フィールドカタログのワークエリア
gd_repid TYPE sy-repid. " プログラムID
* 1. データの取得
SELECT * FROM sflight
INTO TABLE lt_sflight
UP TO 50 ROWS.
* 2. フィールドカタログの作成
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CARRID'.
wa_fieldcat-seltext_l = 'Airline Carrier'.
APPEND wa_fieldcat TO lt_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CONNID'.
wa_fieldcat-seltext_l = 'Connection Number'.
APPEND wa_fieldcat TO lt_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'FLDATE'.
wa_fieldcat-seltext_l = 'Flight Date'.
APPEND wa_fieldcat TO lt_fieldcat.
* 3. プログラムIDの取得
gd_repid = sy-repid.
* 4. ALV出力
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gd_repid
it_fieldcat = lt_fieldcat
TABLES
t_outtab = lt_sflight.
解説①
この例では、以下の手順でALV出力を実現しています。
- データの取得:
sflight
テーブルからデータを選択し、内部テーブルlt_sflight
に格納しています。 - フィールドカタログの作成:各列について、フィールド名(
fieldname
)と列のタイトル(seltext_l
)を設定し、フィールドカタログの内部テーブルlt_fieldcat
に追加しています。 - プログラムIDの取得:
sy-repid
を使用して現在のプログラムIDを取得し、gd_repid
に格納しています。 - ALV出力:
REUSE_ALV_GRID_DISPLAY
関数モジュールを呼び出し、必要なパラメータ(プログラムID、フィールドカタログ、データを含む内部テーブル)を渡してALV出力を表示しています。
ALV出力の例②
この例では、汎用モジュールを使ってフィールドカタログの設定を自動で行います。
REPORT ZALV_SAMPLE_AUTO.
TYPE-POOLS: SLIS. " SLISタイププールを使用するための宣言
TYPES: BEGIN OF ty_sflight,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
END OF ty_sflight.
DATA: lt_sflight TYPE STANDARD TABLE OF ty_sflight, " 内部テーブル
lt_fieldcat TYPE SLIS_T_FIELDCAT_ALV, " フィールドカタログの内部テーブル
gd_repid TYPE sy-repid. " プログラムID
* 1. データの取得
SELECT * FROM sflight
INTO TABLE lt_sflight
UP TO 50 ROWS.
* 2. プログラムIDの取得
gd_repid = sy-repid.
* 3. フィールドカタログの自動生成
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = gd_repid
i_internal_tabname = 'TY_SFLIGHT'
CHANGING
ct_fieldcat = lt_fieldcat.
* 4. ALV出力
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gd_repid
it_fieldcat = lt_fieldcat
TABLES
t_outtab = lt_sflight.
例②の解説
- データの取得:
sflight
テーブルからデータを選択し、内部テーブルlt_sflight
に格納しています。 - プログラムIDの取得:
sy-repid
を使用して現在のプログラムIDを取得し、gd_repid
に格納しています。 - フィールドカタログの自動生成:
REUSE_ALV_FIELDCATALOG_MERGE
関数モジュールを呼び出し、プログラムIDと内部テーブルのタイプ名(TY_SFLIGHT
)を渡すことで、フィールドカタログを自動生成し、lt_fieldcat
に格納しています。 - ALV出力:
REUSE_ALV_GRID_DISPLAY
関数モジュールを呼び出し、必要なパラメータ(プログラムID、フィールドカタログ、データを含む内部テーブル)を渡してALV出力を表示しています。
ボタンを追加する
ALVの基本的な表示に加えて、ボタンを追加することも可能です。
詳しくはこちらの記事で紹介しています。