データの集計
また、RecordSetを利用することでデータの集計を容易に行えます。RecordSetはデータを管理するためのクラスですが、このクラスを使用する大きな利点として「配列のようなイテレーションが可能」「データの変更をイベントで通知できる」という特徴が挙げられます。
これらの特徴を利用することによって、「RecordGridでデータが操作されたときに自動で合計金額を更新する」といった機能が実装できるようになります。下記のサンプルコードは、RecordSetにイベントを組み込むことで、売上合計(Subtotal)の合計値を自動で更新する処理を組み込んでいます。サンプルコードのコメントを記述している箇所がそれに該当します。
{let summary:int = 0} {let people:RecordSet = {RecordSet (省略), ||RecordsChangedでレコード更新のイベントを捕捉します。 {on RecordsChanged do set summary = 0 ||for文でRecordSetの内容を参照します。 {for record:Record in people do {if record.state != RecordState.deleted then set summary = summary + (record["Subtotal"] asa int) } } {popup-message summary} } } } ||データを表示するRecordGridを定義します。 {let rg:RecordGrid = {RecordGrid height = 3cm, width = 10cm, record-source = people } } {value rg}
このサンプルを実行してデータを更新すると、次のように合計額がポップアップ表示されます。
まとめ
見積デモはこのようなRecordGridとRecordSetの機能を利用してGUIの実装が行われています。
次回は見積デモのドラッグ&ドロップの機能について見ていきたいと思います。