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

サーバ側のアクションのコール

クライ��ント側コントローラからサーバ側コントローラのアクションをコールします。クライアント側コントローラにコールバックを設定し、サーバ側のアクションが完了したときにコールされるようにします。サーバ側のアクションは、逐次化可能な JSON データを含む任意のオブジェクトを返すことができます。

クライアント側コントローラは、名前-値のペアを含む、オブジェクトリテラル表記の JavaScript オブジェクトです。この名前はそれぞれクライアント側のアクションに対応します。この値は、アクションに関連付けられた関数コードです。

コンポーネントからサーバコールをトリガするとします。次のコンポーネントには、クライアント側コントローラの echo アクションに接続されるボタンが含まれます。SimpleServerSideController には、クライアント側コントローラから渡される文字列を返すメソッドが含まれます。

1<aura:component controller="SimpleServerSideController">
2    <aura:attribute name="firstName" type="String" default="world"/>
3    <ui:button label="Call server" press="{!c.echo}"/>
4</aura:component>

次のクライアント側コントローラには、サーバ側コントローラで serverEcho メソッドを実行する echo アクションが含まれます。クライアント側コントローラに、サーバ側のアクションが返されたら呼び出されるコールバックアクションを設定します。この場合、コールバック関数がユーザにサーバから返された値を含むアラートを表示します。action.setParams({ firstName : cmp.get("v.firstName") }); は、コンポーネントから firstName 属性を取得して、サーバ側コントローラの serverEcho メソッドに firstName 引数の値を設定します。

1({
2    "echo" : function(cmp) {
3        // create a one-time use instance of the serverEcho action
4        // in the server-side controller
5        var action = cmp.get("c.serverEcho");
6        action.setParams({ firstName : cmp.get("v.firstName") });
7
8        // Create a callback that is executed after 
9        // the server-side action returns
10        action.setCallback(this, function(response) {
11            var state = response.getState();
12            // This callback doesn’t reference cmp. If it did,
13            // you should run an isValid() check
14            //if (cmp.isValid() && state === "SUCCESS") {
15            if (state === "SUCCESS") {
16                // Alert the user with the value returned 
17                // from the server
18                alert("From server: " + response.getReturnValue());
19
20                // You would typically fire a event here to trigger 
21                // client-side notification that the server-side 
22                // action is complete
23            }
24            //else if (cmp.isValid() && state === "ERROR") {
25            else if (state === "ERROR") {
26                var errors = response.getError();
27                if (errors) {
28                    if (errors[0] && errors[0].message) {
29                        console.log("Error message: " + 
30                                 errors[0].message);
31                    }
32                } else {
33                    console.log("Unknown error");
34                }
35            }
36        });
37
38        // optionally set abortable flag here
39
40        // A client-side action could cause multiple events, 
41        // which could trigger other events and 
42        // other server-side action calls.
43        // $A.enqueueAction adds the server-side action to the queue.
44        $A.enqueueAction(action);
45    }
46})

クライアント側コントローラでは、c の値プロバイダを使用してサーバ側コントローラのアクションを呼び出します。この構文は、クライアント側コントローラのアクションを呼び出すためにマークアップで使用するものと同じです。cmp.get("c.serverEcho") コールは、サーバ側コントローラで serverEcho メソッドをコールしていることを示します。サーバ側コントローラのメソッド名は、クライアント側のコールの c. に続く内容と完全に一致している必要があります。

コンポーネント内のクライアント側アクションとサーバ側アクションには一意の名前を使用します。JavaScript 関数 (クライアント側アクション) とサーバ側アクション (Apex メソッド) が同じ名前だと、問題が発生したときにデバッグしにくくなるおそれがあります。

ヒント

$A.enqueueAction(action) は、サーバ側コントローラのアクションを、実行されるアクションのキューに追加します。この方法でキューに追加されたアクションはすべて、イベントループの最後に実行されます。フレームワークでは、個々のアクションごとに個別の要求を送信するのではなく、イベントチェーンを処理し、関連する要求をバッチにまとめてからキューのアクションを実行します。これらのアクションは非同期で、コールバックが設定されています。

コールバックやタイムアウトなど非同期コードのコンポーネントを参照する場合は、常に isValid() チェックを追加します。UI の別の場所で操作をしている間に非同期コードが実行されると、フレームワークは、非同期要求を実行したコンポーネントを非表示にして破棄します。引き続きそのコンポーネントが参照されますが、コンポーネントは無効になっています。isValid() コールを追加し、非同期要求の結果を処理する前にコンポーネントがまだ有効であることをチェックします。

メモ

アクションが実行されない場合、フレームワークの通常の表示ライフサイクル外のコードを実行していないことを確認してください。たとえば、イベントハンドラで window.setTimeout() を使用して一部のロジックを遅延実行する場合は、コードを $A.getCallback() でラップする必要があります。コードがフレームワークのコールスタックの一部として実行される場合は、$A.getCallback() を使用する必要はありません。たとえば、コードがイベントを処理している場合や、サーバ側のコントローラアクションのコールバックにある場合です。

ヒント

アクションの状態

アクションの有効な状態は次のとおりです。

NEW (新規)
アクションが作成されていますが、まだ処理されていません。
RUNNING (実行中)
アクションを処理中です。
SUCCESS (成功)
アクションが正常に実行されました。
ERROR (エラー)
サーバからエラーが返されました。
ABORTED (中止)
アクションが中止されました。

setCallback() には、コールバックを呼び出すアクション状態を登録する 3 つ目のパラメータがあります。setCallback() に 3 つ目の引数を指定しないと、デフォルトで SUCCESS および ERROR 状態が登録されます。ABORTED など別の状態のコールバックを設定するには、3 つ目の引数でアクションの状態を明示的に設定した setCallback() を複数回コールできます。次に例を示します。

1action.setCallback(this, function(response) { ...}, "ABORTED");

メモ