【ABAP】検索ヘルプExitとは?仕組みとコーディング方法を3分で解説

ABAP

検索ヘルプExitについて仕組みと利用方法を3分で解説します。

検索ヘルプExitとは、標準の検索ヘルプの動きに何らかの処理を追加したり、標準の動きを変えたりすることができるようにした拡張方法です。このページでは検索ヘルプの基本から検索ヘルプExitのコーディング方法までを簡単にご説明します。

このページで学べる内容
  • 検索ヘルプExitとは?
  • 検索ヘルプExitのプログラム構成
  • 検索ヘルプExitのコーディング例

上級ABAPerであれば知っておいて当然かも?分かりやすく解説しますので、是非最後までご覧ください。

スポンサーリンク

検索ヘルプとは?

前提となる「検索ヘルプ」について。

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

検索ヘルプ,SAP

この機能を利用すれば、選択項目に何を入れて良いかわからない場合でも、その場で対象を検索したうえで選択画面への入力が可能です。

標準の検索ヘルプではできないこと

標準の検索ヘルプの設定だけでは、単に対象のデータを取得する動きしか指定できません。

したがって、例えば「取得したデータから特定条件に当てはまるレコードのみを表示する」「取得したデータを加工して表示する」といった特殊な要件を実現することができないのです。

そのために用意されたのが、検索ヘルプExit。ここからは、検索ヘルプExitの解説に移ります。

検索ヘルプExitとは?

検索ヘルプExitの実態は汎用モジュールです。汎用モジュールを作成し、この汎用モジュールを検索ヘルプに紐づけることによって、データ加工・データ表示に追加の処理を加えるイメージです。

赤枠内に、作成した汎用モジュールを入力するだけなので検索ヘルプExitの紐づけ自体は簡単。

本質的には、この汎用モジュールをどのように作成するか?さえ理解すれば検索ヘルプExitの理解はおおよそOKと言えるでしょう。ここで、検索ヘルプExitの作り方を詳しく解説します。

検索ヘルプExitの作成方法

検索ヘルプExitを作成する際には、基本的にSAPが用意したサンプル「F4IF_SHLP_EXIT_EXAMPLE」を基にしていきます。

SAP標準の検索ヘルプからどのようなパラメータが渡されているかは完全にブラックボックスなので、自分で一から汎用モジュールを定義することはほぼ不可能。サンプルをフォーマットに必要なコーディングを行うのが定石です。

検索ヘルプExitのプログラム構成

早速、サンプル「F4IF_SHLP_EXIT_EXAMPLE」の中身をのぞいてみます。大まかに以下の4ステップで構成されます。

*1
  IF CALLCONTROL-STEP = 'SELONE'.
    PERFORM SELONE .........
  ENDIF.

*2
  IF CALLCONTROL-STEP = 'PRESEL'.
    PERFORM PRESEL ..........
  ENDIF.

*3
  IF CALLCONTROL-STEP = 'SELECT'.
    PERFORM STEP_SELECT TABLES RECORD_TAB SHLP_TAB
                        CHANGING SHLP CALLCONTROL RC.
    IF RC = 0.
      CALLCONTROL-STEP = 'DISP'.
    ELSE.
      CALLCONTROL-STEP = 'EXIT'.
    ENDIF.
    EXIT. "Don't process STEP DISP additionally in this call.
  ENDIF.

*4
  IF CALLCONTROL-STEP = 'DISP'.
    PERFORM AUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB
                           CHANGING SHLP CALLCONTROL.
  ENDIF.

CALLCONTROL-STEP」というのが肝で、このステップ(プログラム中のイベントのようなものとご理解ください)ごとに処理を追加していきます。

CALLCONTROL-STEP = 'SELONE'

'SELONE' ステップは、複合検索ヘルプの場合にのみ呼び出されるステップで、複合検索ヘルプから基本検索ヘルプを呼び出すタイミングを表します。

インクルードされた基本検索ヘルプのうち特定の検索ヘルプを表示させたい場合に利用するのが一般的です。特に何もしたくない場合は、以下のように処理をスキップさせます。

*1
  IF CALLCONTROL-STEP = 'SELONE'.
*    PERFORM SELONE .........
     EXIT.
  ENDIF.

CALLCONTROL-STEP = 'PRESEL'

'PRESEL' ステップは、SELECT(データ抽出)が始まる前を表します。

画面に入力された内容をチェックしたい場合などはこのステップ内にコーディングしていきます。

CALLCONTROL-STEP = 'SELECT'

'SELECT' ステップはその名の通りデータ抽出時(SELECT実行時)に訪れます。取得したデータを一部変更したい場合などにこのステップにコーディングすることが一般的です。

IF CALLCONTROL-STEP = 'SELECT'.
  IF shlp-shlpname = 'BUPAA' OR
     shlp-shlpname = 'BUPAA_VERS'.
     PERFORM search_partner_addr
       TABLES
         record_tab
         shlp_tab
       CHANGING
         shlp
         callcontrol
         rc.
  ENDIF.
ENDIF.

CALLCONTROL-STEP = 'DISP'

’DISP’ ステップは取得したデータを表示するタイミングです。主にこのステップでは、例えば権限に応じて表示・非表示の制御を行いたい場合などに利用することができます。

IF CALLCONTROL-STEP = 'DISP'
  PERFORM AUTHORITY_CHECK.

尚、検索ヘルプに検索ヘルプExitを設定することは、実は結構稀です。SAP導入時の方針にもよりますが、基本的には「SAPの動きに合わせて業務も変えていく」のが昨今の潮流です。ですが、その中でも検索ヘルプに権限チェックを付けたい!という要求は未だ根強いため、’DISP’ ステップで権限チェックを行っている会社は一定数存在するようです。

逆に言えば、検索ヘルプに〇〇という結果が出てこない!というような問い合わせを受けた場合は、この'DISP' ステップ周辺を調査してみることをおすすめします。

検索ヘルプExitの注意点

最後に検索ヘルプExitを利用する場合の注意点について。

検索ヘルプExitは "Exit" という名前ではありますが、標準の検索ヘルプに検索ヘルプExitを紐づける行為はモディフィケーション扱いです。

画像に alt 属性が指定されていません。ファイル名: image-54-1024x441.png

Exit という名称に惑わされ、チェック・代入などと同じ拡張(Enhancemnet)と同等であると勘違いをする方もいらっしゃいますが、この点だけ注意が必要。SAPをバージョンアップする場合は、紐づけた検索ヘルプExitの設定は消失してしまう点を考慮し適切な管理が求められます。

SAP/ABAPを1から勉強したい方は

SAP/ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

是非、一度ご覧になってみてください。

タイトルとURLをコピーしました