[SFDC]Apexトリガから外部サービスを呼び出す

Apexトリガから外部サービスを呼び出したい(HTTPコールアウト)場合、トリガ内で直接HTTPコネクションを開くことはできないようです。
オブジェクトが削除されたタイミング(AfterDelete)でオブジェクトに関連付けられたAmazonS3上の画像ファイルを削除する処理をトリガ内にベタで書いてみたところ、以下のようなエラーになり失敗しました。

System.CalloutException: Callout from triggers are currently not supported”

ふむ。一見すると絶望しそうなメッセージですが、ググると解決法がありました。
こちらのページで解説されている通り、外部サービスを呼び出す処理は@futureな非同期メソッドとして定義すると良いようです。HTTPコールアウトしますので、callout=trueオプションも指定する必要があります。
トリガから@futureメソッドを呼ぶようにするとコールアウトに成功しました。

 

・トリガ- @Futureメソッドを呼ぶだけ

 

・コールアウト用のクラス – @Futureなメソッドを定義する

…直接は関係無いのですが、画像削除するのに1オブジェクト分ずつS3にリクエスト飛ばすのはやはりまずいでしょうか。
Multiple Delete APIとやらを叩く処理を実装しなければいけない? →実装しました。


コメントを残す