ABAP ALVのイベントを取得する方法

  アドオンプログラム

概要

表示されたALVをダブルクリックしたときに別の画面に切り替わる方法を説明します。

以下のサンプルのように、標準トランザクションに移行したり、別のALVを表示したりすることができます。
今回は一部抜粋を記載していますので、ALVの作成を確認したい方はこちらをご覧ください。

サンプルコード

FORM call_alv.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = sy-repid
      i_callback_user_command = 'USER_COMMAND'
      it_fieldcat             = it_fieldcat
    TABLES
      t_outtab                = it_data
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.

ENDFORM.


FORM user_command USING ucomm    LIKE sy-ucomm
                        selfield TYPE slis_selfield.

  CASE ucomm.
*   Double Click
    WHEN '&IC1'.

      READ TABLE it_data INTO wa_data
      INDEX selfield-tabindex.

      IF selfield-fieldname = 'BANFN'.
        SET PARAMETER ID 'BAN' FIELD wa_data-banfn.
        CALL TRANSACTION 'ME53N' AND SKIP FIRST SCREEN.

      ELSEIF selfield-fieldname = 'EBELN'.
          SET PARAMETER ID 'BES' FIELD wa_data-ebeln.
          CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
        ENDIF.

      ENDIF.
  ENDCASE.

ENDFORM.

説明

汎用モジュール:REUSE_ALV_GRID_DISPLAYを使用する場合は、i_callback_programおよびi_callback_user_commandを設定しましょう。

一般的なALVレポートの場合は、i_callback_programに独自のプログラム名を指定し、i_callback_user_commandに実行するFORM名を指定します。
この例では、FORM:USER_COMMANDは、ALVがダブルクリックされたときに実行されます。 ucomm引数をチェックし、「&IC1」の場合のみ(ダブルクリック)プロセスを実行します。
 
フォーム:USER_COMMANDはシングルクリックでは実行されませんでしたが、念のためチェックすることをお勧めします。
次に、selfield-tabindexには選択された行番号が含まれるため、その値を使用して、ALVに渡した内部テーブルから値を取得します。
※ソートやフィルタリングを行っても、INDEXをチェックするだけで問題ありません。
選択した列名はselfield-fieldnameに入力されますので、選択した列に応じて処理を変更したい場合はチェックしてください。
ALVの基本的な作成方法については、こちらをご覧ください
ALVヘッダーテキストを変更するには、こちらを参照してください