検索ヘルプExitについて仕組みと利用方法を3分で解説します。
検索ヘルプExitとは、標準の検索ヘルプの動きに何らかの処理を追加したり、標準の動きを変えたりすることができるようにした拡張方法です。
このページでは検索ヘルプの基本から検索ヘルプExitのコーディング方法までを簡単にご説明します。
SAPエンジニアを目指す方であれば頭に入れておきたいSAP基本知識の1つです。是非最後までご覧ください。
検索ヘルプとは?
前提となる「検索ヘルプ」について。
検索ヘルプとは、選択画面の各項目に値を入力する際に、値入力をアシストしてくれる機能のこと。
検索ヘルプの基本、作り方・設定方法を学びたい方は以下の記事をご覧ください。
標準の検索ヘルプではできないこと
標準の検索ヘルプの設定だけでは、単に対象のデータを取得する動きしか指定できません。
したがって、例えば「取得したデータから特定条件に当てはまるレコードのみを表示する」「取得したデータを加工して表示する」といった特殊な要件を実現することができないのです。
そのために用意されたのが、検索ヘルプ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を紐づける行為はモディフィケーション扱いです。
Exit という名称に惑わされ、チェック・代入などと同じ拡張(Enhancemnet)と同等であると勘違いをする方もいらっしゃいますが、この点だけ注意が必要。SAPをバージョンアップする場合は、紐づけた検索ヘルプExitの設定は消失してしまう点を考慮し適切な管理が求められます。
SAP/ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!