IT人材をお探しの方は、まずはお電話ください。担当営業がすぐにご要望にマッチした人材をご提案いたします。
tel:03-6409-6766 お急ぎの方はお電話ください

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

SalesforceのContinuationクラスは何ができるの?Visualforceページから非同期コールアウトを実行する方法を解説!

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

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ページから非同期コールアウトを実行する方法

SalesforceのVisualforceページからContinuationクラスでの非同期コールアウト実行方法を実装例とともに紹介します。

【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クラスで非同期コールアウトを実装しよう

今回はSalesforceのContinuationクラスを紹介しました。Continuationクラスを利用すると、非同期コールアウト同時実行数を気にせずに、サーバーサイドでの処理が必要な外部システムとの連携を実装できます。 Salesforceと外部システムとの連携処理を実装する際は、ぜひ利用してみてください。]]>

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア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月時点)
ITエンジニアの派遣を利用したい企業様へ
ITエンジニアを派遣で採用したい企業様へ
  • 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
  • すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!

当社のITエンジニア派遣サービスは

  • 派遣スピードが速い!(最短即日)
  • 4,500名のエンジニアから貴社にマッチした人材を派遣
  • 正社員雇用も可能

こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。

無料相談のお申し込みはこちら
IT・技術関連の記事一覧へ

カテゴリから記事を探す

すべての記事一覧へ