前の演習では、EGL で最も単純なデータ・パーツであるプリミティブについて学習しました。この演習では、より複雑なデータ・パーツである dataItem について学習します。それぞれの dataItem は、単一のプリミティブを基にしていますが、追加 EGL プロパティーを含みます。それらのプロパティーを使用して、特定の目的のため dataItem を構成します。例えば、数値プリミティブを基に dataItem を定義して、データ・パーツの最小値と最大値を指定する range プロパティーを追加することができます。このように、dataItem を利用すると、アプリケーションにおけるプリミティブ変数の使用方法をより詳細に制御できるようになります。
EGL で事前定義されているプリミティブとは異なり、dataItem パーツを基に変数を作成するには、その前に、dataItem パーツを定義する必要があります。dataItem パーツを定義するには、その名前、プリミティブ型、および EGL プロパティーを指定します。例えば、currency = yes プロパティーを含み、num プリミティブ型に基づく、myCurrencyDataItem という名前の dataItem を定義して、dataItem が通貨値として表示されるようにするには、以下のようにコードを記述します。
DataItem myCurrencyDataItem num(7,2)
{currency = yes}
end
一度 dataItem パーツを定義したら、前の演習でプリミティブを基に変数を作成したのと同じように、その dataItem パーツを基に変数を作成することができます。次のようにコードを記述すると、myCurrencyDataItem dataItem を基に customerAccountBalance という名前の変数が作成されます。
customerAccountBalance myCurrencyDataItem;
それから、この変数を、プリミティブを基に作成した変数と同じように使用することができます。
一般的には、プリミティブよりも dataItem を使用する方が望ましいコーディングの手法であるといえます。なぜなら、dataItem を使用すれば、アプリケーションにおけるデータの使用方法を標準化することができるからです。プリミティブではなく dataItem の使用を勧める理由は以下のとおりです。
多くの場合、dataItem はデータ・ディクショナリー と呼ばれる単一のファイル内で定義されます。すべての dataItem を単一のファイルにまとめると、それらを簡単に管理してインポートし、他の EGL ファイルで使用することができます。以下のステップでは、データ・ディクショナリーを作成して、そのデータ・ディクショナリーでいくつかの dataItem パーツを定義します。
パッケージに「data」と表示されない場合には、「参照」、「data」、「OK」を順にクリックしてください。
dictionary
「新規 EGL パーツ」ウィンドウは次のようになります。

dataItem booleanTest char(1)
{value = "y",
displayName = "Test boolean field",
isBoolean = yes}
end
dataItem charTest char(22)
{value = "Mrs. Lewis",
displayName = "Last name",
inputRequired = yes}
end
dataItem dateTest char(10)
{displayName = "Test data field",
dateFormat = "mm/dd/yyyy",
value = "10/01/1952"}
end
dataItem numericCurrencyTest decimal(9,2)
{value = 44444.44,
currency = yes,
numericSeparator = yes,
validValues = [[5, 55555]]}
end
通常、データ・ディクショナリーはアルファベット順に並べますが、この例では dataItem が 4 つしかないので、その必要はありません。このコードでは、以下の dataItem パーツが定義されます。
以下のステップでは、PageHandler および Web ページを作成して、作成したばかりの dataItem を使用してみます。
DataItemTest
package pagehandlers;
import data.*;
PageHandler DataItemTest
{view="DataItemTest.jsp", onPageLoadFunction=onPageLoad}
//Variables
inputChar charTest;
outputChar charTest;
inputDate dateTest;
outputDate dateTest;
inputCurrency numericCurrencyTest;
outputCurrency numericCurrencyTest;
inputBoolean booleanTest;
outputBooleanMessage char(45);
//Function definitions
Function onPageLoad()
End
Function moveTestValues();
outputChar = inputChar;
outputDate = inputDate;
outputCurrency = inputCurrency;
if (inputBoolean == "Y")
outputBooleanMessage = "Check box is checked. True returned.";
else
outputBooleanMessage = "Check box is not checked. False returned.";
End
End
End
以下は、ここで挿入したコードに関する技術面での注釈です。
「メッセージ・タグ付き入力フィールド」を選択すると、ページのそれぞれの入力フィールドの横にエラー・メッセージ・フィールドが追加されます。
Copy input to output
前の演習と同じく、最後のステップでは PageHandler 内の関数をボタンにバインドします。
ページは次のようになります。

このページの入力変数と出力変数には、dataItem パーツ定義に割り当てられたプロパティーに基づいて割り当てられている EGL プロパティーがあります。例えば、inputChar 変数は、inputReqired = yes プロパティーを持つ charTest dataItem パーツを基にしています。このプロパティーにより、inputChar 変数は、それが追加されるあらゆる Web フォームで必須フィールドとして設定されます。以下のステップでは、ページをテストして、dataItem パーツ定義に割り当てられた EGL プロパティーが DataItemsTest.jsp ページに追加されたフィールドにどのような影響を与えるかを確認します。
Web ページが Web ブラウザーで開きます。入力フィールドおよび出力フィールドに変数のデフォルト値が自動的に表示されます。
charTest dataItem の EGL プロパティーは inputRequired = yes なので、フィールドの横のエラー・メッセージ・フィールドに、「必須フィールドに入力されていません - 再度入力してください。(No input received for required field - enter again.)」というメッセージが表示されます。
numericCurrencyTest dataItem は EGL validValues プロパティーを [[5, 55555]] に設定します。これは、この dataItem を基に作成される変数の値を 5 から 55,555 までに制限します。「OutputCurrency」フィールドの横のエラー・メッセージ・フィールドに、「入力は、定義されている有効な値のリストの範囲外です - 再度入力してください。(Input not within defined list of valid values - enter again.)」というメッセージが表示されます。
入力フィールドが出力フィールドにコピーされます。
これで、『演習 1.4: レコード』を開始する準備ができました。