!--a11y-->

抽出を定義するには、最初に個別のレコードを宣言し、次にレコードの構造を定義します。
抽出データセットは一連のレコードで構成されています。各レコードの構造は異なっていてもかまいません。レコードタイプは、同じ構造を持つすべてのレコードによって形成されます。FIELD-GROUPS 命令を使用して、抽出データセットの各レコードグループを項目グループとして定義する必要があります。
FIELD-GROUPS <fg>.
この命令では、項目グループ <fg> が定義されます。項目グループによって、複数の項目が 1 つの名前の下にまとめられます。明確にするために、項目グループはプログラムの宣言部の最後で宣言してください。
項目グループは、項目のための記憶域スペースを予約しませんが、既存の項目へのポインタを含みます。抽出データセットにレコードが書き込まれるときに、これらのポインタによって格納されたレコードの内容が指定されます。
以下の命令を使用して、HEADER という名前の特別な項目グループを定義することもできます。
FIELD-GROUPS HEADER.
このグループは、抽出にデータを書き込むときに自動的に他の項目グループの前に配置されます。したがって、項目グループ <fg> のレコードには項目グループHEADER の項目が必ず含まれていることになります。抽出データセットをソートするときに、これらの項目がデフォルトソートキーとして使用されます。
レコードの構造を定義するには、以下の命令を使用して必要な項目を項目グループに追加します。
INSERT <f1>...<fn> INTO <fg>.
この命令では、項目グループ <fg> の項目が定義されます。項目を項目グループに割り当てるには、事前に FIELD-GROUPS 命令を使用して項目グループ <fg> を定義しておく必要があります。項目グループの項目は、ABAP プログラムのグローバルデータオブジェクトでなければなりません。プロシージャで定義したローカルデータオブジェクトを項目グループに割り当てることはできません。
FIELD-GROUPS 命令と同様に、INSERT 命令では、記憶域スペースの予約も値の転送も行われません。INSERT 命令を使用して項目グループ<fg> の項目 <f i> へのポインタを作成し、抽出レコードの構造を定義します。
プログラムの実行中に、初めてこの項目グループを使用して抽出レコードにデータを書き込む時点まで、項目グループに項目を割り当てることができます。この時点以降、レコードの構造は、固定されるので変更することができなくなります。つまり、項目グループをまだ使用していなければ、構造を動的に拡張することができます。
特別な項目グループ HEADER は、各抽出レコードの一部になります。したがって、最初の抽出レコードにデータを書き込んだあとは HEADER を変更することはできません。
1 つの項目を複数の項目グループに入れることもできますが、抽出データセット内に不必要なデータ冗長性が生じることになります。INSERT で項目グループの構造を明示的に定義する必要はありません。項目グループ HEADER を定義している場合は、未定義の項目グループは暗黙的に HEADER の項目で構成されます。定義していない場合は、未定義の項目グループは空になります。

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.
このプログラムは、論理データベース F1S にリンクされます。NODES 命令では、対応するインタフェース作業領域が宣言されます。
ここには 3 つの項目グループがあります。INSERT 命令によって 2 つの項目グループに項目が割り当てられます。