レコード・タイプとプロパティー

使用可能な EGL レコード・タイプには、以下のものがあります。

どのターゲット・システムがどのレコード・タイプをサポートしているかについて詳しくは、『レコードとファイル・タイプの相互参照』を参照してください。 レコード・パーツの初期化について詳しくは、『データの初期化』を参照してください。

ALT_PCBRecord

この定義済みレコード・パーツは、プログラム制御ブロック (PCB) のレイアウトを記述します。 これにより、COBOL プログラムは出力メッセージの宛先を変更することができます。 DL/I で読み取りまたは書き込み操作を実行する際には、 このタイプのレコードの読み取りまたは書き込むを行うのではなく、 PCB レコードへの参照を組み込んでください。 レコードのレイアウトは以下のとおりです。
Record ALT_PCBRecord
	10 terminalName char(8);
	10 * char(2);
	10 statusCode char(2);
end

ALT_PCBRecord タイプは、 『PCB レコード・パーツ・プロパティー』で説明されているいくつかのプロパティーおよびプロパティー・フィールドが中心となっています。

BasicRecord

基本レコードまたは固定基本レコードは、内部処理に使用され、データ・ストレージにはアクセスできません。

このパーツは、デフォルトでは非固定レコード・パーツですが、 フィールド定義の前にレベル番号が置かれている場合は、固定レコード・パーツになります。

basicRecord タイプの固定レコード・パーツ内では、 以下のプロパティーが使用可能です。

メインプログラムでは、次のプログラム・プロパティーを使用できます。
inputRecord
このプロパティーは、 『データの初期化』で説明されている、自動的に初期化されるレコードを識別します。

DB_PCBRecord

この定義済みレコード・パーツは、 DL/I データベースへの COBOL プログラムのアクセスを決定するプログラム制御ブロック (PCB) のレイアウトを記述します。 DL/I で読み取りまたは書き込み操作を実行する際には、 このタイプのレコードの読み取りまたは書き込むを行うのではなく、 PCB レコードへの参照を組み込んでください。 レコードのレイアウトは以下のとおりであり、 これを基にしてユーザー独自のレコード・レイアウトを定義することができます。
Record DB_PCBRecord
	10 dbName char(8);
	10 segmentLevel num(2);
	10 statusCode char(2);
	10 procOptions char(4)
	10 * char(4);
	10 segmentName char(8);
	10 keyAreaLen int;
	10 numSensitiveSegs int;
	10 keyArea char(32767);
end
DB_PCBRecord タイプは、 『PCB レコード・パーツ・プロパティー』で説明されているいくつかのプロパティーおよびプロパティー・フィールドが中心となっています。

DLISegment

このレコード・タイプは、固定長または非固定長のいずれであってもかまいません。 非固定長の場合は、 値の設定ブロックに (このセクションで後述する) lengthItem プロパティーを指定する必要があります。

DLISegment レコード・タイプは、 DL/I データベース・セグメントから読み込みまたは書き込みされるデータを保持します。 セグメントを読み取るには、いくつか考えられる get 文の 1 つを呼び出し、 セグメントに書き込む場合は、add または replace 文を呼び出し、 ファイルからセグメントを除去する場合は、delete 文を呼び出します。

レコード内のフィールドは、 データベース・セグメント内のフィールドと長さおよびタイプが正確に一致しなければなりません。 明確にする目的で、あるいはマイグレーションを支援するために、 レコード定義内のフィールド名は、DL/I セグメント内のフィールド名と一致させなくてもかまいません。 ただし、レコード内のフィールド名のどれかが一致しない場合は、値の設定ブロックを使用して、 そのフィールドに関して 8 文字の dliFieldName プロパティーを指定する必要があります。 すべての名前は、生成時に大文字に変換されます。

