今回は、「フィールド値変更イベント」で計算フィールドとJavaScriptカスタマイズの計算を一緒にしないようにしましょう!というお話です。
ためしに、アプリを作ってみましょう。
アプリの準備
数値フィールドのA,Bに値を入力したら、
計算フィールドCと数値フィールドDに自動的に計算値が入る。という仕組みにします。
フィールド種類 | フィールドコード | 計算式 |
---|---|---|
数値 | A | |
数値 | B | |
計算 | C | A + 10 |
数値 | D | JavaScriptで B+C を計算する |
JavaScriptの準備
計算フィールドはフィールド値変更時イベントで指定できないので、
数値フィールドのA,Bの値変更時に計算をすることにします。
kintone.events.on(
[
"app.record.create.change.A",
"app.record.create.change.B",
"app.record.edit.change.A",
"app.record.edit.change.B",
],
(event) => {
// D = B + C
event.record.D.value =
Number(event.record.B.value) + Number(event.record.C.value);
return event;
}
);
動かしてみましょう👀
動かしてみると、こんな感じになると思います。
数値フィールドAの値を更新しても、
最終的な計算結果の数値フィールドDの値が更新されません。
何故!?
先程のJavaScriptのコードの
// D = B + C
の上辺りに、
console.log(event);
を忍ばせてから、Aの値を10から15に変更してみましょう。
すると
計算フィールドの計算よりも先に「フィールド値変更時イベント」が動いている!?
と思って、JavaScript計算の方を先に動かす作戦でやってみても
のような変な計算結果になって・・・・だめでした。
計算フィールドの方が先とか後とかではなくて、「フィールド値変更時イベント」とは非同期に動いています。
どちらが先とかはわからないですね。
というわけで、JavaScriptで「フィールド値変更時イベント」を使って計算する場合は「計算フィールド」が絡む計算をしないようにしましょう。
※ボタンクリックで発火するようなイベントのときは計算フィールド使って計算しても大丈夫です✨