PR

【ABAP】検索ヘルプの付与(VALUE-REQUEST)を3分で解説

ABAP

特定の画面項目でF4ヘルプを要求した際にカスタマイズされた検索ヘルプを表示する方法(ON VALUE-REQUEST)を解説します。

検索ヘルプ(F4ヘルプ)とは、選択画面の各項目に値を入力する際に、値入力をアシストしてくれる機能のこと。

検索ヘルプ,SAP

通常、検索ヘルプはディクショナリオブジェクトに割り当てることによって付与するのが一般的ですが、ここではプログラム中で検索ヘルプを付与する方法を解説します。

検索ヘルプの利用方法・登録方法は以下の記事をご参照ください。

このページで学べる内容
  • 前提:イベントブロックとは?(AT SELECTION-SCREEN)
  • 検索ヘルプの付与方法(VALUE-REQUEST)
  • 検索ヘルプを利用したサンプルコード

SAPエンジニアやABAPerを目指す方であれば知っておきたい重要知識です。是非最後までご覧ください。

スポンサーリンク

前提:イベントブロックとは?

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

前提 イベントブロックとは、一言で言うとイベントを定義した1つの塊です。

ABAP イベントブロック
イベントとは?

ユーザによるキーボードの操作マウスのクリックなどによって、システムに何らかの変更が加えられシステムの状態が変化する出来事のことです。

例えば・・・

「”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:ディクショナリ入力ヘルプが存在する場合

画面項目に検索ヘルプが紐づいている場合(これをディクショナリ入力ヘルプと呼びます)、上記で説明したようなコードは不要です。

SAP,検索ヘルプ

上記「会社コード」項目は、ディクショナリを参照していますが、そのディクショナリには検索ヘルプが付与されているため、特段の設定をせずとも検索ヘルプが利用可能な状態になっています。

さて、この場合に「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' などで標準ヘルプを明示的に呼び出す必要がある

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

まとめ ON VALUE-REQUESTとは?

ABAPのダイアログプログラムで使うイベントで、
入力フィールドのF4ヘルプ(候補一覧)をカスタマイズしたいときに使用します。

AT SELECTION-SCREEN ON VALUE-REQUEST FOR <フィールド名>.
  " F4が押されたときの処理を書く

■ よくある用途

シナリオ処理内容の例
社員番号入力欄でF4を押す社員マスタを検索して選択肢を表示
部門コード入力欄でF4有効な部門コードを一覧表示

■補足

  • SAP標準のF4ヘルプでは足りない場合に使う
  • 選択肢はCALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'などで表示することが多い
タイトルとURLをコピーしました