特定の画面項目でF4ヘルプを要求した際にカスタマイズされた検索ヘルプを表示する方法(ON VALUE-REQUEST)を解説します。
検索ヘルプとは、選択画面の各項目に値を入力する際に、値入力をアシストしてくれる機能のこと。
通常、検索ヘルプはディクショナリオブジェクトに割り当てることによって付与するのが一般的ですが、ここではプログラム中で検索ヘルプを付与する方法を解説します。
検索ヘルプの利用方法・登録方法は以下の記事をご参照ください。
ABAPerを目指す方であれば知っておきたい重要知識です。是非最後までご覧ください。
前提:イベントブロックとは?
検索ヘルプを付与する方法を正確に理解するためには、イベントブロックについての理解が必須のため、ここではイベントブロックについて簡単におさらいしておきます。
前提 イベントブロックとは、一言で言うとイベントを定義した1つの塊です。
ユーザによるキーボードの操作、マウスのクリックなどによって、システムに何らかの変更が加えられシステムの状態が変化する出来事のことです。
例えば・・・
「”Enter”ボタンを押す」
「"戻るボタン" をマウスでクリックする」
「"選択画面" が表示される」
上記のようなシステムに対する何らかのアクション・何らかのリクエストをイベントと総称します。
今回解説する「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個別のサンプルコードを記載しておきます。
REPORT ZSAMPLE. PARAMETERS: p_purch_order TYPE EKKO-EBELN. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_purch_order. DATA: lt_ekko TYPE TABLE OF EKKO, ls_ekko TYPE EKKO, lv_selected TYPE EKKO-EBELN. SELECT * FROM EKKO INTO TABLE lt_ekko. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'EBELN' value_org = 'S' TABLES value_tab = lt_ekko EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc = 0. READ TABLE lt_ekko WITH KEY EBELN = lv_selected INTO ls_ekko. IF sy-subrc = 0. p_purch_order = ls_ekko-EBELN. ENDIF. ENDIF.
このサンプルコードでは、選択画面で「p_purch_order」パラメータのF4ヘルプが要求されたときに、「AT SELECTION-SCREEN ON VALUE-REQUEST」イベントがトリガーされます。
データベースから購入オーダーの一覧(EKKOテーブル)を取得し、標準検索ヘルプ関数「F4IF_INT_TABLE_VALUE_REQUEST」を呼び出す仕組みです。
ディクショナリ入力ヘルプが存在する場合
画面項目に検索ヘルプが紐づいている場合(これをディクショナリ入力ヘルプと呼びます)、上記で説明したようなコードは不要です。
上記「会社コード」項目は、ディクショナリを参照していますが、そのディクショナリには検索ヘルプが付与されているため、特段の設定をせずとも検索ヘルプが利用可能な状態になっています。
さて、この場合「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」の検索ヘルプが勝ちます。つまり、上記のサンプルコードを実行した場合、会社コードの入力ヘルプではなく、ファイル選択のヘルプが呼び出されます。(結果が言わずもがなエラーです。)
あまり、利用する機会はないものの一応頭に入れておくと良いかと思います。
SAP/ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!