特定の画面項目でF4ヘルプを要求した際にカスタマイズされた検索ヘルプを表示する方法(ON VALUE-REQUEST)を解説します。
検索ヘルプ(F4ヘルプ)とは、選択画面の各項目に値を入力する際に、値入力をアシストしてくれる機能のこと。


通常、検索ヘルプはディクショナリオブジェクトに割り当てることによって付与するのが一般的ですが、ここではプログラム中で検索ヘルプを付与する方法を解説します。
検索ヘルプの利用方法・登録方法は以下の記事をご参照ください。
SAPエンジニアやABAPerを目指す方であれば知っておきたい重要知識です。是非最後までご覧ください。
前提:イベントブロックとは?

検索ヘルプを付与する方法を正確に理解するためには、イベントブロックについての理解が必須のため、ここではイベントブロックについて簡単におさらいしておきます。
前提 イベントブロックとは、一言で言うとイベントを定義した1つの塊です。

ユーザによるキーボードの操作、マウスのクリックなどによって、システムに何らかの変更が加えられシステムの状態が変化する出来事のことです。
例えば・・・
「”Enter”ボタンを押す」
「"戻るボタン" をマウスでクリックする」
「"選択画面" が表示される」

上記のようなシステムに対する何らかのアクション・何らかのリクエストをABAPではイベントと総称します。
今回解説する「AT SELECTION-SCREEN ON VALUE-REQUEST」は「ユーザが〇〇項目の検索ヘルプを利用したとき」というイベントを示します。
そのイベントが実行された場合に動くポップアップ画面等を用意しておくイメージです。このページでは、検索ヘルプイベントの定義方法の解説がメインとなりますので、イベントブロックについて1から学習したいという方は以下の記事をご覧ください。
AT SELECTION-SCREEN ON VALUE-REQUEST
検索ヘルプを付与するには、「〇〇項目の検索ヘルプが呼び出されたとき」というイベントを作成します。構文ルールは以下の通り。
AT SELECTION-SCREEN ON VALUE-REQUEST FOR <input_field>.

実際のサンプルコードがこちら。
* アップロードファイルの画面項目 SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (10) TEXT-S01 FOR FIELD P_FLNM. PARAMETERS P_FLNM TYPE STRING. SELECTION-SCREEN END OF LINE. * 検索ヘルプの付与 AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FLNM. " 検索ヘルプが呼び出されたときの処理↓ CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG CHANGING FILENAME = LV_FILENAME PATH = LV_PATH FULLPATH = P_FLNM.
PARAMETERS命令で定義した画面項目に対して、「当該項目のヘルプが呼び出されたとき」というイベントを定義しています。(以下の部分)
* 検索ヘルプの付与 AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FLNM.
その際、このイベントブロックの配下に記述されているクラスが実行される、という仕組みです。
" 検索ヘルプが呼び出されたときの処理↓ CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG CHANGING FILENAME = LV_FILENAME PATH = LV_PATH FULLPATH = P_FLNM.
もう1個別のサンプルコードを記載しておきます。
PARAMETERS: p_empid TYPE zempid. " 社員ID(Zテーブルなど) AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_empid. DATA: lt_values TYPE TABLE OF ddshretval, lt_empids TYPE TABLE OF zempid, lv_field TYPE help_info-fieldname. " 候補データを作成(ここでは簡易的に固定) APPEND '1001' TO lt_empids. APPEND '1002' TO lt_empids. APPEND '1003' TO lt_empids. " ヘルプ表示 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'P_EMPID' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P_EMPID' TABLES value_tab = lt_empids return_tab = lt_values EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3.

このサンプルコードではPARAMETERS
に入力フィールドを定義。ON VALUE-REQUEST
でF4イベントに割り込みを作り、固定の候補リスト(lt_empids
)を作って F4IF_INT_TABLE_VALUE_REQUEST
で表示します。
Tips:ディクショナリ入力ヘルプが存在する場合
画面項目に検索ヘルプが紐づいている場合(これをディクショナリ入力ヘルプと呼びます)、上記で説明したようなコードは不要です。

上記「会社コード」項目は、ディクショナリを参照していますが、そのディクショナリには検索ヘルプが付与されているため、特段の設定をせずとも検索ヘルプが利用可能な状態になっています。
さて、この場合に「VALUE-REQUEST」で検索ヘルプを付与するとどうなるでしょうか。
* 画面項目「会社コード」 PARAMETERS P_BURKS TYPE BUKRS. * 検索ヘルプの付与 AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_BUKRS. " 検索ヘルプが呼び出されたときの処理↓ CALL FUNCTION 'F4_FILENAME' IMPORTING FILE_NAME = P_BUKRS.
結果は、ディクショナリ入力ヘルプよりも、「VALUE-REQUEST」の検索ヘルプが勝ちます。つまり、上記のサンプルコードを実行した場合、会社コードの入力ヘルプではなく、ファイル選択のヘルプが呼び出されます。
→ 標準のF4ヘルプは無効化され、ON VALUE-REQUEST
の処理が優先されます。
■ポイント整理
項目 | 内容 |
---|---|
優先順位 | ON VALUE-REQUEST のロジックが 標準のDDICヘルプより優先 |
効果 | 標準の検索ヘルプは表示されなくなる |
回避策 | 必要ならば、CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' などで標準ヘルプを明示的に呼び出す必要がある |

あまり、利用する機会はないものの一応頭に入れておくと良いかと思います。