numElementsItem プロパティーは、コードで可変長レコードを処理する際に使用されるフィールドを識別します。
可変長レコードには、最終の最上位構造体フィールドとして構造化フィールド配列がある必要があります。 numElementsItem で参照するフィールドは、書き込まれる実際の配列要素数を含む 9 桁以下の整数です。 値の範囲は、0 から最大値 (構造化フィールド配列の宣言で指定された要素の数が最大値) です。
numElementsItem フィールドは、可変長レコードの固定長部分にあるフィールドでなければなりません。 非修飾参照を使用して、要素フィールド数に名前を付けます。例えば、myRecord.myField02 ではなく myField02 を使用します。
numElementsItem プロパティーは、ファイルからレコードを読み取っているときには無効です。
可変長レコードを使用する場合は、lengthItem プロパティーまたは numElementsItem プロパティー、あるいはその両方を指定しなければなりません。 この両方のプロパティーがある場合、EGL ではレコードをファイルに書き込みます。EGL では、numElementsItem フィールドを使用してレコードの合計長を計算し、lengthItem が指定する変数にその長さを配置してからレコードを書き込みます。 詳しくは、可変長レコードを参照してください。
Record SerialRecordPart2 type serialRecord
{
fileName = "myFile",
numElementsItem = myField02
}
10 myField01 BIN(4); // 2 バイト長
10 myField02 NUM(3); // 3 バイト長
10 myField03 CHAR(20)[3]; // 60 バイト長
20 mySubField01 CHAR(10);
20 mySubField02 CHAR(10);
end
numElementsItem フィールド myField02 が 2 に設定されている SerialRecordPart2 に基づいてレコードの書き込みを行っているとします。 EGL は、myField01、myField02、および myField03 の最初の 2 つの要素を含んだ可変長レコードを書き込みます。
| プラットフォーム | 問題 |
|---|---|
| CICS® | 一時ストレージ・キューと一時データ・キューでは、可変長レコードはサポートされていません。 |
| IMS/VS | numElementsItem および lengthItem は、IMS™ メッセージ・キューと関連付けられたシリアル・ファイルでのみサポートされています。 EGL は、キューに書き込むレコードに IMS メッセージ・ヘッダー (長さ、ZZ フィールド、 およびトランザクション・コード) を追加します。EGL は、キューから読み取るレコードからこのヘッダーを削除します。レコードの定義をヘッダーに含めないでください。 |
| IMS BMP | IMS メッセージ・キューと関連付けられたファイルの場合は、IMS/VS に関する考慮事項が IMS BMP に当てはまります。それ以外の場合は、z/OS® バッチに関する考慮事項が当てはまります。 |
| iSeriesC | サポートされていません。 |
Java 生成 |
Java™ とデバッグでは、ファイル・タイプ seqws、mq、および ibmcobol で可変長レコードをサポートします。 |
| z/OS バッチ | 可変長レコードは、VSAM ファイルおよび z/OS 順次ファイルで サポートされます。 VSAM でない順次ファイルの可変長レコードは、4 バイトのヘッダーを持ちます (長さフィールド 2 バイトとフィラー・フィールド 2 バイト)。EGL では、可変レコード・フォーマットの非 VSAM 順次ファイルに書き込む際、4 バイトの可変長ヘッダーを追加します。 EGL では、このレコードを読み取るときに、そのヘッダーを削除します。 レコードの定義をヘッダーに含めないでください。 そのファイルが GSAM ファイルの場合、EGL では、ファイルにレコードを書き込むときに 2 バイトの先行長さフィールドをレコードに追加します。EGL は、ファイルから読み取るレコードからこのヘッダーを削除します。レコードの定義をヘッダーに含めないでください。 |