数式項目について積み上げ集計を行う方法

By | July 13, 2020

概要

数式項目を直接「積み上げ集計」項目で利用することはできないので、事前に一度カスタム項目に値をコピーしてあげる必要があります。

方法

①数式項目のデータ型と同一のカスタム項目を新規作成する

②データをコピーするプロセスビルダーを組む

■例

上手く行かない場合

「数式に利用されている項目のUpdate」と「数式からカスタム項目への値のコピー」に時間差がないと適切な値はコピーされません。

プロセスビルダーでField Updateを順番に並べてみたり、フローで「Update Record」コンポーネントを順番に並べてみても失敗します。

というのも、積み上げ集計項目の計算はSalesforceのDB処理の事実上一番最後になされるからです。

↓こうした小細工も効きません

■参考

参考:https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm

上手くいかない場合の対処法(Apexを使用しない前提)

数式に利用される項目に関するDML操作を完了させてから、再度数値項目の値をカスタム項目にコピーするアクションを発動させる必要があります。

数式に利用される項目の値を更新するビジネスロジックと、数式項目の値をカスタム項目にコピーするビジネスロジックを別々に用意したうえで、後者のアクションの発動条件として前者の値の更新を指定するのが最も安全な手です。

とはいえロジックの分割は冗長。なんとかしたい。

ベストプラクティスは謎ですが、少なくとも↓のような小細工は通用するようです。

どなたかの参考になればノ

■このパターンはOK

※数式に利用する更新の更新をFlowで行い、Process Builder側で0時間後に数式→カスタム項目の値コピー処理を行う実装