ALV出力の基本

ALVはデータの一覧表示方法の一つです。ALVを使うと、データの表示や表示機能を簡単に実装できます。

目次

AVL出力の流れ

STEP
データの取得

・構造、ワークエリア、内部テーブル、プログラムID、カタログを定義する。

・SQLでデータベースの値を内部テーブルに格納する。

STEP
フィールドカタログの設定

A. 汎用モジュール”REUSE_ALV_FIELDCATALOG_MERGE

B.  手入力で項目を指定

STEP
プログラムIDを渡す

XXX = SY-REPID.

STEP
ALV出力

・汎用モジュール”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出力を実現しています。

  1. データの取得:sflightテーブルからデータを選択し、内部テーブルlt_sflightに格納しています。
  2. フィールドカタログの作成:各列について、フィールド名(fieldname)と列のタイトル(seltext_l)を設定し、フィールドカタログの内部テーブルlt_fieldcatに追加しています。
  3. プログラムIDの取得:sy-repidを使用して現在のプログラムIDを取得し、gd_repidに格納しています。
  4. 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.

例②の解説

  1. データの取得:sflightテーブルからデータを選択し、内部テーブルlt_sflightに格納しています。
  2. プログラムIDの取得:sy-repidを使用して現在のプログラムIDを取得し、gd_repidに格納しています。
  3. フィールドカタログの自動生成:REUSE_ALV_FIELDCATALOG_MERGE関数モジュールを呼び出し、プログラムIDと内部テーブルのタイプ名(TY_SFLIGHT)を渡すことで、フィールドカタログを自動生成し、lt_fieldcatに格納しています。
  4. ALV出力:REUSE_ALV_GRID_DISPLAY関数モジュールを呼び出し、必要なパラメータ(プログラムID、フィールドカタログ、データを含む内部テーブル)を渡してALV出力を表示しています。

ボタンを追加する

ALVの基本的な表示に加えて、ボタンを追加することも可能です。

詳しくはこちらの記事で紹介しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次