ABAPで一覧画面を実装する際に利用する「ALV」の利用方法について解説します。
ALVとは、「SAp List Viewer」の略でSAPが用意してくれている一覧表示ツール(汎用モジュール or クラス)です。このページでは以下の内容について整理しています。
ABAPerであれば確実に知っておきたい内容ばかりなので是非最後までご覧ください。ALVをマスターすれば、コーディングできる機能の幅・種類もぐっと広がります!
ALVとは?
ALVとはデータを一覧表示する仕組みです。例えば、SE16N(一般テーブル照会)を実行すると下記のような画面が表示されますが、これがALVです。
通常のプログラムは大まかに「①選択画面の実行 ⇒ ②データ抽出 ⇒ ③データ/結果表示」というような構成で成り立っていますが、ALVは最後の「③データ/結果表示」のタイミングで頻繁に利用されます。
ALVは、WRITE命令で作成する一覧とは異なり、デザインやレイアウトを容易に変更することができたり、押しボタンやリンクなどの多種多様な機能を兼ね備えた一覧を作成することが可能。ALVの出力自体も特定の汎用モジュールやクラス(メソッド)を利用するだけなので、覚えれば簡単に使える便利な機能です。
ALVの実装方法
早速、ALV出力を行うコーディング方法を解説します。ざっくり説明すると、ALV出力には大きく3つのステップが存在します。
まずは、①ALV出力用のデータ取得。その後、②フィールドカタログを定義し、③ALVを出力します。
それぞれのステップを順を追って解説していきます。
尚、本ページではALVの基本理解を深めることを目的として、汎用モジュールを用いたALV出力方法を解説します。
1.出力データの取得
ALVは内部テーブルの値を後述するレイアウト定義に応じて表示する仕組みです。
前段として、ALVで表示させたいデータを取得し指定の内部テーブルに格納します。
SELECT BKPF~BUKRS BKPF~BELNR BKPF~GJAHR BKPF~BLART FROM BKPF INTO TABLE GDT_BKPF.
SELECT命令はFROM句に指定したデータベーステーブルからレコードを読み込み、INTO句に記述した内部テーブル or 構造に取得したレコードを格納する命令です。
2.フィールドカタログの取得
フィールドカタログとは、ALV出力を行うために必要な各項目(列)の定義情報です。左から何番目の列か?カラム名は何か?など基本的な情報を保持しているのがフィールドカタログです。
フィールドカタログはそれ専用のデータ構造でなければならず、この構造を無視するとプログラムはショートダンプしてしまいます。
TYPE-POOLS:SLIS. DATA: LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, " フィールドカタログ LW_FIELDCAT TYPE SLIS_FIELDCAT_ALV. " フィールドカタログ設定用構造 * フィールドカタログの設定 CLEAR LW_FIELDCAT. LW_FIELDCAT-COL_POS = 1. LW_FIELDCAT-FIELDNAME = '(項目名)'. LW_FIELDCAT-REF_TABNAME = '(内部テーブル)'. LW_FIELDCAT-SELTEXT_M = '(表示名)'. APPEND LW_FIELDCAT TO LT_FIELDCAT. CLEAR LW_FIELDCAT. LW_FIELDCAT-COL_POS = 2. LW_FIELDCAT-FIELDNAME = '(項目名)'. LW_FIELDCAT-REF_TABNAME = '(内部テーブル)'. LW_FIELDCAT-SELTEXT_M = '(表示名)'. APPEND LW_FIELDCAT TO LT_FIELDCAT.
このサンプルコードでは、2列の内部テーブルを表示するためのフィールドカタログを定義しています。ただし、これはあくまでも一例にすぎず、実際にはさらに様々な項目情報を保持することができます。(大文字の列なのか?小文字の列なのか?合計値を表示させるのか?等)
3.ALVの表示
①出力するレコードと②フィールドカタログの用意ができたら、この2つをINPUTにしてALVを出力します。
ここでは、ALV出力専用の汎用モジュールを利用します。
REUSE_ALV_GRID_DISPLAY
* ALV出力 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IT_FIELDCAT = LT_FIELDCAT I_SAVE = 'X' TABLES T_OUTTAB = (内部テーブル) EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE I001(VL) WITH 'ALV出力に失敗'. ENDIF.
当該汎用モジュールも様々なパラメータが用意されていますが、最低限のパラメータをインプットしてあげるだけでALV出力が完了します。
これが、ALVの基本です。実は表示したいデータと、フィールドカタログ(一覧の定義情報)だけ用意してあげるだけの簡単な仕組みです。
ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!