Curl Global Community
RecordSet.batch-events?=true 時でもRecordModifiedイベントが発行されてしまう - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: RecordSet.batch-events?=true 時でもRecordModifiedイベントが発行されてしまう (/showthread.php?tid=1022)



RecordSet.batch-events?=true 時でもRecordModifiedイベントが発行されてしまう - umemura - 12-25-2013

RecordSet に対して RecordModified イベントをハンドリングして、
あるレコードの変更に付随した処理が流れるようにしています。

しかし、この処理は、画面の初期処理では流したくないので、
ユーザーがグリッド内を操作したときと、プログラム内でレコードの値を修正したときとで、
その変更に付随する処理を行うかどうかを切り替えるために、
RecordSet.batch-event?=true を設定して、RecordModified が発行されないようにしています。

しかし、下記のコードでは、RecordModified が発行されてしまっており、
画面の初期処理の中でも付随処理が走ってしまっています。
これはなぜでしょうか。

Code:
def r = {rs.select-one}
{with rs.batch-events?= true do
    set r["select"] = true
}


他の batch-events? では、正常にRecordModifiedが抑止されていおり、
なぜここだけうまくいかないのかがわかりません。


RE: RecordSet.batch-events?=true 時でもRecordModifiedイベントが発行されてしまう - umemura - 12-25-2013

batch-event?=true を指定していてもRecordModifiedが発生する原因は、
batch-events?=true の間に変更された項目が、1つだけだったから、ということのようです。

batch-events? がfalse に戻った際に、それまでにたまったイベントがひとつだけであれば、
RecordsBulkChanges ではなく、RecordModified が発行される、ということのようですね。

ヘルプにも、下記のように記載されていました。
 このフラグが true の間は、RecordSet 自体で RecordSetEvent を発生できなくなります。
 このフラグが false に戻されると、
 この期間にレコードセットの状態に起こった変化を表す 1 つの RecordsChanged が発生します。
 これは通常 (常時ではありません)、RecordsBulkChanges です。


初期処理の後にイベントを追加するか、
業務画面のフィールドにフラグをもって、そちらを参照して、
付随処理を流すかどうかを判断するようにしてみます。