10-22-2013, 12:56 PM
レコードが変更されるたびに合計を計算する処理を考えたのですが、
RecordModified イベントを自分で生成して発行する際にエラーになります。
なぜでしょうか。
■エラー内容
アサーション失敗: 'not self.source.batch-events?'の為、例外Errorで停止
batch-events?=true の状態でレコード変更イベントは発行できないということのようですね。
{rs.handle-event {RecordModified new-r}} の一文を、with rs.batch-events? = true doの外にだしたら
エラーにならなくなりました。
確かに、「レコード変更イベントをまとめよう」としているのに、
変更イベントを投げたらダメよ、というのは理解できます。
RecordModified イベントを自分で生成して発行する際にエラーになります。
なぜでしょうか。
■エラー内容
アサーション失敗: 'not self.source.batch-events?'の為、例外Errorで停止
Code:
{let rs:RecordSet =
{RecordSet
{RecordFields
{RecordField "First", domain = String},
{RecordField "Last", domain = String},
{RecordField "Age", domain = int}
},
{RecordData First = "John", Last = "Smith", Age = 25},
{RecordData First = "Jane", Last = "Smith", Age = 29},
{RecordData First = "Jane", Last = "Jones", Age = 28}
}
}
{value
{RecordGrid
height= 2in,
record-source = rs
}
}
{def tf = {TextField}}
{HBox "年齢合計", tf}
{do
{rs.add-event-handler
{on rm:RecordModified do
let sum:int = 0
{for r in rs do
set sum = sum + r["Age"] asa int
}
set tf.value = {String sum}
}
}
}
{CommandButton
label = "年齢合計計算",
{on Action do
{with rs.batch-events? = true do
def new-r = {rs.new-record}
{rs.append new-r}
set new-r["First"] = "John"
set new-r["Last"] = "Smith"
set new-r["Age"] = 25
{rs.handle-event {RecordModified new-r}}
}
}
}
batch-events?=true の状態でレコード変更イベントは発行できないということのようですね。
{rs.handle-event {RecordModified new-r}} の一文を、with rs.batch-events? = true doの外にだしたら
エラーにならなくなりました。
確かに、「レコード変更イベントをまとめよう」としているのに、
変更イベントを投げたらダメよ、というのは理解できます。