SalesforceのContinuationクラスは何ができるの?Visualforceページから非同期コールアウトを実行する方法を解説!
IT・技術関連
更新日:2024.09.05


SalesforceのContinuationクラスは何ができるの?
SalesforceのContinuationクラスはApexでRESTなどのWebサービスを非同期コールアウトで実行したい場合に使用するクラスです。
Continuationクラスを利用した場合、5秒以上の非同期コールアウト同時実行数(10件)にカウントされません。これにより非同期コールアウト同時実行数を気にせず、サーバーサイドでの処理が必要な外部システムとの連携を実装できるようになりました。
なお、Apexを実行するSalesforceの機能によって利用可能なバージョンが異なります。
- Visualforceの場合、Spring’15(APIバージョン34.0)以降
- Lightning Componentの場合、Summer’19(APIバージョン46.0)以降
Visualforceページから非同期コールアウトを実行する方法

【Step1】ApexのControllerクラスを実装する
ApexのControllerクラスにアクションメソッドとコールバックメソッドを実装します。public with sharing class TestController {
// リクエストラベル
public String requestLabel;
// Visualforceページに表示する結果のプロパティ
public String result { get; set;}
private static final String END_POINT = 'https://XXXX.com/address';
// アクションメソッド
public Object startRequest() {
// Continuationクラスの引数にタイムアウト(秒)を設定。120秒まで設定可能。
Continuation con = new Continuation(60);
// コールバックメソッド名を指定
con.continuationMethod = 'runResponse';
HttpRequest req = new HttpRequest();
req.setMethod('GET');
req.setEndpoint(END_POINT);
// ContinuationクラスにHTTPリクエストを追加し、リクエストラベルに代入
this.requestLabel = con.addHttpRequest(req);
// Continuationクラスを返却
return con;
}
// コールバックメソッド
public Object runResponse() {
// リクエストラベルを使って、レスポンスを取得する
HttpResponse response = Continuation.getResponse(this.requestLabel);
// Visualforceページに表示される結果にレスポンスを格納
this.result = response.getBody();
// 呼び出し元のVisualforceページを再描画するためにnullを返却
return null;
}
}
【Step2】VisualForceページを実装する
VisualForceページにControllerクラスのアクションメソッドを呼び出す処理を実装します。<apex:page controller=""TestController"" showChat=""false"" showHeader=""false"">
<apex:form >
<!-- 「Start」ボタンを押すと、アクションメソッドを実行. -->
<apex:commandButton action=""{!startRequest}""
value=""Start"" reRender=""result""/>
</apex:form>
<!-- Webサービスの実行結果を表示. -->
<apex:outputText value=""{!result}"" />
</apex:page>
Lightning Componentから非同期コールアウトを実行する方法
SalesforceのLightning Componentを利用して、Continuationクラスでの非同期コールアウト実行方法を実装例とともに紹介します。【Step1】Apexクラスを実装する
Apexクラスにアクションメソッドとコールバックメソッドを実装します。public with sharing class TestApex {
private static final String END_POINT = 'https://XXXX.com/address';
// アクションメソッド
// @AuraEnabled(continuation=true cacheable=true)を設定
@AuraEnabled(continuation=true cacheable=true)
public static Object startRequest() {
// Continuationクラスの引数にタイムアウト(秒)を設定
Continuation con = new Continuation(60);
// コールバックメソッド名を指定
con.continuationMethod = 'runResponse';
HttpRequest req = new HttpRequest();
req.setMethod('GET');
req.setEndpoint(END_POINT);
// ContinuationクラスにHTTPリクエストを追加
con.addHttpRequest(req);
// Continuationクラスを返却
return con;
}
// コールバックメソッド
// Continuationクラスのコールバックメソッドには@AuraEnabled(cacheable=true)を付与
@AuraEnabled(cacheable=true)
public static Object runResponse(List<String> labels, Object state) {
// 0番目のlabelsをキーにして、レスポンスを取得する
HttpResponse response = Continuation.getResponse(labels[0]);
// 呼び出し元のLightning Componentにレスポンスを返却
return response.getBody();
}
}
【Step2】JavaScriptを実装する
JavaScriptに「@salesforce/apexContinuation」でApexクラスを呼び出すよう実装します。import { LightningElement, track } from 'lwc';
// 「@salesforce/apexContinuation」でApexクラスを呼び出す
import startRequest from '@salesforce/apexContinuation/TestApex.startRequest';
export default class ContinuationSample extends LightningElement {
callWebService() {
startRequest().then(result => {
this.imperativeContinuation = result;
}).catch(error => {
this.imperativeContinuation = error;
});
}
get formattedWebServiceResult() {
return JSON.stringify(this.imperativeContinuation);
}
}
【Step3】HTMLを実装する
HTMLにWebサービスを呼び出すJavaScriptを実行する処理を実装します。<template>
<lightning-button label=""Start"" onclick={callWebService}></lightning-button>
<div>
result: {formattedWebServiceResult}
</div>
</template>
Continuationクラスで非同期コールアウトを実装しよう

この記事の監修者・著者

- AWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
-
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。
・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
最新の投稿
- 2024-12-27営業インタビュー情報共有の活性化の中心に。SP企画部の新たな取り組み
- 2024-07-01営業インタビュー最短で当日にご提案可能。 OPE営業の対応が早い3つの理由
- 2024-07-01営業インタビュー研修見学ツアーが高評価!「お客様のOPEに対する期待を高め、継続に貢献できればと思います。」
- 2024-07-01営業インタビュー信頼関係を構築し、エンジニアの長期就業へ
ITエンジニアの派遣を利用したい企業様へ

- 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
- すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!
オープンアップITエンジニアをご検討ください!
当社のITエンジニア派遣サービスは
- 派遣スピードが速い!(最短即日)
- 4,500名のエンジニアから貴社にマッチした人材を派遣
- 正社員雇用も可能
こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。