Memos About SalesForce

Salesforceにハマってたこと!

- About Salesforce Post Blog -

Salesforce 自動化ルール、および、Apex トリガーはどのような順番?

こんにちは、管理人の@Salesforce.Zです。

プログラムを書くなら、処理順番をキッチリ制御できると素晴らしいですね。

今日から、あなたもこうなれます。そして、処理を明確にできることは上司にも好かれるので、上昇にもつながる、信頼感も得やすい。無視できない知識です。 しっかり理解しましょう。

処理順番をしっかり設定でき、バグ確認時にも役に立ちます。なかなか重要な知識です。

一緒に見ていきましょう。

目次

自動化ルール、および、Apex トリガーの処理順番

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

1.古いレコードをデータベースからロード(または、新しい挿入の初期化)

2.新しいレコードの値で古い値を上書き

3.システムの入力規則(商談商品を挿入する場合、システムの入力規則に加えてカスタム入力規則が実行されます)

4.すべての before トリガを実行(EE / UE のみ)

5.カスタム入力規則

6.レコードをデータベースに保存(しかし、コミットされていない)

7.レコードをデータベースから再ロード

8.すべての after トリガを実行(EE / UE のみ)

9.割り当てルール

10.自動応答ルール

11.ワークフロー ルール

12.プロセス

13.エスカレーション ルール

14.積み上げ集計数式の値の更新(存在する場合)

15.データベースのコミット

16.コミット後のロジック(メールの送信)

Trigger

Apex トリガを使用すると、Salesforce のレコードに対するイベント (挿入、更新、削除) の前または後にカスタムアクションを実行できます。

トリガ構文

トリガ定義の構文は、クラス定義の構文とは異なります。トリガ定義は、trigger キーワードで開始します

trigger TriggerName on ObjectName (trigger_events) {
   code_block
}

トリガイベントは下記のようなアクションになります。

  • before insert

  • before update

  • before delete

  • after insert

  • after update

  • after delete

  • after undelete

トリガ例(取引先)

trigger HelloWorldTrigger on Account (before insert) {
    System.debug('Hello World!');
}

Before Trigger

レコードがデータベースに保存される前にレコードの値を更新または検証する場合に使用します

After Trigger

システムによって設定された項目値 (レコードの Id 項目や LastModifiedDate 項目など) にアクセスする場合や、他のレコードの変更に影響を与える場合に使用します。after トリガを実行するレコードは参照のみです。

終わりに

Beforeはデータベースに保存することをタイミングにして、以前のこと

文章の冒頭に記載している処理順番の#6を基準に前、後の定義です。

Afterはデータベースに保存することをタイミングにして、以降のこと

知恵袋:参照関係の親子レコードでは、親を削除しても子オブジェクトのトリガが動かないです。