Salesforceのカスタムボタンやカスタムリンクを作成するとき、JavaScriptを実行することができます。これを利用してApexクラスの処理を実行することも可能です。
カスタムボタンでApexを実行したい場合、次の宣言が必要になります。
{!REQUIRESCRIPT("/soap/ajax/<APIバージョン>/connection.js")} {!REQUIRESCRIPT("/soap/ajax/<APIバージョン>/apex.js")}
Apex処理を呼び出す処理はこのようになります。
var result = sforce.apex.execute ( <クラス名>, <メソッド名>, { // 引数があれば.. } );
例)
{!REQUIRESCRIPT("/soap/ajax/38.0/connection.js")} {!REQUIRESCRIPT("/soap/ajax/38.0/apex.js")} var result = sforce.apex.execute ( "UserWebService", "changeLanguage", { } ); if ( result == ""){ location.reload(); } else { alert(result); location.reload(); }
JavaScriptから呼び出すApexをつくるときはWebServiceを利用します。次のような感じです。
global with sharing class UserWebService { WebService static String changeLanguage() { try { // ログインユーザの情報取得 User user = getLoginUserInfo(); // 現在の言語の判定と変更後の言語をセット user = setUserLanguage(user); // 更新 update user; } catch (Exception e) { return 'システムエラーが発生しました。'; } return ''; } // 略... }
クラスにはglobalを宣言してメソッド名にはWebServieとstaticを宣言します。
利用例
例えばユーザの言語を更新するようなカスタムボタンを用意したりできます。JavaScriptなので画面のリフレッシュや別ページへの移動などの処理を追加することもできます。
このような感じでApexと組み合わせることでカスタムボタン/カスタムリンクでできる幅が広がります。注意点としてJavaScriptからApexを呼び出すにはSalesforceAPIを消費することになります。組織のAPI消費数の制限に注意して設計する必要があります。