この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

インポートした WSDL からの非同期コールアウトの実行

WSDL で生成されたクラスから実行される Web サービスコールでは、HttpRequest ベースのコールアウトに加え、非同期コールアウトがサポートされます。WSDL で生成されたクラスから非同期コールアウトを実行するプロセスは、HttpRequest クラスを使用するプロセスと似ています。

Salesforce で WSDL をインポートすると、Salesforce によって、インポートされたサービス用に 2 つの Apex クラスが自動生成されます。一方のクラスは同期サービス用のサービスクラスです。もう一方のクラスは、非同期サービス用に変更されたバージョンです。自動生成された非同期クラスの名前は、Async プレフィックスで開始し、AsyncServiceName の形式になります。ServiceName は、変更前の元のサービスクラスの名前です。非同期クラスは、次のさまざまな点で標準クラスと異なります。

  • 公開サービスメソッドには、追加の Continuation パラメータが第 1 パラメータとして含まれます。
  • Web サービス処理は非同期に呼び出され、その応答はレスポンス要素の getValue メソッドで取得されます。
  • WebServiceCallout.beginInvoke および WebServiceCallout.endInvoke は、それぞれサービスの呼び出しと応答の取得に使用されます。

[設定] で [開発] | [Apex クラス] | [WSDL からの生成] をクリックすると、Salesforce ユーザインターフェースで WSDL から Apex クラスを生成できます。

非同期 Web サービスコールアウトを実行するには、自動生成された非同期クラスのメソッドに Continuation インスタンスを渡してこれらのメソッドをコールします。次の例は、架空の株価情報サービスに基づいています。この例では、組織に WSDL インポートで自動生成された AsyncSOAPStockQuoteService というクラスがあることを想定しています。この例は、自動生成された AsyncSOAPStockQuoteService クラスを使用してサービスへの非同期コールアウトを実行する方法を示します。最初に、60 秒でタイムアウトする継続を作成し、コールバックメソッドを設定します。次に、beginStockQuote メソッドを継続インスタンスに渡して呼び出します。beginStockQuote メソッドコールは、非同期コールアウト実行に対応します。

非同期コールアウト (beginStockQuote メソッド) の応答が外部サービスから返されると、このコールバックメソッドが実行されます。応答は、応答オブジェクトに対して getValue メソッドをコールすることで取得されます。

次に、アクションおよびコールバックメソッドを含むコントローラ全体を示します。

次の例は、対応する Visualforce ページを示します。このページは startRequest メソッドを呼び出し、結果項目を表示します。

WSDL ベースの非同期コールアウトのテスト

WSDL から Apex クラスに基づく非同期コールアウトをテストするのは、HttpRequest クラスに基づくコールアウトで使用するプロセスと似ています。

次の例は、ContinuationSOAPController コントローラに対応するテストクラスです。このクラスのテストメソッドは疑似応答を設定し、疑似継続を呼び出します。コールアウトは外部サービスには送信されません。疑似コールアウトを実行するには、テストで Test クラスの setContinuationResponse(String, System.HttpResponse) および invokeContinuationMethod(Object, Continuation) メソッドをコールします。