11-13-2013, 09:07 AM,
|
|||||
|
|||||
修正したレコードだけを抽出したい
現在、マスタメンテのような処理を考えており、
マスタ上の全件レコードを取得し、グリッドで直接、修正を行い、登録をしたいと考えています。 登録時は、現在クライアント側に持っているデータをすべて送信し、 テーブルごとデータを入れ替える(デリートインサート)方法もあると思うのですが、 出来れば、「修正したレコード」のみを抽出して登録したいと思っています。 当初、Record.state を参照することで判断しようかなと思っていたのですが、 Record.stateは、対象のレコードに対して、どんな修正が発生しても 状態を変更してしまうという認識なので、 たとえば、削除フラグ用のカラムでチェックボックスをON or OFF しても、 Recotd.state は変更させたくないという場合には対応できないと思っています。 このような場合つまり、「修正とみなしたくない修正」がある場合は、 どのような実装が考えられますか? アイディアをお持ちのかたがいらっしゃったら教えてください。 |
|||||
11-13-2013, 03:51 PM,
|
|||||
|
|||||
RE: 修正したレコードだけを抽出したい
最初は、RecordModified を利用すればできるかな、と思っていたのですが、
RecordSet.batch-events? =true 時の修正はRecordModified が発生しないため、 不十分だということに気が付きました。 RecordsBulkChanges のフィールドで、変更が発生したレコードの一覧が取れるとうれしいのですが・・・。 もしアイディアをお持ちの方は教えてください。 Code: {def fields:RecordFields = |
|||||
11-14-2013, 01:11 PM,
|
|||||
|
|||||
RE: 修正したレコードだけを抽出したい
独自のレコードセットを作成すればなんとかなりそう、なのかな?
正直、あまり RecordSet には手を入れたくないところです。 独自クラスを使わなくて済む方法、または、 今回のように独自のRecordSet を作成して利用する際の注意点などをご存知のかたは教えてください。 Code: {define-class public CustomRecord {inherits BasicRecord} |
|||||
11-15-2013, 11:40 AM,
|
|||||
|
|||||
RE: 修正したレコードだけを抽出したい
上記CustomRecordSet の実装ですが、new-recordをオーバーライドするより
allocate-recordをオーバーライドするほうがいいかもしれませんね。 詳細まではわかりませんが、ヘルプにはそうするように記述がありますので。 |
|||||
11-15-2013, 11:52 AM,
|
|||||
|
|||||
RE: 修正したレコードだけを抽出したい
Yuhki さん、ありがとうございます。
BasicReocrdSet のヘルプをよく見ていませんでした。すいません。 new-record のオーバーライドでは、レコードセットに対して RecordData を追加しても カスタマイズしたレコードを返してくれないので、どうすればよいか悩んでいたのですが、 allocate-record をオーバーライドするようにすれば解決しました。 new-record の内部で、allocate-record を呼んでいるから、という認識です。 |
|||||
11-20-2013, 01:41 PM,
|
|||||
|
|||||
RE: 修正したレコードだけを抽出したい
「TRUEの値をFALSEに修正したけど、またTRUEに修正した」場合に、
元に戻っているのだから、「変更されたレコード」としては扱いたくない、 というケースでは、スナップショットを取っておいて、比較するほうが簡単な気がしてきました。 Libライブラリの、RecordSetUtil.clone を使って、レコードセットのクローンを作成しています。 (厳密には、レコードフィールドの増減なども判別する必要がありそうですが・・・) Code: {import * from COM.CURL.LIB.DATA-ACCESS} |
|||||
11-21-2013, 09:35 AM,
(This post was last modified: 11-21-2013, 09:37 AM by Yuhki.)
|
|||||
|
|||||
RE: 修正したレコードだけを抽出したい
あまり知られてませんが、RecordSet内のRecordは
commit時の値(revert時に戻す値)を内部的に保持しており、 getメソッドの引数 pending? をfalseにすることでその値を 取得することができます。 {record.get "hoge", pending? = false} または record["hoge", pending? = false] 編集中のレコードを値の比較によって抽出する場合、別の目的でcommitを使用していなければ これを使ったほうがよさそうな気がします。 |
|||||
11-22-2013, 06:01 PM,
|
|||||
|
|||||
RE: 修正したレコードだけを抽出したい
おお、pending? で Record.state=ReocrdState.original だったときの値を保持してくれているのですね!
知りませんでした。 たしかにヘルプにも、そのように記載されていますね。 TextField で、ValueFinished 時に、前の値と比較したい場合が良くあるので、 同じような機能があればうれしいのになぁ。 |
|||||
« Next Oldest | Next Newest »
|
Users browsing this thread:
3 Guest(s)
3 Guest(s)