>Notified? とは別のフィールド(HiddenNotifiedなど)を用意して、グリッドにカラムとして表示しない、というのも手かもしれませんね。
レコードから更新前の値を取り出す方法を書いてみたものの、そちらの方法の方が安全確実でよさそうですね
ある任意の状態でのNotified?の値をずっと参照したいというケースでも、そのタイミングでHiddenNotifiedへ転記すれば済みますし。
試しに隠しフィールドを使う方法でコードを書いてみましたがこんな感じでしょうか?
Code:
{include "../../default/support/data-long.scurl"}
|| HiddenNotified? フィールドを追加したレコードセットを生成するプロシージャ
{define-proc {make-new-recordset src-rs:RecordSet}:RecordSet
def src-field-name = "Notified?"
def dup-field-name = "HiddenNotified?"
|| 新規レコードセット作成用にレコードフィールド一覧の配列を作成
let record-field-array:{Array-of RecordField} = {new {Array-of RecordField}}
{for rf:RecordField in src-rs.fields do
{record-field-array.append rf}
}
|| レコードフィールド一覧配列に追加するフィールドを追加
{record-field-array.append {RecordField dup-field-name, domain = bool}}
|| レコードフィールド一覧配列より新規レコードセットを作成
let new-records:RecordSet =
{RecordSet
{RecordFields
{splice record-field-array}
}
}
|| 新規レコードセットにデータを複製
{for src-rec:Record in src-rs do
let new-rec:Record = {new-records.new-record}
{for src-rf:RecordField in {src-rec.record-set.fields.to-Iterator} do
def field-name = src-rf.name
def field-val = {src-rec.get field-name}
{new-rec.set field-name, field-val}
|| 複製対象のフィールドの場合は複製先フィールドにも値をセット
{if {field-name.equal? src-field-name} then
{new-rec.set dup-field-name, field-val}
}
}
{new-records.append new-rec}
}
{return new-records}
}
|| HiddenNotified? フィールドを追加したレコードセットを生成
{let new-records:RecordSet = {make-new-recordset records}}
{define-proc public {notified rg:RecordGrid, r:Record, i:int}:#Background
|| "Notified?" ではなく、隠しフィールド "HiddenNotified?"を参照して背景色を設定
{if {r.compare-field "HiddenNotified?", true} == 0 then
{return {Background.from-string "silver"}}
else
{return null}
}
}
{RecordGrid
record-source = new-records,
height = 10cm,
width = 13cm,
row-background-spec = notified,
|| record-source 内のフィールドに対するカラムの自動生成を無効に設定
automatic-columns? = false,
|| 表示するカラムを明示的に生成
{RecordGridColumn "User ID"},
{RecordGridColumn "Last"},
{RecordGridColumn "First"},
{RecordGridColumn "City"},
{RecordGridColumn "State"},
{RecordGridColumn "Date"},
{RecordGridColumn "Time"},
{RecordGridColumn "Rank"},
{RecordGridColumn "Notified?"}
}