演習 1.4: レコード

EGL レコード・パーツは、1 つ以上のデータ・パーツから構成される複合データ構造体です。プリミティブおよび dataItem には、それぞれ 1 つのデータ (文字または数値など) のみが入りますが、レコードには、任意の数の他のデータ・パーツを組み合わせて異なるデータをいくらでも入れることができます。レコード・パーツは、ほとんどの場合、データベース・レコードを表すために使用されますが、複数のデータ・パーツをまとめる必要があるときにはいつでも使用することができます。

EGL レコード・パーツの型

mqRecord
この型のレコードは、WebSphereMQ へのアクセスに使用します。
sqlrecord
この型のレコードは、SQL によってリレーショナル表へのアクセスに使用します。
indexedRecord
この型のレコードは、索引付きファイルへのアクセスに使用します。
serialRecord
この型のレコードは、順次ファイルへのアクセスに使用します。
basicRecord
これは、内部データ処理に使用する汎用レコードです。basicRecord 型のレコードは、データ・ディレクトリー外部にアクセスすることができません。この演習では、basicRecord について重点的に説明します。

レコード・パーツの定義

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";

EGL レコード・パーツの利点

PageHandler における EGL レコードの使用

以下のステップでは、レコードを使用してデータを操作する Web ページを作成します。

  1. プロジェクト・エクスプローラー・ビューで、「EGLWeb」プロジェクトをクリックして選択する。
  2. メニュー・バーから「ファイル」>「新規」>「Faces JSP ファイル」をクリックする。新規 Faces JSP ファイル・ウィザードが開きます。
  3. ファイル名」フィールドに次のファイル名を入力する。

    RecordTest

  4. ページ・テンプレートから作成」チェック・ボックスを選択する。
  5. 次へ」をクリックする。
  6. ページ・テンプレート・タイプ」の下で、「ユーザー定義ページ・テンプレート」をクリックする。
  7. サムネール」の下で「A_gray.htpl」テンプレートをクリックする。
  8. 終了」をクリックする。新規ファイルがプロジェクトに追加され、そのファイルがエディターで開きます。
  9. 新規ファイルで、デフォルト・テキストの「Place your page content here.」を削除する。
  10. 削除したテキストの代わりに、Record Variables と入力して、Enter キーを押す。
  11. ページを右クリックして、「ページ・コードの編集」をクリックする。ページ・コード・ファイルが開きます。
  12. ページ・コード・ファイル内のすべてのコードを削除して、代わりに以下のコードを入力する。
  13. 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

    以下は、ここで挿入したコードに関する技術面での注釈です。

  14. ファイルを保存して閉じる。

ページでの変数の表示

  1. RecordTest.jsp ページに戻る。
  2. ページ・データ・ビューで、「RecordTest」を展開する。

    PageHandler で作成されている 2 つのレコード変数がこのビューに表示されることを確認してください。それぞれのレコードは、レコード・パーツ定義におけるレベルによっては展開することができます。このページのレコード全体を使用することも、パーツを選択して使用することもできます。

  3. ページ・データ・ビューから、personInput レコード関数をページのボタンへドラッグする。「挿入のコントロール」ウィンドウが開きます。
  4. 「挿入のコントロール」ウィンドウで、 「既存レコードの更新」をクリックする。
  5. オプション」をクリックする。
  6. 「オプション」ウィンドウで、「実行ボタン」チェック・ボックスをクリアする。
  7. 「削除ボタン」チェック・ボックスをクリアする。
  8. OK」をクリックする。
  9. 終了」をクリックする。レコード内のフィールドがページ上に表形式で表示されるようになります。
  10. パレット・ビューの「Faces コンポーネント」ドロワーから、「コマンド - ボタン (Command - Button)」をページの「{Error Messages}」フィールドの左側へドラッグする。
  11. 新規ボタンをクリックして選択する。
  12. プロパティー・ビューで「表示オプション」タブをクリックする。「表示オプション」タブが表示されない場合には、作成したボタンが選択されていることを確認してください。
  13. プロパティー・ビューの「表示オプション」タブで、「ボタンのラベル」フィールドに Initialize record と入力する。
  14. ステップ 10 から 13 をさらに 3 回繰り返して、最初のボタンの横に以下のラベルが付いた 3 つのボタンを作成する。

    ページは次のようになります。

    RecordTest.jsp ページの外観

  15. ページ・データ・ビューで、「アクション」を展開する。このフォルダーには PageHandler に追加した 4 つの関数が入っています。
  16. initializeRecord() 関数をページ・データ・ビューから Web ページの「Initialize record」ボタンへドラッグする。
  17. clearAll() 関数をページ・データ・ビューから Web ページの「Clear all」ボタンへドラッグする。
  18. clearAddress() 関数をページ・データ・ビューから Web ページの「Clear Address」ボタンへドラッグする。
  19. moveRecord() 関数をページ・データ・ビューから Web ページの「Move record」ボタンへドラッグする。

    これで、PageHandler 内のそれぞれの関数 (onPageLoad() 関数以外) が Web ページ上の該当するボタンにバインドされました。次のステップでは、出力データを入れるために作成したレコードを基に、出力フィールドをページ上に追加します。

  20. 作成したばかりの 4 つのボタンのすぐ下をクリックし、Enter キーを押してブランク行を挿入する。
  21. ページ・データ・ビューから、personOutput レコード関数をページ上のボタンへドラッグする。「コントロールの挿入」ウィンドウが再び開きます。
  22. 既存レコードの表示 (読み取り専用)」をクリックする。
  23. 終了」をクリックする。出力フィールドを含む表が、ページ上の入力フィールドおよびボタンの下に表示されます。
  24. ページを保管する。

ページのテスト

これで、複数の変数および関数から構成されるページが作成されました。複数のプリミティブ変数が 1 つのレコードにまとめられているので、それらを、一度に追加することや操作することができます。関連する多数の変数を使用して作業する必要がある場合には、レコードを利用すると、時間を節約することができます。

  1. プロジェクト・エクスプローラー・ビューで、「RecordTest.jsp」ファイルを右クリックし、ポップアップ・メニューから「実行」>「サーバーで実行」をクリックする。
  2. Web ブラウザーで、「Initialize record」ボタンをクリックする。入力フィールドにレコードのデフォルト・データが自動的に表示されます。
  3. 入力フィールドに別の情報を入力してボタンをクリックし、ページをテストする。

これで、『演習 1.5: 配列』を開始する準備ができました。

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.