API に対して Apex とワークフローのコールアウトを行う
最終更新日 2023年04月28日(金)
Table of Contents
Salesforce でのアクティビティに基づいて API で Heroku アプリ内の呼び出しを行うには、主に 2 つの方法があります。
- プログラムで REST 呼び出しを行うための Apex HTTP コールアウト。
- 宣言で SOAP 呼び出しを行うためのワークフローアウトバウンドメッセージ。
いずれの場合も、Heroku アプリはイベント詳細ペイロードを使用してリクエストを受信して、アクションを実行します。
どのような場合に使用するか
Salesforce 組織でのオブジェクトの更新に基づいた REST API 統合が必要な場合。
Apex HTTP コールアウト
Apex コールアウトを使用すると、Apex を外部サービス (この場合は Heroku で実行中のアプリ) と緊密に統合できます。Apex には、オブジェクトを JSON にシリアライズし、非同期的に HTTP エンドポイントを呼び出す機能があります。たとえば、次に示すのはオブジェクトをシリアライズして非同期的にデータを Heroku エンドポイントに POST できるヘルパークラスです。
public class Helper {
public static String jsonContent(List<Object> triggerNew) {
String newObjects = '[]';
if (triggerNew != null) {
newObjects = JSON.serialize(triggerNew);
}
String content = '{"new": ' + newObjects + '}';
return content;
}
@future(callout=true) public static void callout(String url, String content) {
Http h = new Http();
HttpRequest req = new HttpRequest();
req.setEndpoint(url);
req.setMethod('POST');
req.setHeader('Content-Type', 'application/json');
req.setBody(content);
h.send(req);
}
}
その後、トリガーをアタッチして、そのメソッドを起動できます。
trigger NewContactHerokuTrigger on Contact (after insert) {
String endpoint = 'https://example-app-1234567890ab.herokuapp.com/api/action';
String content = Helper.jsonContent(Trigger.new);
Helper.callout(endpoint, content);
}
Heroku アプリケーションが同じ API エンドポイントでリッスンするようにし、HTTP POST 受信時の適切なアクションを実装するようにしてください。追加でセッション ID を送信して、Heroku アプリが Salesforce の REST API を使用して Salesforce 内の呼び出しを行うようにできます。
アウトバウンドメッセージ
アウトバウンドメッセージを使用すると、指定したフィールドセットが変更されるたびに Heroku アプリなどの指定された外部アプリケーションエンドポイントに自動的にメッセージが (フィールド値と一緒に) 送信されるように Salesforce を構成できます。アウトバウンドメッセージは、Salesforce のワークフロールール機能の一部です。ワークフロールールは特定の種類のフィールド変更を監視し、メール通知の送信、タスクレコードの作成、アウトバンドメッセージの送信などの Salesforce の自動アクションをトリガーします。
ワークフローで、宣言的にルールと外部システムへのコールアウトを定義します。ルールは Salesforce のオブジェクトに接続できます。
制限と考慮事項
Salesforce から Heroku 内の呼び出しを行うと、Heroku 上のエンドポイントが本番環境の Apex コードと緊密に結合されます。この方法により、デバッグが難しくなる場合があります。よりスケーラブルで弾性力のある統合には、Salesforce Platform Eventsを使用することをお勧めします。
ここに記載されているシナリオの多くは Salesforce の制限に影響する可能性があるので、API の制限に注意してください (たとえば、Apex トリガーには CPU 時間の制限があり、統合を始動できる頻度に影響します)。
「セキュリティと Heroku/Salesforce の統合」に、この統合を保護する方法が示されています。
詳細情報
- 「Apex 開発者ガイド」の「Apex を使用したコールアウトの呼び出し」を参照してください。
- 「SOAP API 開発者ガイド」の「アウトバウンドメッセージの設定」を参照してください。