【Salesforce】AJAX Toolkitを使う
Visualforceページでレコードを扱う場合、コントローラを使うのが一般的ですね。
個人的にはそれが便利だと思うのですが、コントローラを使用せずにVisualforceページを作って欲しいという要望がありました。
その割にStandardControllerのみでは実現できない要求をされてしまったため、Javascriptで実現することにしました。
具体的には、AJAX ToolKitを利用します。
https://developer.salesforce.com/docs/atlas.en-us.ajax.meta/ajax/sforce_api_ajax_introducing.htm
Visualforceページでの使い方はこちらに書いてあります。
https://developer.salesforce.com/docs/atlas.en-us.206.0.ajax.meta/ajax/sforce_api_ajax_vf_sample.htm
とりあえずコードです。
<apex:page >
<!-- connection.jsをインクルードする -->
<script src="../../soap/ajax/40.0/connection.js" type="text/javascript"></script>
<!-- 実際の処理 -->
<script type="text/javascript">
// レコードを取得する
function selectAccountList(){
var result;
var query;
var callback;
// クエリを作成する
query = '';
query += ' select ';
query += ' Id, ';
query += ' Name ';
query += ' from ';
query += ' Account ';
// クエリを発行する
result = sforce.connection.query(query);
// 成功時処理を行う
success(result.records);
}
// 成功時処理
function success(records){
var i;
alert(records.length + '件');
for(i = 0; i < records.length; i++){
var id;
var name;
id = records[i].Id;
name = records[i].Name;
// 何らかの処理
}
}
// 取引先を取得する
window.onload = function(){
// セッションIDを設定する
sforce.connection.sessionId='{!GETSESSIONID()}';
// 取引先を取得する
selectAccountList();
};
</script>
</apex:page>
ざっくりとこんな流れです。
1. connection.jsをインクルードする
2. セッションIDを設定する
3. クエリを発行する
4. 取得したレコードを処理する
エラーの場合はExceptionが飛ぶようです。
コールバックを設定することで非同期でも実行することが出来ます。
<apex:page >
<!-- connection.jsをインクルードする -->
<script src="../../soap/ajax/40.0/connection.js" type="text/javascript"></script>
<!-- 実際の処理 -->
<script type="text/javascript">
// レコードを取得する
function selectAccountList(){
var query;
var callback;
// クエリを作成する
query = '';
query += ' select ';
query += ' Id, ';
query += ' Name ';
query += ' from ';
query += ' Account ';
// クエリを発行する
sforce.connection.query(
query,
{
// 成功時処理
onSuccess: success,
// エラー時処理
onFailure: failure,
// コールバックで使用する値
source: {}
});
}
// 成功時処理
function success(queryResult, source){
var i;
alert(queryResult.records.length + '件');
for(i = 0; i < queryResult.records.length; i++){
var id;
var name;
id = queryResult.records[i].Id;
name = queryResult.records[i].Name;
// 何らかの処理
}
}
// エラー時処理
function failure(error, source){
alert('エラー:' + error.faultstring);
}
// 取引先を取得する
window.onload = function(){
// セッションIDを設定する
sforce.connection.sessionId='{!GETSESSIONID()}';
// 取引先を取得する
selectAccountList();
};
</script>
</apex:page>
こちらはエラーが発生した場合はonFailureの処理が実行されます。
エラーの処理はこちらの方が便利そうです。
使ってみればすぐに分かると思います。
たまにセッションIDを設定し忘れることがあるので注意が必要ですね。
No comments.