データを連携しよう!


データモデルのRecordSetクラス

サンプル・アプリケーションは、登録ボタンを押すとデータモデルのRecordSetクラスに登録されるようになっています。また、一覧表タブに表示されている一覧表にも同じRecordSetクラスが使われています(図8)。このようにRecordSetクラスは、プレゼンテーション・レイヤで共通に使用するのに便利なクラスです。RecordSetクラスの基本的な構造を解説しましょう。

プロジェクト

図8 サンプル・アプリケーションの一覧表タブ

RecordSetクラスはデータをレコードとフィールドで編成し、データの変更に関するイベントを管理する機能を持っています。つまり、データベースのテーブルと同じような機能が備わっています。関連する重要なクラスには、RecordFieldsクラス、RecordDataクラスなどがあります。RecordFieldsクラスはRecordSetクラスのフィールドを定義するために使用されます。

RecordFieldsクラスは、コード15のように複数のRecordFieldオブジェクトで構成され、データフィールドの名前を指定するname、フィールドのデータを表示する際に使う文字列を指定するcaption、フィールドのデータ値のDomain(型)を指定するdomainなどから構成されます。

コード15 複数のRecordFieldオブジェクトで構成されるRecordFieldsクラス
(recordset.scurl)

最初のRecordFieldでは、フィールドの名前を「name」、表示するときの文字列を「氏名」、データのDomain(型)を「String」と設定しています。これ以降も同じ構成でRecordFieldを設定しています。これらはちょうどデータベースのテーブルを定義するのとほぼ同じです。RecordSetクラスはデータベースのテーブルと同じような使い方をCurlアプリケーション内で実現しています。また、実際に使用されているデータは、コード16のようにRecordDataクラスを使用しています。

コード16 RecordDataクラスに格納されたデータ
(RecordSet-and-RecordGrid.scurlの28行目からを抽出)

コード16のようにRecordSetクラスにRecordDataクラスを使用してデータを静的に設定することもできますが、通常はWebサーバ(またはファイルなど)からデータを取得して設定する方が一般的です。その場合には、コード17のCommandButtonクラスの{on Action do …}にあるように、RecordSetクラスのappendメソッドなどを使用してダイナミックにデータを追加します。

コード17 RecordSetクラスのappendメソッドでダイナミックにデータを追加
(layout.scurl)

また、このほかにもRecordSetクラスにはデータベースと同じようにcommitメソッド(コミット)、revertメソッド(復帰)、delete-all(削除)など、たくさんのメソッドが用意されています。詳しくは「Curl IDE ドキュメント(開発環境CDEの中に入ってます)」の「目次」タブ-「Curl開発者ガイド」-「データアクセス」および「APIリファレンス」の「RecordSet」クラスを参照してください。