Salesforceにおけるプラットフォームイベントの活用事例と実装方法
1. プラットフォームイベントとは?
Salesforceの「プラットフォームイベント」は、非同期でのデータ処理を実現する仕組みです。
従来のワークフローやプロセスビルダーでは難しい「リアルタイムなイベント駆動型処理」を可能にします。
🔹 主な用途
- システム間の連携(Salesforceと外部システムのリアルタイム連携)
- 複数の処理を非同期で実行(例:商談成立後に請求書作成とメール送信を並行処理)
- バッチ処理の代替(大量データの更新通知)
2. 活用事例①:商談成立後に請求書を自動作成 & メール通知
📌 要件
- 商談(Opportunity)が
成約(Closed Won)
になったら、請求書(Invoice)を作成する - その後、請求書作成の通知メールを営業担当者に送る
📌 実装の流れ
- プラットフォームイベントを作成(InvoiceEvent)
- Apexトリガーでイベントを発行(商談が成約したら発行)
- イベントを購読して請求書を作成(Apex または フローで購読)
- 請求書作成後に通知メールを送信
3. 実装
① プラットフォームイベントの作成
設定 → プラットフォームイベント から、新しいイベント InvoiceEvent
を作成し、
以下のフィールドを定義します。
フィールド名 | API名 | データ型 |
---|---|---|
商談ID | OpportunityId__c | Lookup (Opportunity) |
金額 | Amount__c | Currency |
請求先メール | Email__c |
② Apexトリガーでイベントを発行
商談のステージがClosed Wonになったら、InvoiceEventを発行する
trigger OpportunityTrigger on Opportunity (after update) {
List<InvoiceEvent__e> events = new List<InvoiceEvent__e>();
for (Opportunity opp : Trigger.new) {
Opportunity oldOpp = Trigger.oldMap.get(opp.Id);
// ステージが"Closed Won"に変更された場合、イベントを発行
if (opp.StageName == 'Closed Won' && oldOpp.StageName != 'Closed Won') {
InvoiceEvent__e event = new InvoiceEvent__e(
OpportunityId__c = opp.Id,
Amount__c = opp.Amount,
Email__c = opp.Owner.Email
);
events.add(event);
}
}
// プラットフォームイベントを発行
EventBus.publish(events);
}
③ フローでイベントを購読し、請求書を作成
- 設定 → フロー → 新規フロー → プラットフォームイベントの購読を選択
-
購読するイベント →
InvoiceEvent__e
-
請求書オブジェクト(Invoice__c)を作成
-
商談ID →
InvoiceEvent__e.OpportunityId__c
-
請求金額 →
InvoiceEvent__e.Amount__c
-
請求日 →
Today()
-
商談ID →
-
メール通知を送信
- 送信先 →
InvoiceEvent__e.Email__c
- メール本文 →
「商談が成約し、請求書が作成されました。」
- 送信先 →
4. 活用事例②:外部システム(ERP)とのリアルタイム連携
📌 要件
- Salesforceで新しい受注(Order)が作成されたら、外部のERPシステムに通知
- ERP側で処理が完了したら、Salesforceの受注ステータスを更新
📌 実装の流れ
- Salesforceで注文データを作成
- プラットフォームイベント(OrderEvent)を発行
- 外部システムがOrderEventを購読し、ERPにデータ送信
- ERPが処理完了後、Salesforceの受注ステータスを更新
5. 実装
① プラットフォームイベントを作成
フィールド名 | API名 | データ型 |
---|---|---|
注文ID | OrderId__c | Lookup (Order) |
金額 | Amount__c | Currency |
ステータス | Status__c | Text |
② Apexトリガーでイベントを発行
trigger OrderTrigger on Order (after insert) {
List<OrderEvent__e> events = new List<OrderEvent__e>();
for (Order ord : Trigger.new) {
OrderEvent__e event = new OrderEvent__e(
OrderId__c = ord.Id,
Amount__c = ord.TotalAmount,
Status__c = ord.Status
);
events.add(event);
}
// 外部システムに通知
EventBus.publish(events);
}
③ 外部システムが購読(AWS Lambda, Heroku など)
外部のERPシステムは、Salesforceのプラットフォームイベントを購読し、処理後にSalesforceへ更新リクエストを送信。
例えば、AWS Lambda で受信処理を実装:
import requests
import json
def lambda_handler(event, context):
for record in event['Records']:
order_id = record['OrderId__c']
status = "Processed"
# Salesforceの受注ステータスを更新
url = f"https://yourinstance.salesforce.com/services/data/v56.0/sobjects/Order/{order_id}"
headers = {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
data = json.dumps({"Status": status})
requests.patch(url, headers=headers, data=data)
6. まとめ
活用事例 | プラットフォームイベントの役割 |
---|---|
商談成立後の請求書作成 & メール通知 | 非同期で請求書を作成し、メール通知 |
外部システムとのリアルタイム連携 | ERPに受注情報を送信し、処理後にSalesforceを更新 |
🔹メリット
✅ 非同期処理 でユーザーの待ち時間を削減
✅ システム間の連携 をリアルタイムで実現
✅ フローやApexで柔軟に処理 できる
👨💻 試験対策ポイント
-
EventBus.publish()
でイベント発行 - フロー or Apex でイベントを購読
- 非同期処理での活用(外部システム連携や自動化)