値の設定ブロックを使用して、 DLISegment レコード・タイプの以下のプロパティーのいずれかまたはすべてを指定します。
segmentName char(8)
ランタイム DL/I セグメントの名前。 DLISegment レコードの名前が関連 DL/I セグメントの名前と一致しない場合は、 このフィールドに必要事項を入力します。
hostVarQualifier ストリング
ホスト変数修飾子名を指定すると、 コード生成プログラムは、レコード名ではなくこのホスト変数修飾子名を使用して、 デフォルトの修飾済みセグメント検索引数 (SSA) で参照される keyItems を修飾します。 DL/I セグメント・レコード名がプログラム変数 ID と一致していない場合は、 このフィールドが一致していることを確認してください。
lengthItem FieldReference
DL/I データベース内で可変長セグメントを使用する場合は、 実行時に、そのレコード内に DLISegment レコードの全長を保管する必要があります。 lengthItem には、 このレコード長を保管するフィールドの名前が含まれています。
keyItem FieldReference
レコードに対する索引またはシーケンス・キー・フィールドがある場合は、 そのフィールドの名前をここで指定します。
さらに、DLISegment レコード内の任意のフィールドに対して次のプロパティーを定義することができます。
dliFieldName char(8)
DLISegment レコード内のフィールドに名前を割り当てた場合に、 その名前が DL/I データベース・セグメント内の同等フィールドの名前と一致していない場合は、 その同等フィールドの名前をここで指定する必要があります。 大/小文字の違いは問題とはなりません。 すべてのフィールド名は、生成時に大文字に変換されます。
以下に、これらのプロパティーを使用する値の設定ブロックの例を示します。
Record CustomerRecord type DLISegment {
	segmentName = "STSCCST",
	hostVarQualifier = "STSCCST",
	lengthItem = "mySegementLength",
	keyItem = "customerNo" }

	10 customerNo char(6)      { dliFieldName = "STQCCNO" };
	10 mySegementLength int;
	...
end

GSAM_PCBRecord

この定義済みレコード・パーツは、 テープ・ファイルや SYSIN などの単純順次データ・セットへの COBOL プログラムのアクセスを決定する、 プログラム制御ブロック (PCB) のレイアウトを記述します。 DL/I で読み取りまたは書き込み操作を実行する際には、 このタイプのレコードの読み取りまたは書き込むを行うのではなく、 PCB レコードへの参照を組み込んでください。 レコードのレイアウトは以下のとおりです。
Record GSAM_PCBRecord
	10 dbName char(8);
	10 * num(2);
	10 statusCode char(2);
	10 procOptions char(4)
	10 * char(20);
	10 recordSearchArg bigint;
	10 undefinedRecordLen int;
end
GSAM_PCBRecord タイプでは、 『PCB レコード・パーツ・プロパティー』で説明されているいくつかのプロパティーおよびプロパティー・フィールドが中心となっています。

IndexedRecord

索引付きレコードは、固定レコードの 1 つであり、これを使用すると、キー値 によってアクセスされるファイルを操作できます。キー値は、ファイル内のレコードの論理的位置を示します。 このファイルを読み取るには、getget next、 または get previous 文を呼び出します。 また、ファイルに書き込みを行うには、add 文 または replace 文を呼び出します。ファイルからレコー ドを除去する場合は、delete 文を呼び出します。

タイプ indexedRecord のパーツには、以下のプロパティーがあります。
fileName
このプロパティーは必須です。入力の意味については、『リソース関連 (概説)』を参照してください。有効な文字の詳細については、『命名規則』を参照してください。
keyItem
この必須プロパティーは、同一レコード内で固有の構造体フィールドでなければなりません。 キー・フィールドを指定するには、非修飾参照を使用する必要があります。例えば、myRecord.myItem ではなく、myItem を使用します。 (ただし、EGL 文内では、他のフィールドを参照する場合と同じようにキー・フィールドを参照できます。)

可変長レコードをサポートするプロパティー』も参照し てください。

IO_PCBRecord

この定義済みレコードパーツは、プログラム制御ブロック (PCB) のレイアウトを記述します。 これにより、COBOL プログラムは端末を介してユーザーと通信することができます。 DL/I で読み取りまたは書き込み操作を実行する際には、 このタイプのレコードの読み取りまたは書き込むを行うのではなく、 PCB レコードへの参照を組み込んでください。 レコードのレイアウトは以下のとおりです。
Record IO_PCBRecord
	10 terminalName char(8);
	10 * char(2);
	10 statusCode char(2);
	10 * char(8);
	  12 localDate decimal(7);
	  12 localTime decimal(7);
	10 inputMsgSegNum int;
	10 userid char(8);
	10 groupName char(8);
	10 * char(12);
	  12 currentDate decimal(7);
	  12 currentTime decimal(11);
	  12 utcOffset hex(4);
	10 userIdIndicator char(1);
