!--a11y-->

次の文を使用すると、
PARAMETERS <p> AS SEARCH PATTERN FOR TABLE <node>.
選択インクルード内に、選択画面の検索ヘルプのためのフレームワークを定義できます。
検索ヘルプによって返されるキー項目は、<ldb>_SP 内部テーブルに格納され、データベースプログラムによって使用できるようになります。ここでは、PUT_<root> の代わりに PUT_<ldb>_SP サブルーチンが呼び出されます (<ldb> は論理データベース名)。
PUT_<ldb>_SP サブルーチンでは、論理データベースがこの内部テーブルの情報を使用することで、実際のデータベースアクセスがより効率的に行われます。このサブルーチンは、PUT_<root> 文で GET <root> イベントをトリガします (<root> はルートノード名)。多くの場合、PUT_<ldb>_SP から PUT_<root> サブルーチンを呼び出すと便利です。こうすると、PUT_<root> はデータを選択して、対応する GET イベントを PUT <root> 文でトリガできるようになります。ただし技術的な理由により、PUT <root> 文は、PUT_<root> で始まる名前を持つサブルーチン内で常に発生させる必要があります。<ldb>_SP 内部テーブル、および自動生成される他のテーブルの構造は、データベースプログラムに対して生成されるソースコードのコメントとして表示されます。ソースコードには、各テーブルの使用方法も記述されています。

