概要
表示された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には選択された列名が入ってるので選択列によって処理を変えたい場合はチェックしよう。