よく忘れるので備忘録として残しておきたいこと
プロセスビルダーとトリガを両方使うときの注意
主従関係になっているオブジェクトで親オブジェクトに積み上げ集計項目がある場合、親オブジェクトのトリガで子オブジェクトを更新するような処理をtrigger.after
で実装すると
- 親の更新
- 子オブジェクトの更新
- 積み上げ集計でもう一度親の更新
みたいな動きをしてトリガを再帰的に呼び出してしまうことがある。
トリガ側ではガバナ制限を考慮してコーディングしていたとしても、プロセスビルダー側の条件でガバナ制限に抵触することがあるので呼び出されないようにコーディングをしておく必要がある。
一番いいのは自動化ツールを一つにまとめることだけれども、たまにどうしようもないことがあるので注意。
triggerの中のtre-catch
たまにトリガの中でtry-catch文を書いてるのにexception発生時に何もしてない残念な感じのコードがあって、エラーになって保存できていないのに素通りしてることがある。
この状態よりはまだエラーになった方がマシだけど、どうせならSaveResultクラスを使ってDML操作が成功したかどうか判断してからエラークラスのgetMessage()
メソッドでエラーメッセージだけaddErrorしてあげると良い感じになる。1