[salesforce]トリガ内からのHTTPコールアウト実行
トリガ内から外部のWebサービスに対してHTTPコールアウトをするための手順とポイント。
ポイント
・トリガ内から直接HTTPコールアウトするのではなく、HTTPコールアウトする処理は別クラスとして開発して、そのクラスをトリガ内から呼び出す。
・HTTPコールアウトするクラスには、@futureアノテーションを付ける。
・コールアウト先URLへのアクセスを、リモートサイトのセキュリティ設定で許可する。
手順
- APEXクラスの作成
- APEXトリガの作成
- リモートサイトのセキュリティ設定
1.APEXクラスの作成
こんな感じでHTTPコールアウトするクラスを作成。
[php]
public class TestHttpCallout {
//このメソッドを非同期実行するために、@futureを記述
@Future(callout=true)
public static void callouttest() {
//HTTPリクエストの作成
HttpRequest req = new HttpRequest();
req.setEndpoint(‘http://hogehoge.com/hogehoge.html’);
req.setMethod(‘GET’);
//HTTPリクエストの送信
Http http = new Http();
HttpResponse res = http.send(req);
//レスポンスチェック
if (res.getStatusCode() == 200) {
//成功時に実行したい処理
} else {
System.debug(‘Callout failed: ‘ + res);
}
}
}
[/php]
2.APEXトリガの作成
こんな感じで適当なトリガを作る。この例は、Account(取引先)レコードの新規作成時のトリガ。
[php]
trigger HttpCalloutTestTrigger on Account (after insert) {
for (Account acc : Trigger.New) {
TestHttpCallout.callouttest();
}
}
[/php]
3.リモートサイトのセキュリティ設定
HTTPコールアウトでアクセスするURLをリモートサイトのセキュリティで許可する。
[設定]→[セキュリティのコントロール]→[リモートサイトの設定]
ちなみに、トリガ内から直接HTTPコールアウトを実行すると以下のようなエラーになります。