この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

トリガと実行の順序

レコードを insertupdate、または upsert ステートメントを使用して保存すると、Salesforce は次のイベントを順番に実行します。

Salesforce がサーバでこれらのイベントを実行する前に、ブラウザは、レコードに連動選択リスト項目が含まれているかどうかを JavaScript で検証します。この検証では、各連動選択リスト項目を指定可能な値に制限します。クライアント側では他に検証は行われません。

メモ

サーバで、Salesforce により次の手順が実行されます。
  1. 元のレコードがデータベースから読み込まれるか、upsert ステートメント用にレコードが初期設定されます。
  2. 要求から新しいレコード項目の値が読み込まれ、古い値を上書きします。
    要求が標準 UI 編集ページから行われた場合は、Salesforce がシステム検証を実行して、レコードについて次の点を確認します。
    • レイアウト固有のルールへの準拠
    • レイアウトレベルおよび項目定義レベルで必要な値
    • 有効な項目形式
    • 最大項目サイズ
    要求が Apex アプリケーションや SOAP API コールなど他の提供元から送信されている場合、Salesforce では外部キーのみを検証します。トリガを実行する前に、Salesforce がカスタム外部キーがオブジェクト自体を参照しないことを確認します。

    見積品目や商談品目など、複数行の品目が作成された場合、Salesforce はカスタムの入力規則を実行します。

  3. レコードの保存前に実行されるように設定されたレコードトリガフローを実行します。
  4. すべての before トリガが実行されます。
  5. すべての必須項目に null 以外の値が入力されていることの確認や、カスタムの入力規則の実行など、システム検証のほとんどの手順がもう一度実行されます。Salesforce が標準 UI + 編集ページから要求が行われた場合に再度実行しない唯一のシステム検証は、レイアウト固有のルールの適用です。
  6. 重複ルールが実行されます。重複ルールが重複するレコードを特定してブロックアクションを実行した場合は、レコードが保存されず、after トリガやワークフロールールなどの後続のステップが実行されません。
  7. レコードはデータベースに保存されますが、まだ確定されません。
  8. すべての after トリガが実行されます。
  9. 割り当てルールが実行されます。
  10. 自動応答ルールが実行されます。
  11. ワークフロールールが実行されます。ワークフロー項目自動更新が存在する場合、次の実行が行われます。
    1. レコードが再度更新されます。
    2. システム検証が再度実行されます。カスタム入力規則、フロー、重複ルール、プロセスおよびエスカレーションルールは再実行されません。
    3. レコードの操作 (挿入または更新) に関わらず、before update トリガと after update トリガがもう 1 回 (1 回だけ) 実行されます。
  12. エスカレーションルールが実行されます。
  13. 次の Salesforce フロー自動化を実行しますが、順序は保証されません。
    • プロセス
    • プロセスによって起動されたフロー

    プロセスまたはフローで DML 操作が実行されるときに、影響を受けるレコードに対して保存手順が実行されます。

  14. レコードの保存後に実行されるように設定されたレコードトリガフローを実行します。
  15. エンタイトルメントルールが実行されます。
  16. レコードに積み上げ集計項目が含まれる場合、またはレコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードに対して保存手順が実行されます。
  17. 親レコードが更新され、さらにその親レコードに積み上げ集計項目が含まれるか、その親レコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親の親レコードの積み上げ集計項目が更新されます。親の親レコードに対して保存手順が実行されます。
  18. 条件に基づく共有の評価が実行されます。
  19. すべての DML 操作がデータベースで確定されます。
  20. 変更がデータベースにコミットされた後、コミット後ロジックが実行されます。コミット後ロジックの例を次に示します (順不同)。
    • メールの送信
    • キューに登録された非同期 Apex ジョブ (キュー可能ジョブや future メソッドを含む)
    • レコードトリガフローの非同期パス

再保存時は、ステップ 9 (割り当てルール) からステップ 17 (親の親レコードの積み上げ集計項目) までがスキップされます。

メモ

その他の考慮事項

トリガを使用する場合、次の点に注意してください。

  • ワークフロールール項目の更新がレコード更新によってトリガされた場合、Trigger.old には更新後にワークフローによって新たに更新された項目は保存されません。Trigger.old には、最初のレコード更新が行われる前のオブジェクトが保存されます。たとえば、既存のレコードに初期値が 1 の数値項目があるとします。ユーザがこの項目を 10 に更新し、ワークフロールールの項目自動更新が起動されて項目が 11 に増えます。ワークフローの項目自動更新後に起動される update トリガでは、Trigger.old から取得されるオブジェクトの項目値は、10 ではなく元の値の 1 になります。トリガの更新前後の Trigger.old の値に関する説明を参照してください。
  • 部分的完了が許可された DML コールが行われた場合、トリガは最初の試行時に実行され、その後の試行時に再び実行されます。これらのトリガの呼び出しは同じトランザクションの一部のため、トリガがアクセスする静的クラス変数はリセットされません。「一括 DML 例外処理」を参照してください。
  • 同じイベントについての 1 つのオブジェクトに、複数のトリガが定義されている場合、トリガの実行順序は保証されません。たとえば、ケースに 2 つの before insert トリガがあり、新しいケースレコードが挿入されたとします。その場合、それらのトリガが実行される順序は保証されません。
  • 取引先責任者を複数の取引先に関連付ける公開された取引先責任者を組織に挿入した場合の実行順序については、「AccountContactRelation」を参照してください。
  • before トリガを使用して StageForecast Category を設定している場合の実行順序については、「商談」を参照してください。
  • API バージョン 53.0 以前では、エンタイトルメントの実行後に保存後レコードトリガフローが実行されていました。