Newer Version Available
インポートした WSDL からの非同期コールアウトの実行
Salesforce で WSDL をインポートすると、Salesforce によって、インポートされた WSDL の各名前空間用に 2 つの Apex クラスが自動生成されます。一方のクラスは同期サービス用のサービスクラスです。もう一方のクラスは、非同期サービス用に変更されたバージョンです。自動生成された非同期クラス名は、Async プレフィックスで開始し、AsyncServiceName の形式になります。ServiceName は、変更前の元のサービスクラスの名前です。非同期クラスは、次のさまざまな点で標準クラスと異なります。
- 公開サービスメソッドには、追加の Continuation パラメータが第 1 パラメータとして含まれます。
- Web サービス処理は非同期に呼び出され、その応答はレスポンス要素の getValue メソッドで取得されます。
- WebServiceCallout.beginInvoke および WebServiceCallout.endInvoke は、それぞれサービスの呼び出しと応答の取得に使用されます。
Salesforce ユーザインターフェースで WSDL から Apex クラスを生成できます。[設定] から、[クイック検索] ボックスに「Apex クラス」と入力し、[Apex クラス] を選択します。
非同期 Web サービスコールアウトを実行するには、自動生成された非同期クラスのメソッドに Continuation インスタンスを渡してこれらのメソッドをコールします。次の例は、架空の株価情報サービスに基づいています。この例では、組織に WSDL インポートで自動生成された AsyncSOAPStockQuoteService というクラスがあることを想定しています。この例は、自動生成された AsyncSOAPStockQuoteService クラスを使用してサービスへの非同期コールアウトを実行する方法を示します。最初に、60 秒でタイムアウトする継続を作成し、コールバックメソッドを設定します。次に、beginStockQuote メソッドを継続インスタンスに渡して呼び出します。beginStockQuote メソッドコールは、非同期コールアウト実行に対応します。
外部サービスが非同期コールアウト (beginStockQuote メソッド) の応答を返すと、このコールバックメソッドが実行されます。応答は、応答オブジェクトに対して getValue メソッドをコールすることで取得されます。
次に、アクションおよびコールバックメソッドを含むコントローラ全体を示します。
次の例は、対応する Visualforce ページを示します。このページは startRequest メソッドを呼び出し、結果項目を表示します。
WSDL ベースの非同期コールアウトのテスト
WSDL から Apex クラスに基づく非同期コールアウトをテストするのは、HttpRequest クラスに基づくコールアウトで使用するプロセスと似ています。ContinuationSOAPController.cls をテストする前に、WebServiceMock を実装するクラスを作成します。このクラスにより ContinuationTestForWSDL.cls の安全なテストが可能になります。ContinuationTestForWSDL.cls についてはこの後、疑似継続を作成し、テストによる実質的な影響がないことを確認する方法で作成します。
次の例は、ContinuationSOAPController コントローラに対応するテストクラスです。このクラスのテストメソッドは疑似応答を設定し、疑似継続を呼び出します。コールアウトは外部サービスには送信されません。疑似コールアウトを実行するには、テストで Test クラスの setContinuationResponse(requestLabel, mockResponse) および invokeContinuationMethod(controller, request) メソッドをコールします。