レコード・パーツを宣言すると、可変長レコードの使用をサポートするプロパティーを含めることができます。 順次ファイルへのアクセスには可変長シリアル・レコード、VSAM ファイルへのアクセスには可変長シリアル・レコードまたは可変長索引付きレコード、MQSeries® メッセージ・キューへのアクセスには可変長 MQ レコードをそれぞれ使用できます。
Record SerialRecordPart1 type serialRecord { fileName = "myFile", lengthItem = "myOtherField" } 10 myField01 BIN(4); // 2 バイト長 10 myField02 NUM(3); // 3 バイト長 10 myField03 CHAR(20); // 20 バイト長 end長さ項目が文字項目でない場合、レコードの書き込み時、長さ項目の値は項目の境界を越える必要があります。例えば、SerialRecordPart1 型のレコードには長さ項目 myOtherField があり、2、5、6、7、...、24、25 に設定できます。myOtherField に 2 が設定されているレコードには、myField01 の値のみが含まれます。myOtherField に 5 が設定されているレコードには、myField01 および myField02 の値が含まれます。myOtherField に 6 から 24 が設定されているレコードには、myField03 のパーツの値も含まれます。
NumElementsItem プロパティーがある場合、コードがファイルまたはキューへの追加または更新を行う場合に使用する項目を示します。可変長レコードには、最終の最上位構造体項目として配列がある必要があります。要素項目数の値は、書き込みされる配列要素の実際の数を表します。値の範囲は、0 から最大値までです。この最大値は、レコード内の最後のトップレベル構造体項目の宣言で指定された occurs 値です。
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要素項目 myField02 に 2 が設定されている SerialRecordPart2 型のレコードを書き込みすると、myField01、myField02、および 2 つのオカレンス myField03 を持つ可変長レコードがファイルまたはキューに書き込まれます。
要素項目数は、可変長レコードの固定長パーツ内の項目の値と同じである必要があります。非修飾参照を使用して、要素項目数に名前を付けます。例えば、myRecord.myField02 ではなく myField02 を使用します。
要素項目の数は、ファイルからレコードを読み取っているときには無効です。
可変長レコードに lengthItem プロパティーと numElementsItem プロパティーの両方が指定されている場合、要素項目数を使用してレコード長が計算されます。計算されたレコード長は、レコードがファイルに書き込みされる前にレコード長項目に移動します。
同様に、可変長レコードが転送時に渡される場合は、レコードに指定された最大長に対するスペースが予約されます。
関連リファレンス
callLink エレメント
MQ レコードのプロパティー