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

概要

表示されたALVをダブルクリックした時に別画面へ遷移する方法を説明しよう。
下記サンプルのように標準トランザクションへ遷移したり、別のALVを表示したりする事が可能である。

サンプルコード

ABAP
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名を指定しよう。
この例では、ALVをダブルクリックした時にFORM:USER_COMMANDが実行される。引き数のucommをチェックし’&IC1′(ダブルクリック)の時だけ
処理が実行されるようにしよう。シングルクリックではFORM:USER_COMMANDが実行されなかったが念の為確認しておく事をお勧めする。
次にselfield-tabindexには選択した行番号が入っているので、その値を使用してALVに渡した内部テーブルから値を取得しよう。
ソートやフィルタされている場合でも、INDEXをチェックするだけで問題はない。
selfield-fieldnameには選択された列名が入ってるので選択列によって処理を変えたい場合はチェックしよう。

原文地址:https://www.cnblogs.com/yjyongil/p/10605237.html