search
LoginSignup
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

kintoneのフィールド値変更時イベントで計算フィールドとJavaScriptカスタマイズの計算を一緒にしちゃだめ!という話

今回は、「フィールド値変更イベント」で計算フィールドとJavaScriptカスタマイズの計算を一緒にしないようにしましょう!というお話です。

ためしに、アプリを作ってみましょう。

アプリの準備

数値フィールドのA,Bに値を入力したら、
計算フィールドCと数値フィールドDに自動的に計算値が入る。という仕組みにします。

フィールド種類 フィールドコード 計算式
数値 A
数値 B
計算 C A + 10
数値 D JavaScriptで B+C を計算する

image.png

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に変更してみましょう。

すると

image.png

計算フィールドの計算よりも先に「フィールド値変更時イベント」が動いている!?
と思って、JavaScript計算の方を先に動かす作戦でやってみても

image.png

のような変な計算結果になって・・・・だめでした。
計算フィールドの方が先とか後とかではなくて、「フィールド値変更時イベント」とは非同期に動いています。
どちらが先とかはわからないですね。

というわけで、JavaScriptで「フィールド値変更時イベント」を使って計算する場合は「計算フィールド」が絡む計算をしないようにしましょう。

※ボタンクリックで発火するようなイベントのときは計算フィールド使って計算しても大丈夫です✨

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1
Help us understand the problem. What are the problem?