CalculatedRecordSetは、LocalRecordGridにセル間で計算する機能を付加します。セルの値が変更されると、値を参照しているセルの値も自動的に再計算されます。
サンプル
http://developers.curlap.com/curl/curl-ext/hp2/calculatedemo.curl
各行の値の合計値を右端の列に表示しています。
使い方
RecordSetを作成する代わりにCalculatedRecordSetのインスタンスを作成します。そのコンストラクタにはCalculatedFieldManagerクラスのインスタンスを渡します。以下の部分です。
def rs1 = {CalculatedRecordSet manager, rf1, |
CalculatedRecordSetのコンストラクタは以下のようになっています。
{default |
計算ロジックを定義します。CalculatedRecordSetから取り出したレコードをCalculatedRecordにキャストして、set-calculated-fieldメソッドに引数として渡します。
{for record in rs1 do def rec = record asa CalculatedRecord {rs1.set-calculated-field rec, rf1[“row-sum”], update-proc = sum-proc, {rs1.get-or-create-calculated-field rec, rf1[“a”]}, {rs1.get-or-create-calculated-field rec, rf1[“b”]}, {rs1.get-or-create-calculated-field rec, rf1[“c”]}} } |
set-calculated-fieldメソッドの引数は以下のようになっています。
{set-calculated-field ||計算処理をセットするレコードです。 record:CalculatedRecord, ||計算処理をセットするフィールドです。 record-field:RecordField, ||計算処理を定義するプロシージャ。CalculatedFieldUpdateProcTypeは ||{proc-type {CalculatedField}:void}と定義されていて、 ||これが呼び出される際にここに渡される引数は、第二引数で指定したフィールドです。 update-proc:#CalculatedFieldUpdateProcType = null, ||レコードやフィールドが削除されるとき、自動的に削除されてもよいかどうかを設定します。 weak-predecessors?:bool = false, ||変更を検知するCalculatedFieldを指定します。 …:CalculatedField } |
ここでは…引数をget-or-create-calculated-fieldの戻り値として渡しています。get-or-create-calculated-fieldは、引数で与えられるレコードとフィールドに関連付けたCalculatedRecordFieldを、必要であれば作成して返すメソッドです。
get-or-create-calculated-fieldメソッドの引数は以下のようなものです。
{get-or-create-calculated-field record:CalculatedRecord, || 関係するレコード record-field:RecordField || 関係するフィールド } |