導入
常識かもしれませんが、入力規則の中でも数式項目を参照できます。
本記事では、上代 × 下代率を算出する数式項目と、その数式項目を変更不可に制御する入力規則が存在する状態で説明します。
この状態だと、UnitPrice__c * CostRate__c
の結果が変更される場合に入力規則によって保存が中断されます。
そのためUnitPrice__c
・CostRate__c
を個別で監視する必要がなく、下記の例では下代が¥500以外の値となる場合に中断されます。
本題
上代を¥333に設定した状態で、何も変更を加えずに保存を掛けると怒られます。
何も変更してないのに何故。
結論としては、数式項目の「小数点の位置」が原因でした。
入力規則の実行時に¥167と¥166.5で比較検証されるため、ISCHANGED(CostPriceFormula__c)
だと値が変更扱いになるようです。
数式項目はアクセスされる度に値が計算されると思っていたのですが、小数点の位置など補助的な設定は別ということですかね、、
対策
入力規則内で、四捨五入を行った値に対して検証を行えばOKです。
PRIOVALUE(変更前の値)と現在の値がそれぞれ四捨五入された後に比較されることで、小数点切り捨てによる値の不一致が解消されます。
結果としてはとても単純な解決方法ですが、この現象に直面した時は何が起こっているのか分からずかなり混乱しました、、
入力規則が想定外の動きをする場合に、今回挙げた例が参考になれば幸いです!