JavaScriptによるKintone上の値変更検出

Kintoneでの値変更をJavaScriptでどう検知すべきか調査した結果を示した。

編集後の値で処理を施す場合

以下の change.js の作りで、console.log している箇所で newValue を使って処理すれば良い。

※『建物名』列の変更を検知したい場合の例。任意のフィールドコード名に書き換えること。

変更前の値を使いたい場合

変更前の値を使いたい場合は工夫が要る。

オンライン検索すると『event.changes.field.value』で比較が出来るという情報もあったが、嘘だった。『event.changes.field.value』には変更後の値しか入らないので注意して欲しい。

2025年3月9日現在では change のイベントで変更前の値は取得出来ない。ではどうするか。2種類の方式が考えられる。

1.変更前の値を保存しておき変更時に比較

レコードの作成/編集画面を表示した時に変更前の値を oldValue 変数に取得しておき、変更時に利用する方法。

これは無駄な列を追加しない分データ構造を美しく保てるメリットがあるものの、別画面での情報を使うことになるのがコードの独立性上美しくない。

2.変更前の値保存用の列を用意し比較

ユーザーが変更出来ない列『建物名変更前』を設けておき、編集時に値を退避しておく方法。

これは「1」の方法とは対照的で、無駄な列を追加するためデータ構造は汚くなるデメリットがあるが、処理は編集画面のみで完結するためコードの独立性上美しい。

所感

方法「1」も「2」も甲乙つけがたいメリデメがあるが、Kintoneがユーザー部門向けのサービスであることを考えると、分かりやすく御しやすい「2」の方式をオススメする。

ただ、使う側にとって嬉しいのはBefore-Afterの変更前・変更後情報両方を event 変数が持ちイベントの性質上求められ易い措置がとれるKintoneの仕様変更な気がする。処理速度に響きそうなため現実的でないかな。