コンテンツフレーム起動

データベースプログラムの検索ヘルプ 文書を SAP ライブラリストラクチャに組み込む

次の文を使用すると、

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 で始まる選択画面で、ユーザが選択ヘルプですべてのサプライヤを選択すると、得意先コード 17125、および 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_EVENTSSP_FIELDSSP_TABLES を使用して、異なるデータベースアクセス方法をプログラムできます。たとえば、ビューまたは結合を使用して内部テーブルにエントリを含めることで、このエントリを後から処理し、対応する GET イベントをトリガすることができます。

 

 

 

 

コンテンツフレーム終了