タイトルを「REUSE_ALV_GRID_DISPLAY編」としたのは、他のALV出力する汎用モジュールやクラスでは別のやり方になるからです。別の部品でのやり方についてもいずれ紹介したいと思っています。
ソースコードは下記投稿の続きです。
【ABAP】ALV – ユーザコマンドの実装(サンプルあり)
標準ボタンの削除
汎用モジュールへのパラメータ受け渡しだけで対応できます。
DATA: it_extab TYPE slis_t_extab.
APPEND '&GRAPH' TO it_extab</span>.
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'
it_excluding = it_extab
TABLES
t_outtab = it_main
EXCEPTIONS
program_error = 1
OTHERS = 2.
元の画面からグラフボタンを削除してみました。
EXPORTINGパラメータの「IT_EXCLUDING」に削除したいボタンの機能コードを渡すだけです。
機能コードの確認は、メニュー⇒システム⇒ステータスからGUI STATUSを見てください。
左側の画面で赤く囲ったボタンが右側の画面にはありません。
独自ボタンの追加
削除とは異なり、ボタンの追加は少し面倒ですが見ていきましょう。
独自のGUIステータスを作成
まずは、プログラム内にGUI STATUSを作成します。
このとき作成するGUIステータスの機能コードは、標準で用意されているテンプレートを使用してください。
メニュー⇒補足⇒テンプレート調整を選択
アプリケーションツールバーにテンプレートで用意された機能コードや区切り線が表示されるす。不要なボタンや区切り線を削除したり独自ボタンを追加することができます。
ボタンと区切り線を合わせて35個まで定義できます。
左から3つ目に登録ボタンを追加してみました。
汎用モジュールパラメータにGUIステータスを渡す
GUIステータスの表示なので、SET PF-STATUSを使いたくなるところですが、それだけでは認識されません。
サンプルコードの青字が追加部分、赤字は既存コードで今回の肝になる部分です。
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fcat
is_layout = wa_layout
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_GUI_STATUS'
i_callback_user_command = 'USER_COMMAND'
it_excluding = it_extab
TABLES
t_outtab = it_main
EXCEPTIONS
program_error = 1
OTHERS = 2.
FORM set_gui_status USING it_extab TYPE kkblo_t_extab.
SET PF-STATUS 'S001'.
ENDFORM.
「I_CALLBACK_PF_STATUS_SET」パラメータに、GUIステータス表示用のサブルーチン名を渡し、そのサブルーチン内でSET PF-STATUSを実行します。
実行すると追加ボタンが表示されたことが確認できます。
まとめ
ALVツールバーへのボタン追加は開発現場でよく出てきます。
独自ボタン押下時の処理は下記を参照してください。