end
IO_PCBRecord タイプでは、 『PCB レコード・パーツ・プロパティー』で説明されているいくつかのプロパティーおよびプロパティー・フィールドが中心となっています。

MQRecord

MQ レコードは固定レコードの 1 つであり、これを使用すると、MQSeries® メッセージ・キューにアクセスできます。 詳細については、『MQSeries のサポート』を参照してください。

PSBDataRecord

DL/I 処理または IMS™ で使用される場合、 タイプ PSBDataRecord のレコードは固定レコードであり、以下のように編成されます。
  Record PSBDataRecord
    psbName char(8);
    psbRef int;
  end

このレコードを使用してシステム変数 DLILib.psbData と対話することができます。 このシステム変数には、ランタイム PSB の名前と、 この PSB へのアクセスに使用されるアドレスの両方が含まれています。 PSB (実際には、名前とアドレス) を別のプログラムに渡したり、 あるいは PSB を別のプログラムから受け取ったりする必要がある場合にも、このレコードが役に立ちます。

PSBRecord

このレコード・パーツは、 ランタイム・プログラム仕様ブロック (PSB) の構造を定義し、一連の PCB レコードを含みます。 データベースに関して PCB レコード、例えば (レコード・タイプ DB_PCBRecord) を作成する場合、 複雑なプロパティー @PCB に値を割り当てることによってセグメント階層を表します。 後の例で示すように、このプロパティーは、PCB の名前とタイプを表し、 hierarchy フィールドを含みます。 同様にこのフィールドには、一連の @Relationship プロパティーが含まれます。

CBLTDLI インターフェースを使用する場合は、最初に、以下の PCB を順番に宣言して、 CBLTDLI に必要な「索引によるアクセス」に適切なオフセットを指定する必要があります。
  1. IO PCB に対する iopcb
  2. 代替索引 PCB に対する ELAALT
  3. 代替高速 PCB に対する ELAEXP
以下は、カスタマー・データベースに対する PSB レコードの例です。
Record CustomerPSB type PSBRecord { defaultPSBName="STBICLG" }
	// three PCBs required for call interface CBLTDLI
	iopcb IO_PCBRecord { @PCB { pcbType = TP } };
	ELAALT ALT_PCBRecord { @PCB { pcbType = TP } };
	ELAEXP ALT_PCBRecord { @PCB { pcbType = TP } };
	
	// database PCB
	customerPCB DB_PCBRecord { @PCB {
		pcbType = DB,
		pcbName = "STDCDBL",
		hierarchy = [
			@Relationship { segmentRecord = "CustomerRecord" },
			@Relationship {
				segmentRecord = "LocationRecord", parentRecord = "CustomerRecord" },
			@Relationship {
				segmentRecord = "CreditRecord", parentRecord = "CustomerRecord" },
			@Relationship {
				segmentRecord = "HistoryRecord", parentRecord = "CustomerRecord" },
			@Relationship {
				segmentRecord = "OrderRecord", parentRecord = "LocationRecord" },
			@Relationship {
				segmentRecord = "ItemRecord", parentRecord = "OrderRecord" }]}};
end
PCB レコードのプロパティーについて詳しくは、 『PCB レコード・タイプ・プロパティー』を参照してください。

RelativeRecord

相対レコードは固定レコードの 1 つであり、これを使用すると、各レコードが以下のプロパティーを持つデータ・セットを操作できます。
  • レコードは固定長です。
  • レコードには、ファイル内のレコードの順次位置を表す整数を使用してアクセスすることができます。
タイプ relativeRecord のパーツには、以下のプロパティーがあります。
fileName
このフィールドの内容はコンテキストによって異なります。 詳細については、『リソース関連とファイル・タイプ』を参照してください。 有効な文字の詳細については、『命名規則』を参照してください。これは必須フィールドです。
keyItem
このキー・フィールドは、メモリーの以下の領域のいずれかを意味します。
  • 同一レコード内の構造体フィールド
  • プログラムに対してグローバルであるか、またはそのレコードにアクセスする関数に対してローカルであるレコード内の構造体フィールド
  • プログラムに対してグローバルであるか、またはそのレコードにアクセスする関数に対してローカルであるプリミティブ変数
