ALVレポートの開発でよく使うのがユーザコマンドの実装です。
セルをダブルクリックした場合の処理やボタン押下時の処理などがあります。
今回はセルのダブルクリックを例に説明します。
実装方法(サンプルコード)
追加箇所を青字、さらに肝になる箇所を赤字で記載しました。
REPORT ytest0008.
TYPES:
BEGIN OF t_main.
INCLUDE TYPE ytest0008.
TYPES:
box TYPE checkbox,
END OF t_main.
DATA: it_main TYPE TABLE OF t_main.
DATA: it_fcat TYPE slis_t_fieldcat_alv.
DATA: wa_layout TYPE slis_layout_alv.
START-OF-SELECTION.
SELECT * FROM but000 INTO CORRESPONDING FIELDS OF TABLE it_main.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_structure_name = 'YTEST0008'
i_bypassing_buffer = abap_on
CHANGING
ct_fieldcat = it_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
wa_layout-box_fieldname = 'BOX'.
wa_layout-colwidth_optimize = abap_on.
wa_layout-zebra = abap_on.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fcat
is_layout = wa_layout
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
TABLES
t_outtab = it_main
EXCEPTIONS
program_error = 1
OTHERS = 2.
FORM user_command USING i_ucomm TYPE sy-ucomm
i_selfield TYPE slis_selfield.
CASE i_ucomm.
WHEN '&IC1'. ダブルクリック
READ TABLE it_main INTO DATA(lw_main) INDEX i_selfield-tabindex.
<span class="bold-blue">IF sy-subrc <> 0.
MESSAGE 'データ行を選択してください' TYPE 'S'.
RETURN.
ENDIF.
ASSIGN COMPONENT i_selfield-fieldname OF STRUCTURE lw_main
TO FIELD-SYMBOL(<fs_fnam>).
CASE i_selfield-fieldname.
WHEN 'PARTNER'.
SET PARAMETER ID 'BPA' FIELD <fs_fnam>.
CALL TRANSACTION 'BP'.
WHEN 'CRUSR'.
SET PARAMETER ID 'XUS' FIELD <fs_fnam>.
CALL TRANSACTION 'SU01'.
WHEN OTHERS.
MESSAGE '画面遷移できません' TYPE 'S'.
RETURN.
ENDCASE.
ENDCASE.
ENDFORM.
①汎用モジュールのパラメータ追加
「I_CALLBACK_PROGRAM」には呼出元のプログラムIDが必要なため、システム変数で自分自身のプログラムIDを指定しています。
「I_CALLBACK_USER_COMMAND」にはユーザコマンドを実装するサブルーチン名を指定します。
②ユーザコマンド実装用のサブルーチン追加
USINGパラメータは2つ決まったものがあります。1つ目は機能コード、2つ目は選択行や選択項目IDなどの情報を取得できます。
今回のサンプルコードでは、パートナを選択したらBPマスタへ、登録者を選択したらユーザマスタへ遷移する仕組みにしてみました。
3行目のパートナをダブルクリックすると、そのBPマスタの画面が表示されます。
1行目の登録者をダブルクリックすると、そのユーザマスタの画面が表示されます。
まとめ
今回のポイントは、「I_CALLBACK_USER_COMMAND」パラメータにサブルーチン名を指定する点です。こういうのは独学で辿り着くには時間がかかるので是非参考にしてもらって実装時間の短縮につながると幸いです。