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

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

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

クライアント側コントローラは、名前-値のペアの対応付けを含む、オブジェクトリテラル表記の JavaScript オブジェクトです。

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

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

このクライアント側コントローラには、サーバ側コントローラで serverEcho メソッドを実行する echo アクションが含まれます。

コンポーネント内のクライアント側アクションとサーバ側アクションには一意の名前を使用します。JavaScript 関数 (クライアント側アクション) と Apex メソッド (サーバ側アクション) が同じ名前だと、問題が発生したときにデバッグしにくくなるおそれがあります。デバッグモードでは、フレームワークによって、クライアント側アクション名とサーバ側アクション名の競合に関するブラウザコンソールの警告が記録されます。

ヒント

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            if (state === "SUCCESS") {
13                // Alert the user with the value returned 
14                // from the server
15                alert("From server: " + response.getReturnValue());
16
17                // You would typically fire a event here to trigger 
18                // client-side notification that the server-side 
19                // action is complete
20            }
21            else if (state === "INCOMPLETE") {
22                // do something
23            }
24            else if (state === "ERROR") {
25                var errors = response.getError();
26                if (errors) {
27                    if (errors[0] && errors[0].message) {
28                        console.log("Error message: " + 
29                                 errors[0].message);
30                    }
31                } else {
32                    console.log("Unknown error");
33                }
34            }
35        });
36
37        // optionally set storable, abortable, background flag here
38
39        // A client-side action could cause multiple events, 
40        // which could trigger other events and 
41        // other server-side action calls.
42        // $A.enqueueAction adds the server-side action to the queue.
43        $A.enqueueAction(action);
44    }
45})

クライアント側コントローラでは、c の値プロバイダを使用してサーバ側コントローラのアクションを呼び出します。また、マークアップでこの c 構文を使用して、クライアント側コントローラのアクションも呼び出します。

cmp.get("c.serverEcho") コールは、サーバ側コントローラで serverEcho メソッドをコールしていることを示します。サーバ側コントローラのメソッド名は、クライアント側のコールの c. に続く内容と完全に一致している必要があります。この場合、それは serverEcho です。

serverEcho Apex メソッドの実装は「Apex サーバ側コントローラの概要」で示されています。

action.setParams() を使用して、サーバ側コントローラに渡されるデータを設定します。次のコールは、firstName 属性値に基づいて、サーバ側コントローラの serverEcho メソッドで firstName 引数の値を設定します。

1action.setParams({ firstName : cmp.get("v.firstName") });

action.setCallback() は、サーバ側のアクションが返されたら呼び出されるコールバックアクションを設定します。

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

サーバ側のアクションの結果は、コールバックの引数である response 変数に格納されます。

response.getState() は、サーバから返されたアクションの状態を取得します。

クライアント側コントローラに関連付けられたコンポーネントを参照する場合、クライアント側コントローラのコールバックで cmp.isValid() チェックは必要ありません。コンポーネントが無効であることがフレームワークによって自動的にチェックされます。

メモ

response.getReturnValue() は、サーバから返された値を取得します。この例では、コールバック関数がユーザにサーバから返された値を含むアラートを表示します。

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

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

ヒント

クライアントペイロードデータ制限

サーバ側コントローラに渡すアクションのデータを設定するには、action.setParams() を使用します。

フレームワークでは、キュー内にあるアクションを 1 つのサーバ要求にまとめます。要求ペイロードには、すべてのアクションとそのデータが JSON として逐次化されます。要求ペイロードの制限は 4 MB です。