Apex コールアウトに future メソッドを使用する方法
環境
Salesforce
構文
future メソッドは静的メソッドである必要があり、void 型のみを返します。
指定するパラメーターはプリミティブデータ型、プリミティブデータ型の配列、プリミティブデータ型のコレクションである必要があります。
外部サービスまたは API への Web サービスコールアウトを実行するには、(callout=true) でマークされた
future メソッドを使用して Apex クラスを作成します。
操作例
1.コールアウトコードの定義
public class SENDSMSUtil{ // コールアウトが許可されていないトリガーなどから非同期を呼び出す @future(callout=true) public static void sendMsgAsync(String fromNbr, String toNbr, String m) { String results = sendMsg(fromNbr, toNbr, m); System.debug(results); } // コントローラーなどから呼び出して即時処理 public static String sendMsg(String fromNbr, String toNbr, String m) { // 「send」を呼び出すとコールアウトが発生 String results = SmsMessage.send(fromNbr, toNbr, m); insert new SMS_Log__c(to__c=toNbr, from__c=fromNbr, msg__c=results); return results; } }
2.テストクラスの定義
@IsTest private class Test_SENDSMSUtil{ @IsTest private static void testSendSms() { Test.setMock(HttpCalloutMock.class, new SMSCalloutMock()); Test.startTest(); SMSUtils.sendSMSAsync('from11', 'to22', 'test message'); Test.stopTest(); // コールアウトを実行して結果を確認する List<SMS_Log__c> logs = [select msg__c from SMS_Log__c]; System.assertEquals(1, logs.size()); System.assertEquals('success', logs[0].msg__c); } }