キー・フィールドを指定するには、非修飾参照を使用する必要があります。 例えば、myRecord.myItem ではなく myItem を使用します。(EGL 文内では、 他のフィールドを参照する場合と同じようにキー・フィールドを参照できます。) キー・フィールドは、そのレコードにアクセスする関数のローカルな有効範囲内で固有でなければなりません。または、ローカルな有効範囲には存在しないで、グローバルな有効範囲内で固有でなければなりません。
キー・フィールドには、以下の特性があります。
  • BIN、DECIMAL、INT、または NUM のプリミティブ型を持つ
  • 小数部を含まない
  • 桁数は最大 9 桁まで

キー・フィールドを使用するのは get 文と add 文のみですが、ファイル・アクセス用にそのレコードを使用するすべての関数からキー・フィールドを使用できることが必要です。

SerialRecord

シリアル・レコードは固定レコードの 1 つであり、これを使用すると、順次にアクセスされるファイルまたはデータ・セットにアクセスできます。 ファイルを読み取るには、get 文を呼び出します。 一連の get next では、 最初のレコードから最後のレコードに向かって順次にファイル・レコードが読み取られます。 add 文を呼び出してファイルへの書き込みを実行することもできます。 この文は新規レコードをファイルの末尾に追加します。

シリアル・レコード・プロパティーには、以下のものが含まれます。
fileName
このフィールドの内容はコンテキストによって異なります。 詳細については、『リソース関連とファイル・タイプ』を参照してください。 有効な文字の詳細については、『命名規則』を参照してください。これは必須フィールドです。

可変長レコードをサポートするプロパティー』も参照し てください。

SQLRecord

SQL レコードは、 リレーショナル・データベースへのアクセス時に特殊なサービスを提供するレコードです。

このパーツは、デフォルトでは非固定レコード・パーツですが、 フィールド定義の前にレベル番号が置かれている場合は、固定レコード・パーツになります。

各パーツには、以下のオプション・プロパティーがあります。
tableNames
tableNames のエントリーは、パーツに関連した SQL テーブルを識別します。 複数のテーブルを結合参照することもできますが、 単一の EGL 文を使用して複数のテーブルに書き込みを行うことは制限事項により禁止されています。 個々のテーブル名には、ラベル を関連付けることができます。 ラベルはオプションの短い名前で、SQL 文内のテーブルを参照するために使用します。
defaultSelectCondition
このプロパティーは、 デフォルト SQL 文内の WHERE 文節の一部となる条件を指定します。 WHERE 文節は、SQL レコードを EGL の open または get 文の中で使用するか、 get next または get previous のような文の中で使用する場合に役立ちます。

たいていの場合、SQL デフォルト選択条件は第 2 条件を補足します。この第 2 条件は、SQL レコード内のキー・フィールド値と、SQL テーブルのキー列の関連付けが基礎となります。

tableNameVariables
動的 SQL』で説明されているとおり、 1 つ以上の変数を指定して、実行時に変数の内容によってアクセスするデータベース・テーブルを決定させることができます。
keyItems
各キー・フィールドは、同一レコード内で固有の構造体フィールドでなければなりません。 これらの各フィールドを指定するには、非修飾参照を使用する必要があります。例えば、myRecord.myItem ではなく、myItem を使用します。 (ただし、EGL 文内では、他のフィールドを参照する場合と同じようにキー・フィールドを参照できます。)

詳細については、『SQL サポート』を参照してください。

VGUIRecord

VGUIRecord パーツは、生成可能パーツであり、VGUI レコードの基礎になります。 この VGUI レコードは、 プログラムと特定の Web ページ間の通信を可能にする VGWebTransaction プログラムまたは関数変数です。

タイプ VGUIRecord のパーツのプロパティーには、以下のものがあります。
validatorFunction
EGL 関数のバリデーター関数を指定します。 この関数は、すべてのフィールド・バリデーターが呼び出された後に呼び出されます。 これについては、『EGL を使用してビルドされた Web アプリケーションの検証』で説明します。
runValidatorFromProgram
バリデーター関数が VGUI レコード Bean 内にあるのか、 VGUI レコード Bean からデータを受け取るプログラム内にあるのかを指定します。
commandValueItem
ユーザーがクリックする SUBMIT ボタンの値を入れる VGUI レコード・フィールドを示します。
フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.