読者です 読者をやめる 読者になる 読者になる

tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:LightningからApexへのオブジェクト型値渡し

salesforce.com Force.com Lightning

Lightning Componentではaura:attributeでsObject型の変数を用意することができます。
f:id:tyoshikawa1106:20150922040707p:plain


画面入力などで変数にセットした値は、JS側でcomponent.getを使って取得することができます。
f:id:tyoshikawa1106:20150922040404p:plain


console.logで確認した変数の値です。
f:id:tyoshikawa1106:20150922040917p:plain


Apexクラスを呼び出す方法は次のような感じになります。setParamsで特定の変数に値をセットできます。
f:id:tyoshikawa1106:20150922041339p:plain


・・・ですが、sObject型の値を直接渡すことはできないみたいです。
f:id:tyoshikawa1106:20150922041428p:plain


試しにデバッグしてみたところ、次のエラーが発生しました。
f:id:tyoshikawa1106:20150922041738p:plain


対応方法ですが、RemoteActionのときにも利用できたJSONに変換する方法がいいのかなと思います。(RemoteActionはJSONじゃなくてもオブジェクト型そのまま渡せるようになっているみたいです。)


Apexクラス側の引数にはString型を指定します。
f:id:tyoshikawa1106:20150922042816p:plain


Lightning側ではJSON.stringify()をつかってJSON変換します。
f:id:tyoshikawa1106:20150922042925p:plain


デバッグした結果がこちらです。この方法なら1つの変数で複数の値を渡すことができます。
f:id:tyoshikawa1106:20150922043050p:plain


あとはApex側でMapに変換して処理していけるかなと思います。とりあえず確認できた方法はこんな感じですが、もっと簡単な方法があるのかも...。

追記

あとで分かったことなんですが、このエラーはEventオブジェクトだと発生するみたいで、その他のオブジェクトはそのまま渡せるみたいです。とりあえずAccountでそのまま渡せることを確認できました。また、開発者ガイドでもカスタムオブジェクトを渡して実装いていました。


ということでEventオブジェクトを扱うときはこのエラーに注意しましょうという感じでした。(Summer'15の環境で発生したエラーです。)


Twitterで教えて貰った検証用のサンプルコードです。

myfirstltng.cmp · GitHub

その他の参考記事