ルートノード KNA1 が検索ヘルプ DEBI にリンクされている論理データベース ZZF を例に説明します。
選択インクルード DBZHKSEL には、以下の行を含めます。
SELECT-OPTIONS SKUNNR FOR KNA1-KUNNR.
PARAMETERS P_SP AS SEARCH PATTERN FOR NODE KNA1.
これで、データベースプログラムのソースコードにはさらにコメント行が追加されました。これは、下記の一覧に加え、以下のテーブルおよび項目が作成されたことを示します。
内部テーブル ZZF_SP:
このテーブルのデータ型は以下のとおりです。
DATA: BEGIN OF ZZF_SP
OCCURS 1000,
KUNNR
LIKE KNA1-KUNNR,
END OF
ZZF_SP.
ユーザの検索ヘルプ選択により、検索ヘルプの出力項目に該当リストが生成されます。データベースプログラムは、この該当リストを ZZF_SP テーブルから使用できます。
内部テーブル SP_FIELDS:
論理データベースに複合検索ヘルプが割り当てられている場合は、基本検索ヘルプは通常、複合検索ヘルプの出力項目の選択だけを設定します。プログラムは、どの項目が設定されたかを、SP_FIELDS テーブルから判断できます。この構造は以下のようになります。
DATA: BEGIN OF
SP_FIELDS OCCURS 10.
INCLUDE STRUCTURE
RSSPFIELDS.
DATA: END OF SP_FIELDS.
検索ヘルプによって SP_FIELDS-FIELDNAME 内の項目に値が割り当てられた場合は、SP_FIELDS-SUPPLIED 項目は SPACE ではなくなります。
内部テーブル SP_TABLES:
検索ヘルプが異なるテーブルの項目を保持する場合は、プログラムは検索ヘルプの対象となる項目を、SP_TABLES テーブルから判断できます。この構造は以下のようになります。
DATA: BEGIN OF
SP_TABLES OCCURS 10.
INCLUDE STRUCTURE
RSSPTABS.
DATA: END OF SP_TABLES.
検索ヘルプによって SP_FIELDS-TABLENAME 内のテーブルに値が割り当てられた場合は、SP_TABLES-SUPPLIED 項目は SPACE ではなくなります。
SP_EVENTS 項目:
これは、長さが 200 の項目です。SP_EVENTS 内の 1 バイトは、論理データベース構造内の各テーブルを表します ( たとえば、最初の文字はルートノードを表す) 。それぞれの位置の値は、対応するノードの以下の意味を示します。
– 'X': GET 文を使用してアプリケーションプログラム内で指定されるノード。検索ヘルプによって、キー項目の値がSP_<ldb> に割り当てられています。
– 'R': GET 文を使用してアプリケーションプログラム内で指定されるノード。検索ヘルプによって、キー項目の値がSP_<ldb> に割り当てられていません。
– 'M': このノードはアプリケーションプログラム内で GET 文を使用して指定されませんが、検索ヘルプによってキー項目の値が SP_<ldb> に割り当てられています。
– ' ': このノードはアプリケーションプログラム内で GET 文を使用して指定されず、検索ヘルプによってもキー項目の値が SP_<ldb> に割り当てられていません。
ソート項目が ABC で始まる選択画面で、ユーザが選択ヘルプですべてのサプライヤを選択すると、得意先コード 17、125、および 230 が適用される場合、上記のテーブルは次のように設定されます。
ZZF_SP:
|
KUNNR |
|
17 |
|
125 |
|
230 |
SP_FIELDS:
|
FIELDNAME |
SUPPLIED |
|
KUNNR |
X |
SP_TABLES:
|
TABLENAME |
SUPPLIED |
|
KNA1 |
X |
たとえば無効なサブルーチン PUT_ZZF_SP は、ZZF_SP 内部テーブルのエントリを使用するために、次のように修正して有効化できます。
FORM PUT_ZZF_SP.
CASE
SP_EVENTS(1).
WHEN 'X'
OR 'M'.
PERFORM
PUT_KNA1_SP.
WHEN OTHERS.
PERFORM
PUT_KNA1.
ENDCASE.
ENDFORM.
FORM PUT_KNA1_SP.
SELECT *
FROM KNA1 FOR ALL ENTRIES IN ZZF_SP
WHERE KUNNR = ZZF_SP_KUNNR.
PUT
KNA1.
ENDSELECT.
ENDFORM.
GET_EVENTS テーブルに基づき、アプリケーションプログラムが KNA1 の GET 文を保持するかどうか、または選択ヘルプがキー項目の値を割り当てたかどうかのチェックが実行されます。これが真であれば、PUT_KNA1_SP が呼び出されます。これには KNA1 に対する SELECT ループが含まれ、ZZF_SP 内のキー項目に対応する各行が読み込まれます。SELECT ループには、PUT KNA1 文が含まれます。
あるいは、次のようになります。
FORM PUT_ZZF_SP.
* Fill selection table from ZZF_SP
IF
SP_EVENTS(1) NE SPACE.
CLEAR
SKUNNR.REFRESH
SKUNNR.
MOVE:
'I' TO SKUNNR-SIGN,
'EQ'
TO SKUNNR-OPTION.
LOOP AT
ZZF_SP.
MOVE
ZZF_SP-KUNNR TO SKUNNR-LOW.
APPEND
SKUNNR.
ENDLOOP.
ENDIF.
* Select data and call GET KUNNR
READ TABLE
GET_EVENTS WITH KEY 'KNA1'.
IF
SY-SUBRC = 0 AND GET_EVENTS-KIND NE SPACE.
PERFORM
PUT_KUNNR.
ENDIF.
これにより、KNA1 の SKUNNR 選択テーブルが削除され、ZZF_SP の値が設定されます。プログラムは GET_EVENTS テーブルを使用して、アプリケーションプログラムに KNA1 の GET 文が含まれているかどうかをチェックします。含まれている場合は、PUT_KUNNR サブルーチンが呼び出されます。このサブルーチンは、SKUNNR 選択テーブルに従って KNA1 からデータを読み込み、PUT KNA1 文を実行します。
データベースアクセスに検索ヘルプが使用される場合は、動的選択および項目選択を使用する必要があります。
検索ヘルプを使用すると、パフォーマンスを改善することもできます。使用および設定されるテーブルおよび項目に応じて、内部テーブル GET_EVENTS、SP_FIELDS、SP_TABLES を使用して、異なるデータベースアクセス方法をプログラムできます。たとえば、ビューまたは結合を使用して内部テーブルにエントリを含めることで、このエントリを後から処理し、対応する GET イベントをトリガすることができます。