Salesforce の自動更新系の順序

Salesforce では、自動化の一環として以下のようなものが使用できます。

  • フロー
  • ワークフロールール
  • プロセスビルダー
  • 項目自動更新
  • トリガ

これらは便利なものですが、何も考えずに使用するとDLLヘルよろしくの地獄を見るかもしれません。

これらの実行順序や特性を理解していないと、意図しない挙動になる恐れがあります。
以下は、公式による説明です。

下記が、レコードに適用される salesforce ロジックの順序です。

  • 古いレコードをデータベースからロード(または、新しい挿入の初期化)
  • 新しいレコードの値で古い値を上書き
  • システムの入力規則(商談商品を挿入する場合、システムの入力規則に加えてカスタム入力規則が実行されます)
  • すべての before トリガを実行(EE / UE のみ)
  • カスタム入力規則
  • レコードをデータベースに保存(しかし、コミットされていない)
  • レコードをデータベースから再ロード
  • すべての after トリガを実行(EE / UE のみ)
  • 割り当てルール
  • 自動応答ルール
  • ワークフロー ルール
  • プロセス
  • エスカレーション ルール
  • 積み上げ集計数式の値の更新(存在する場合)
  • データベースのコミット
  • コミット後のロジック(メールの送信)

自動化ルール、および、Apex トリガーはどのような順番で処理されますか? より



気をつけたいのは、更新系の組み合わせです。

例えばあるオブジェクトの項目を、ワークフロールールでもトリガでも更新するような場合、意図しない動きにならないように気をつけなければなりません。

ワークフロールールの項目自動更新が項目を変更する場合、もう一度トリガが動くという点も考慮する必要があります。

積み上げ集計項目の更新によって、親側のワークフロールールやトリガが動作するということも忘れてはいけません。


たいていのワークフロールールやトリガでは、「YYYがXXXだったら」というような条件をもとに動作させることが多いかと思います。

ワークフロールールやトリガが増えていくと、何か問題が起こっても再現させることすら困難なこともあるため、できる限りシンプルな状態に保ちたいものです。