Salesforceの @RemoteAction について共有します。
特徴
・ JavaScriptからApexクラスの処理を実行できます。
・ actionFunctionと同じような機能ですが、こちらはJavaScript内で処理の戻り値を使用できます。
例えば取引先取得処理を実行して取得した取引先リストを使用した処理を行うことができます。
サンプルコード
・Apexクラス
global with sharing class SampleRemoteController { @RemoteAction global static String setString(String str) { return '----- ' + str + ' -----'; } @RemoteAction global static List<sObject> exequery(String str){ return Database.query(str); } }
・Visualforceページ
<apex:page controller="SampleRemoteController"> <apex:form > <!-- @RemoteActionSample:StringSet --> <apex:commandButton value=" String " onClick="return setString('Yaho');" /> <!-- @RemoteActionSample:SOQLGet --> <apex:commandButton value=" GetAcc " onClick="return getAcc();" /> <hr/> <div id="output">Output</div> </apex:form> <script type="text/javascript"> /* * @RemoteActionSample * StringSet */ function setString(str) { {!$RemoteAction.SampleRemoteController.setString}(str, function(result, event){ if(event.status) { document.getElementById("output").innerHTML = result; } }); return false; } /* * @RemoteActionSample * SOQLAccountGet */ function getAcc() { var query = 'select Id,Name from Account limit 10'; {!$RemoteAction.SampleRemoteController.exequery}(query, function(result, event){ if(event.status) { var names = ''; for (var i = 0; i < result.length; i++) { names = names + result[i].Name + ' | '; } document.getElementById("output").innerHTML = names; } }); return false; } </script> </apex:page>