LoginSignup
1
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-09-21

今回は、「フィールド値変更イベント」で計算フィールドと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で「フィールド値変更時イベント」を使って計算する場合は「計算フィールド」が絡む計算をしないようにしましょう。

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

1
0
0

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
  3. You can use dark theme
What you can do with signing up
1
0