コンテンツフレーム起動

抽出の読込 文書を SAP ライブラリストラクチャに組み込む

内部テーブルと同様に、ループを使用して抽出データセットのデータを読み込むことができます。 

LOOP.
...
  [AT FIRST | AT <fgi> [WITH <fgj>] | AT LAST.
  ...
   ENDAT.]
...
ENDLOOP.

LOOP 命令が使用されると、抽出データセットの登録が中止され、データセットのエントリのループが開始されます。各ループパスでは、抽出データセットのレコードが 1 つ読み込まれます。抽出項目の値は、ループ内の対応する出力項目に配置されます。複数のループを次々に使用できますが、ループをネストすることはできません。ループ内またはループ後に EXTRACT 命令を追加使用することもできません。いずれの場合も実行時エラーが発生します。

内部テーブルとは対照的に、抽出データセットでは、インタフェースとして特別な作業領域またはフィールドシンボルを必要としません。オリジナルの項目名を使用して、ループ内のデータセットの各レコードを処理することができます。

ループ制御

データセットの特定レコードの一部の命令だけを実行する場合は、制御命令 AT および ENDAT を使用します。

以下のように、AT の各種オプションの制御命令の間で命令ブロックが処理されます。

        AT FIRST

データセットの最初のレコードに対して命令ブロックが 1 回実行されます。

        AT <fgi> [WITH <fgj>]

現在読み込まれている抽出レコードのレコードタイプが項目グループ <fg i> で定義されている場合は、命令ブロックが処理されます。WITH <fgj> オプションの使用時には、抽出データセットで、項目グループ <fgi> の現在読み込まれているレコードの直後に項目グループ <fgj> のレコードを続ける必要があります。

        AT LAST

データセットの最後のレコードに対して命令ブロックが 1 回実行されます。

制御レベル処理 AT および ENDAT 命令を使用することもできます。

 例

以下のプログラムは、論理データベース F1S にリンクしているものと仮定します。

REPORT DEMO.

NODES: SPFLI, SFLIGHT.

FIELD-GROUPS: HEADER, FLIGHT_INFO, FLIGHT_DATE.

INSERT: SPFLI-CARRID SPFLI-CONNID SFLIGHT-FLDATE
    INTO HEADER,
    SPFLI-CITYFROM SPFLI-CITYTO
    INTO FLIGHT_INFO.

START-OF-SELECTION.

GET SPFLI.
   EXTRACT FLIGHT_INFO.

GET SFLIGHT.
   EXTRACT FLIGHT_DATE.

END-OF-SELECTION.

  LOOP.
    AT FIRST.
      WRITE / 'Start of LOOP'.
      ULINE.
    ENDAT.
    AT FLIGHT_INFO WITH FLIGHT_DATE.
      WRITE: / 'Info:',
               SPFLI-CARRID, SPFLI-CONNID, SFLIGHT-FLDATE,
               SPFLI-CITYFROM, SPFLI-CITYTO.

    ENDAT.
     AT FLIGHT_DATE.
       WRITE: / 'Date:',
                SPFLI-CARRID, SPFLI-CONNID, SFLIGHT-FLDATE.

     ENDAT.
     AT LAST.
   ULINE.
      WRITE / 'End of LOOP'.

     ENDAT.
   ENDLOOP.

抽出データセットが登録され、抽出データの書込の例で示したのと同じ方法で書き込まれます。データ読込は、END-OF-SELECTION イベントの前に終了します。このイベントでは、ループを使用してデータセットが 1 回読み込まれます。

制御命令 AT FIRST および AT LAST は、1 つの行と 1 つのアンダースコア行を一覧に書き込むようにシステムに指示します (1 回はループの最初、もう 1 回はループの最後に)

制御命令 AT <fgi> は、2 つの各レコードタイプに対応する項目を出力するようにシステムに伝えます。WITH FLIGHT_DATE オプションを使用すると、項目グループ FLIGHT_DATE のレコードが最低 1 つ続く場合、つまり、論理データベースがフライト日付を最低 1 つ渡している場合、項目グループ FLIGHT_INFO のレコードだけが表示されます。

出力一覧の最初は、次のように表示されます。

このグラフィックは添付のテキストに説明されています

レコードタイプ FLIGHT_INFO HEADER 部分に、項目 SFLIGHT-FLDATE の内容が # 記号として表示されています。これは、論理データベースによって、階層レベルの処理完了時に、その階層レベルの全項目に値 HEX 00 が書き込まれているからです。この機能は、抽出データセットの制御レベルのソートおよび処理において重要です。

 

 

 

 

 

コンテンツフレーム終了