非同期コールアウトを使用するプロセス
アクションメソッドでの非同期コールアウトの呼び出し
非同期コールアウトを呼び出すには、Visualforce アクションメソッドで Continuation インスタンスを使用して、外部サービスをコールします。継続を作成する場合は、タイムアウト値およびコールバックメソッドの名前を指定できます。たとえば、次のコードは、タイムアウト値を 60 秒、コールバックメソッド名を processResponse とする継続を作成します。
1Continuation cont = new Continuation(60);
2cont.continuationMethod = 'processResponse';次に、Continuation オブジェクトを外部コールアウトに関連付けます。関連付けるには、HTTP 要求を作成し、次のとおりこの要求を継続に追加します。
1String requestLabel = cont.addHttpRequest(request);コールアウト (アクションメソッド) を呼び出すメソッドは、システムがコールアウトを送信した後に現在の要求を一時停止し、コールアウト応答を待機するよう Visualforce に指示する Continuation オブジェクトを返す必要があります。Continuation オブジェクトは、実行されるコールアウトの詳細を保持します。
次はコールアウトを呼び出すメソッド���署名です。戻り値が Object 型の場合は、Continuation を表します。
1public Object calloutActionMethodName()コールバックメソッドの定義
外部サービスがコールアウトの処理を完了すると、応答が返されます。コールアウトが返された後に非同期実行するためのコールバックメソッドを指定できます。このコールバックメソッドは、コールアウト呼び出しメソッドが定義されたコントローラクラスで定義される必要があります。Visualforce ページに表示する応答の取得など、返された応答を処理するコールバックメソッドを定義できます。
コールバックメソッドは引数を取らず、次の署名が示されます。
1public Object callbackMethodName()戻り値が Object 型の場合は、Continuation、PageReference、null のいずれかを表します。元の Visualforce ページを表示して、Visualforce 要求を完了するには、コールバックメソッドで null を返します。
アクションメソッドで JavaScript Remoting を使用する場合は (@RemoteAction で付加)、コールバックメソッドが静的である必要があり、サポートされている次の署名が示されます。
1public static Object callbackMethodName(List< String> labels, Object state)または
1public static Object callbackMethodName(Object state)システムがコールバックメソッドを呼び出し、実行されたコールアウト要求に関連付けられている表示ラベルを保持する場合は、labels パラメータがシステムによって指定されます。コントローラの Continuation.state プロパティを設定すると、state パラメータが指定されます。
次の表は、コールバックメソッドの戻り値の一覧です。戻り値はそれぞれ異なる動作に対応します。
| コールバックメソッドの戻り値 | 要求のライフサイクルと結果 |
|---|---|
| null | システムが Visualforce ページ要求を完了して、元の Visualforce ページ (またはその一部) を表示します。 |
| PageReference | システムが Visualforce ページ要求を完了して、新しい Visualforce ページにリダイレクトします。 (PageReference のクエリパラメータを使用して、Continuation の結果を新しいページに渡します)。 |
| Continuation | システムが Visualforce 要求を再度一時停止して、新しいコールアウトの応答を待機します。コールバックメソッドの新しい Continuation を返して、非同期コールアウトをチェーニングします。 |