下記の図は、Salesforceのトランザクション処理の流れを示したものです。
具体的なオブジェクトやデータを用いて、わかりやすく整理しました。
Salesforceのデータ処理の流れ(トランザクションのライフサイクル)
Salesforceでは、データが保存されるまでに複数の処理ステップが存在します。これを理解することで、カスタマイズ時の動作やエラーの原因を把握しやすくなります。
1. Trigger.newの初期化
レコードが作成または更新される際、Trigger.new
が初期化され、データがSalesforceのシステム検証ルール(標準の必須項目チェックなど)やカスタム検証ルールにかけられます。
例:
- 「商談」オブジェクトの
金額
項目が必須の場合、空欄だとエラーになる。
2. Before Trigger(レコード保存前の処理)
レコードがデータベースに保存される前に実行されるApexトリガー。
例:
-
before insert
で取引先名
を自動入力する。 -
before update
でステータス
が「契約済み」なら契約日
を自動入力する。
trigger OpportunityTrigger on Opportunity (before insert, before update) {
for (Opportunity opp : Trigger.new) {
if (opp.StageName == 'Closed Won' && opp.CloseDate == null) {
opp.CloseDate = Date.today();
}
}
}
3. 重複ルール(Duplicate Rules)
Salesforceの標準機能で、同じデータが登録されないようにチェック。
例:
- 既に登録されている
取引先
と同じ名前の取引先
を作成しようとすると警告が出る。
4. 割り当てルール(Assignment Rules)
ケースやリードに対し、自動的に担当者を割り当てるルール。
例:
-
リードの地域
が「東京」なら担当者A
に割り当てる。
5. 自動レスポンスルール(Auto-Response Rules)
リードやケースに対して、自動返信メールを送る機能。
例:
-
サポート問い合わせ
を受け付けたら、自動で「お問い合わせを受け付けました」のメールを送信。
6. エスカレーションルール(Escalation Rules)
ケースが一定時間解決されない場合、マネージャーに通知したり、優先度を変更する。
例:
-
優先度:高
のケースが24時間以上放置されたら、マネージャー
に通知する。
7. 保存(Database Commit)
ここまでの処理を通過したレコードはデータベースに保存される。
8. After Trigger(レコード保存後の処理)
データが保存された後に実行されるApexトリガー。
例:
-
商談
が作成されたら、自動で関連するタスク
を作成。
trigger AfterInsertOpportunity on Opportunity (after insert) {
List<Task> tasks = new List<Task>();
for (Opportunity opp : Trigger.new) {
Task newTask = new Task(
Subject = 'フォローアップ',
WhatId = opp.Id,
Status = 'Not Started'
);
tasks.add(newTask);
}
insert tasks;
}
9. ワークフロールール(Workflow Rules)
フィールド更新、タスク作成、メール送信などの処理を自動化。
例:
-
商談のステージ
が「成約」に変更されたら、契約日
を自動入力。
10. プロセスビルダー(Process Builder)
ワークフロールールより高度な自動化を実現。
例:
-
商談
が「成約」になったら、自動で請求レコード
を作成。
11. コミット(Commit)
トランザクションの確定処理。これ以降はロールバック不可。
12. コミット後のロジック
データの保存が確定した後に、外部システム連携や通知を行う。
例:
-
商談
が作成されたら、Slack
に通知を送る。 -
顧客データ
を外部システムに同期する。
public class OpportunityNotification {
@future(callout=true)
public static void sendSlackMessage(String message) {
HttpRequest req = new HttpRequest();
req.setEndpoint('https://slack.com/api/chat.postMessage');
req.setMethod('POST');
req.setBody('{"text": "' + message + '"}');
Http http = new Http();
HttpResponse res = http.send(req);
}
}
まとめ
ステップ | 処理内容 | 例 |
---|---|---|
1. Trigger.new 初期化 | システム検証・カスタム検証 | 必須項目チェック |
2. Before Trigger | レコード保存前の処理 | 取引先名自動入力 |
3. 重複ルール | 既存データのチェック | 同じ名前の取引先を防ぐ |
4. 割り当てルール | レコードの自動割り当て | リードを地域別に担当者割当 |
5. 自動レスポンスルール | 自動メール送信 | 問い合わせ受付の自動返信 |
6. エスカレーションルール | ケースの優先度変更 | 放置されたケースをマネージャーに通知 |
7. 保存 | データベースに保存 | 正式にデータ確定 |
8. After Trigger | レコード保存後の処理 | タスク自動作成 |
9. ワークフロー | シンプルな自動化 | 商談のステージ変更で契約日更新 |
10. プロセスビルダー | 高度な自動化 | 商談成立で請求書作成 |
11. コミット | トランザクション確定 | データ確定処理 |
12. コミット後のロジック | 外部システム連携 | Slack通知や外部API連携 |
この流れを理解することで、Salesforceの自動化を活用し、システム設計の最適化が可能になります!
bk
📌 例:商談 (Opportunity) の作成処理の流れ
あなたがSalesforceで新しい商談 (Opportunity) を作成するとき、データの処理は以下の順番で実行されます。
🔹 1. Trigger.new の初期化
(システム入力規則 & カスタム入力規則の適用)
-
例:UIから商談を新規作成したとき、
Trigger.new
という変数に、新しいレコードの情報が入る。
🔹 2. Beforeトリガー (Before Insert, Before Update)
- 処理の前に実行されるApexトリガー
- 例:「商談の金額 (Amount) が 10,000 円以下なら、自動でステージを '見込み' にする」
trigger OpportunityTrigger on Opportunity (before insert, before update) {
for (Opportunity opp : Trigger.new) {
if (opp.Amount < 10000) {
opp.StageName = '見込み';
}
}
}
🔹 3. 重複ルール
- 同じデータがすでに存在しないかチェック
- 例:「同じ取引先 (Account) に同じ商談名の商談があれば、作成をブロックする」
🔹 4. 割り当てルール
- 商談の担当者を自動で決定
- 例:「商談の地域が '東京' なら、担当者を佐藤にする」
🔹 5. 自動レスポンスルール
- 自動的に顧客にメールを送信
- 例:「新規商談が作成されたら、顧客に自動で「お問い合わせありがとうございます」とメールを送る」
🔹 6. エスカレーションルール
- 特定の条件で商談を上位マネージャーにエスカレーション
- 例:「商談の金額が1,000,000円以上なら、上司に通知する」
🔹 7. 保存 (データベースに保存)
- ここで初めてデータがSalesforceに保存される
🔹 8. Afterトリガー (After Insert, After Update)
- レコードが保存された後に実行
- 例:「商談が作成されたら、関連するカスタムオブジェクト '見積書' を自動作成する」
trigger CreateQuote on Opportunity (after insert) {
for (Opportunity opp : Trigger.new) {
Quote__c quote = new Quote__c();
quote.Opportunity__c = opp.Id;
quote.TotalAmount__c = opp.Amount;
insert quote;
}
}
🔹 9. ワークフロールール
- レコード更新時に実行する自動処理
- 例:「商談のステージが '交渉中' になったら、自動で 'フォローアップタスク' を作成」
🔹 10. プロセス (Process Builder)
- より高度な自動化処理
- 例:「商談が '成立' になったら、取引先責任者に感謝メールを送る」
🔹 11. コミット
- データベースへの最終確定
- 例:「すべての処理が問題なければ、データベースに完全保存」
🔹 12. コミット後の処理
- メール送信、アウトバウンドメッセージ、イベント処理など
- 例:「商談成立後、会計システムにデータを送る」
📌 まとめ
Salesforceでデータを保存する際は、以下のように順番に処理が実行される。
- データの初期化(Trigger.new, 入力規則)
- Beforeトリガー(データを保存前に修正)
- 重複ルール(同じデータがないか確認)
- 割り当てルール・レスポンスルール(担当者決定 & メール送信)
- エスカレーションルール(必要なら上司へ通知)
- データ保存
- Afterトリガー & 自動処理(ワークフロー、プロセスビルダー)
- コミット
- コミット後の処理(メール送信、外部システム連携)
この流れを理解すれば、Salesforceのデータ処理の仕組みがよくわかる!