EGL レコード・パーツは、1 つ以上のデータ・パーツから構成される複合データ構造体です。プリミティブおよび dataItem には、それぞれ 1 つのデータ (文字または数値など) のみが入りますが、レコードには、任意の数の他のデータ・パーツを組み合わせて異なるデータをいくらでも入れることができます。レコード・パーツは、ほとんどの場合、データベース・レコードを表すために使用されますが、複数のデータ・パーツをまとめる必要があるときにはいつでも使用することができます。
dataItem と同様、レコード・パーツを基に変数を作成する前に、そのレコード・パーツを定義する必要があります。以下のコードは、3 つの異なるプリミティブから構成されるレコード・パーツを定義します。このレコード・パーツ内の 3 つのフィールドは、それぞれ、プリミティブ変数を作成する方法と同じ方法で定義します。各プリミティブの前の数値については、この演習の後の方で説明します。
record myRecordPartOne type basicRecord 10 myCharField char(30); 10 myDecimalField decimal(7,2); 10 myIntField int; end
また、以下のサンプル・コードのように、dataItem をレコード内のフィールドとして使用することもできます。dataItem パーツをレコード・パーツ定義で使用する前に、その dataItem パーツを定義する必要があります。
record myRecordPartTwo type basicRecord 10 myCharField myCharFieldDataItem; 10 myDecimalField myDecimalFieldDataItem; 10 myIntField myIntFieldDataItem; end
レコード変数は、プリミティブおよび dataItem 変数と同じように作成します。変数名を指定してから、そのデータ・パーツを指定します。
myVariableOne myRecordPartOne; myVariableTwo myRecordPartTwo;
ただし、レコード変数の使用方法は、他の型の変数の使用方法よりもやや複雑です。レコードは構造化データ・パーツであるため、レコードの構造によっては、レコード内のフィールドにアクセスする必要があります。例えば、レコード変数 myVariableOne 内のフィールドに値を割り当てるには、次のようにコードを記述します。
myVariableOne.myCharField = "The chararacter field information"; myVariableOne.myDecimalField = 12.34; myVariableOne.myIntField = 10;
レコード内のそれぞれのフィールドにはレベル番号を付けます。レベル番号を含むレコードを固定レコード といいます。レベル番号を付けずにレコードを作成することもできますが、そのようなタイプのレコードについては、このチュートリアルでは説明しません。レベル番号のないレコードについて詳しくは、ヘルプの「レコード・パーツ」を参照してください。
レベル番号を付けることによって、複雑な構造のレコードを作成できるようになります。レベル番号を使用すれば、フィールドを他のフィールド内にネストして、レコードを構成することができます。例えば、以下のコードでは、Name と Address という 2 つのフィールドを持つレコード・パーツが定義されます。Name フィールドには、FirstName と LastName という 2 つのフィールドがあります。同様に、Address フィールドにも、Street、City、State、および PostalCode という 4 つのフィールドがあります。
record myPersonRecordPart type basicRecord 10 Name; 20 FirstName char(50); 20 LastName char(50); 10 Address; 20 Street char(50); 20 City char(30); 20 State char(25); 20 PostalCode char(20); end
単純なレコードと同様、レコードの構造によっては、複雑なレコード内のフィールドにもアクセスしなければならないことがあります。例えば、以下のコードでは、myPersonRecordPart データ・パーツを基に変数が作成され、その 6 つのフィールドに値が割り当てられます。
myPerson myPersonRecordPart; myPerson.Name.FirstName = "Steve"; myPerson.Name.LastName = "Smith"; myPerson.Address.Street = "123 Maple Street"; myPerson.Address.City = "Any City"; myPerson.Address.State = "Any State"; myPerson.Address.PostalCode = "12345";
以下のステップでは、レコードを使用してデータを操作する Web ページを作成します。
RecordTest
package pagehandlers; PageHandler RecordTest {view="RecordTest.jsp", onPageLoadFunction=onPageLoad} //Variables personInput myPersonRecordPart; personOutput myPersonRecordPart; //Function definitions Function onPageLoad() End Function initializeRecord() personInput.Name.FirstName = "Steve"; personInput.Name.LastName = "Smith"; personInput.Address.Street = "123 Maple Street"; personInput.Address.City = "Any City"; personInput.Address.State = "Any State"; personInput.Address.PostalCode = "12345"; end Function clearAll() move " " to personInput; end Function clearAddress() move " " to personInput.Address; end Function moveRecord() move personInput to personOutput; end End //Record part definition record myPersonRecordPart type basicRecord 10 Name; 20 FirstName char(50); 20 LastName char(50); 10 Address; 20 Street char(50); 20 City char(30); 20 State char(25); 20 PostalCode char(20); end
以下は、ここで挿入したコードに関する技術面での注釈です。
PageHandler で作成されている 2 つのレコード変数がこのビューに表示されることを確認してください。それぞれのレコードは、レコード・パーツ定義におけるレベルによっては展開することができます。このページのレコード全体を使用することも、パーツを選択して使用することもできます。
ページは次のようになります。
これで、PageHandler 内のそれぞれの関数 (onPageLoad() 関数以外) が Web ページ上の該当するボタンにバインドされました。次のステップでは、出力データを入れるために作成したレコードを基に、出力フィールドをページ上に追加します。
これで、複数の変数および関数から構成されるページが作成されました。複数のプリミティブ変数が 1 つのレコードにまとめられているので、それらを、一度に追加することや操作することができます。関連する多数の変数を使用して作業する必要がある場合には、レコードを利用すると、時間を節約することができます。
これで、「演習 1.5: 配列」を開始する準備ができました。