- javascriptだけで実装する
- Apex + Visualforce で実装する
- Apex Web Serviceを使って実装する
のうちの、「3. Apex Web Serviceを使って実装する」です。
今回でラスト。
実装してみる
必要なものはカスタムボタンと、ボタンから実行されるApex。
実装する機能は前回までと同じく、「選択されたレコードの一括削除」です。
Apex(MultiRecordProcessWebService.cls)
global class MultiRecordProcessWebService { webService static boolean deleteByIds(List<ID> idList) { List<MyObj__c> recordList = [SELECT Id FROM MyObj__c WHERE Id IN :idList]; delete recordList; return true; } }
カスタムボタンのjavascript
{!REQUIRESCRIPT("/soap/ajax/30.0/connection.js")} {!REQUIRESCRIPT("/soap/ajax/30.0/apex.js")} // 選択したレコードのID var ids = {!GETRECORDIDS($ObjectType.Myobj__c)}; if (ids.length) { var result = sforce.apex.execute( 'MultiRecordProcessWebService', // class 'deleteByIds', // method {idList : ids} // method arguments ); alert('succeeded : ' + result); window.location.reload(); } else { alert('レコードを選択して下さい'); }
というわけで、非常にシンプル。
よい点
- サーバサイドはApexだけでよい
- 引数や処理したい内容の自由度が高い
悪い点
- テストを書くのが面倒?
※webServiceを利用したコードはテストの時にちょっと注意しないといけないので、後で書く。
※※2014/06/24追記※※
どうやら、テストは普通のメソッドのテストと同じように書けますね。。。
このページ見て、モックが必要とかなんとか書いてるからそういうことなのかと思ってましたが。
↑ が何を指してるのかは時間があれば調べてみたい。