Salesforce では、自動化の一環として以下のようなものが使用できます。
- フロー
- ワークフロールール
- プロセスビルダー
- 項目自動更新
- トリガ
これらは便利なものですが、何も考えずに使用すると**DLLヘル**よろしくの地獄を見るかもしれません。
これらの実行順序や特性を理解していないと、意図しない挙動になる恐れがあります。
以下は、公式による説明です。
下記が、レコードに適用される salesforce ロジックの順序です。
- 古いレコードをデータベースからロード(または、新しい挿入の初期化)
- 新しいレコードの値で古い値を上書き
- システムの入力規則(商談商品を挿入する場合、システムの入力規則に加えてカスタム入力規則が実行されます)
- すべての before トリガを実行(EE / UE のみ)
- カスタム入力規則
- レコードをデータベースに保存(しかし、コミットされていない)
- レコードをデータベースから再ロード
- すべての after トリガを実行(EE / UE のみ)
- 割り当てルール
- 自動応答ルール
- ワークフロー ルール
- プロセス
- エスカレーション ルール
- 積み上げ集計数式の値の更新(存在する場合)
- データベースのコミット
- コミット後のロジック(メールの送信)
自動化ルール、および、Apex トリガーはどのような順番で処理されますか? より
気をつけたいのは、更新系の組み合わせです。
例えばあるオブジェクトの項目を、ワークフロールールでもトリガでも更新するような場合、意図しない動きにならないように気をつけなければなりません。
ワークフロールールの項目自動更新が項目を変更する場合、**もう一度トリガが動く**という点も考慮する必要があります。
積み上げ集計項目の更新によって、親側のワークフロールールやトリガが動作するということも忘れてはいけません。
たいていのワークフロールールやトリガでは、「YYYがXXXだったら」というような条件をもとに動作させることが多いかと思います。
ワークフロールールやトリガが増えていくと、何か問題が起こっても再現させることすら困難なこともあるため、できる限りシンプルな状態に保ちたいものです。