[salesforce]トリガ内からのHTTPコールアウト実行

By |10月 22, 2009|salesforce, |


トリガ内から外部のWebサービスに対してHTTPコールアウトをするための手順とポイント。

ポイント
・トリガ内から直接HTTPコールアウトするのではなく、HTTPコールアウトする処理は別クラスとして開発して、そのクラスをトリガ内から呼び出す。
・HTTPコールアウトするクラスには、
@futureアノテーションを付ける。
・コールアウト先URLへのアクセスを、リモートサイトのセキュリティ設定で許可する。


手順

  1. APEXクラスの作成
  2. APEXトリガの作成
  3. リモートサイトのセキュリティ設定

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をリモートサイトのセキュリティで許可する。
[設定]→[セキュリティのコントロール]→[リモートサイトの設定]
ws000071
ちなみに、トリガ内から直接HTTPコールアウトを実行すると以下のようなエラーになります。
System.CalloutException: Callout from triggers are currently not supported”