概要
kintoneの計算項目(および文字列1行に計算式を設定したフィールド)は便利ですが、計算式プラグインの計算式では使用しないでください。
このトピックでは、その理由と、特に「一括計算」機能での注意点も含めて解説します。
なぜ使ってはいけないの?
計算項目は、kintoneの内部REST APIを使って自動的に値が計算される仕組みです。
そのため、以下のような問題があります。
- 値が反映されるタイミングが遅れる(画面表示後など)
- 値が変わっても、「値変更イベント」が発生しない
計算式プラグインは、フィールドの値変更イベントをトリガーにして再計算を実行します。
つまり、計算項目を参照しても、値の変化を検知できず、再計算されないという問題が発生します。
編集画面では、レコード保存時に再計算されますが、レコード編集者が認識していた値と異なる値で更新される場合があります。
一括計算での問題
一覧画面から実行できる「一括計算」でも、計算項目を使っている場合は期待通りに動作しないことがあります。
- 一括計算は、REST APIでレコード更新を行う前に計算処理を実行します。
- 一方、計算項目は、レコード更新後にkintoneが自動的に再計算して値をセットする仕組みです。
そのため、一括計算ではまだ最新の値が反映されていない計算項目を元に計算されてしまい、結果がずれることがあります。
具体的な例
以下のような設定はNGです。
- 「金額」×「数量」を「合計」項目(計算項目)で計算
- その「合計」項目を使って「税込合計」を計算式プラグインで計算
このとき、
- 通常の画面操作では、「合計」の変更が検知されず「税込合計」が更新されない
- 一括計算では、「合計」が古い値のまま計算されてしまう
対応方法
中間計算が必要な場合でも、すべての計算をプラグイン内で完結させるのが安全です。
例:
LET(
金額, 数値1,
数量, 数値2,
合計, 金額 * 数量,
税込合計, 合計 * 1.1,
税込合計
)
補足
- 計算項目は自動計算のみに使用し、プラグインとの併用は避けるようにしましょう。
- 値変更イベントを活用したい場合は、**通常の入力フィールド(数値、文字列など)**を使用してください。
まとめ
| 通常の入力フィールドを参照 | 計算項目を計算式に含める |
| 計算はすべてプラグイン内で完結 | 計算項目を使って中間値を参照する |
| 値変更イベントで再計算を制御 | 値変更イベントが発生しない項目を使う |
| 一括計算で計算式が最新状態を参照 | 計算項目の更新が遅れ、結果がずれることがある |