DataTable パーツは、アプリケーションを介して使用可能である表形式のデータの集合で構成されています。他のデータ・パーツとは異なり、各 DataTable パーツは、パーツ独自の EGL ソース・ファイル内で宣言します。 DataTable はメインのパーツです。つまり、このパーツは、他のメイン・パーツを持たないファイル内で定義する必要があり、ファイルと同じ名前でなければなりません。
プログラム、ライブラリー、またはハンドラーから DataTable が見えるようにするには、DataTable を use 文の中に組み込みます。 DataTable をメッセージ・テーブルとしてのみ使用する場合は、プログラムの msgTablePrefix プロパティーを使用して、DataTable をプログラムに接続することができます。
DataTable パーツは必須プロパティー contents を持ち、このプロパティーは、テーブルの値の 2 次元配列を指定します。DataTable のプロパティーと、このトピックの後半にある例を参照してください。
contents プロパティーで指定するデータの各列では、変数宣言を含める必要があります。これらの変数宣言は、構造化レコード (レコード・パーツを参照) 内にあるような、構造体フィールドです。構造体レコードは常に固定長です (例えば、未定義長の STRING 変数は許可されない、など)。 数値接頭部を割り当てることによって、これらの宣言を副構造化できます。 そうしなかった場合、EGL はすべてのフィールドが同じレベルであると仮定します。 副構造体フィールドではなく、構造体の最上位レベルのフィールド (最下位レベル番号を持つ) のみのために内容を指定することができます。 詳しくは、このトピックの後半にある例を参照してください。

strTest = myDataTable.column3[4];
このサンプルでは、STRING 変数 strTest に、データ・テーブルの 3 番目の列、4 番目の行の値が含まれています。
DataTable myErrorMessages type MsgTable
{ shared = yes }
msgNum INT;
msgText char(30);
{ contents = [
[ 101, "File not found" ] ,
[ 102, "Read error" ] ,
[ 103, "Write error" ] ]
}
end
Function displayError(index INT in)
strTest =
formatNumber(myErrorMessages.msgNum[index]) +
" " +
myErrorMessages.msgText[index];
sysLib.writeStdout(strTest);
end
102 Read error
DataTable myDataTable type basicTable
{ shared = yes }
10 myColumn1 CHAR(10);
15 Column1A CHAR(5);
15 Column1B CHAR(5);
10 myColumn2 CHAR(10);
10 myColumn3 CHAR(10);
{ contents = [
[ "ABCDEFGHIJ", "row1 col2", "row1 col3" ] ,
[ "KLMNOPQRST", "row2 col2", "row2 col3" ] ,
[ "1234567890", "row3 col2", "row3 col3" ] ] }
end
writeStdOut(myDataTable.Column1B[1]); // FGHIJ の表示
ほとんどの環境で、実行時に DataTable の内容を変更することができます。 実行時に行われた変更は、DataTable にアクセスするすべてのプログラムから見ることができ、 その変更は、その DataTable がアンロードされるまで維持されます。 変更を行えるか、および、その実行単位のほかのプログラムからその変更を見ることができるかは、ターゲット・システムおよび shared プロパティーに影響を受けます。 DataTable のアンロードは、ターゲット・システム、および resident プロパティーによって影響を受けます。 詳しくは、DataTable のプロパティーを参照してください。
DataTable myConstants type basicTable
10 myConstant1 INT;
10 myConstant2 CHAR(10);
{contents = [ [ 0, ""]]} // single row with initial values
end
次に、以下のコード例の場合は、実行時にデータベースまたはファイルから
DataTable を更新することもできます。get constantInfo;
myConstants.myconstant1[1] = constantInfo.myconstant1;
myConstants.myconstant2[1] = constantInfo.myconstant2;
プログラムでの定数の宣言でこの技法を使用する利点は、
データの変更時に必要なのがデータベースの更新のみになります。
各プログラムで定数を変更する必要はありません。このように DataTable を使用すると、
環境によっては、ライブラリーまたはデータベースを使用するよりも高いパフォーマンスを
提供することができます。例えば、CICS® の場合、CICS 領域の始動時に DataTable を常駐として定義し初期化できることがあります。| プラットフォーム | 問題 |
|---|---|
| COBOL 生成 | DataTable 名の最大長は 7 文字です。 |
| JavaScript 生成 | DataTable はサポートされていません。 |
| JSF ハンドラー | msgTable 型の DataTable でのメッセージの挿入がサポートされています。最初の挿入は {0} です。 |
| テキスト UI | msgTable 型の DataTable でのメッセージの挿入はサポートされていません。 |
| Web トランザクション | msgTable 型の DataTable でのメッセージの挿入がサポートされています。最初の挿入は {1} です。 |