Analytics のカスタムアクション
Analytics では、テーブルウィジェットから任意の Visualforce ページを開くカスタムアクションを作成出来ます。Visualforce ページには SAQL 文が渡され、Analytics の Rest リソースにアクセスする事で、テーブルに表示されているレコードを取得する事ができます。
ユースケース
Salesforce の公式のヘルプでは、テーブルに表示される取引先に対し、Visualforce と Apex を使って一括で商談を作成する処理が紹介されています。
SALESFORCE ヘルプ - Analytics から複数の Salesforce レコードへの一括アクションの実行
サンプルコードと設定
Analytics から渡された SAQL の表示とレコードの取得を行う Visualforce ページと Apex のサンプルです。
SampleCustomActionPage.vfp
<apex:page controller="SampleCustomActionPageController" >
<script>
// SAQL クエリを取得し、エンコードしておく。
const query = '{!JSENCODE(query)}';
console.log(query);
// Analytics の REST リソースに対しクエリの発行をリクエストする。
// 結果からレコードリストを取り出し、コンソールに出力する。
fetch('https://[yourdomain]/services/data/v44.0/wave/query', {
method: 'POST',
headers: {
'Authorization': 'Bearer {!$Api.Session_ID}',
'Content-Type': 'application/json'
},
body: JSON.stringify({'query': query})
})
.then(function(response) { return response.json(); })
.then(function(json) { console.log(json.results.records); })
</script>
</apex:page>
SampleCustomActionPageController.apxc
public class SampleCustomActionPageController {
public String getQuery() { // 今回はゲッターのみ作成。VF からは {!query} でアクセス
return ApexPages.currentPage().getParameters().get('query');
}
}
作成した Visualforce ページをカスタムアクションとして登録
実行結果
- コンソールの出力結果は以下の通り。
- 1 行目は SAQL 文
- 2 行目はレコードの取得結果です。
注意点
- テーブルウィジェットで表示するレコード数は、デフォルトで 100 件(q = limit q 100)となっているが、UI 上の設定で変更で最大 10000 件(q = limit q 10000)まで取得出来ます。
- 10000 件以上取得したい場合は、取得したい件数で SAQL 文を変更する必要があります。
変更前: q = load "XXXXX/XXXXX"; q = foreach q generate 'Id' as 'Id'; q = limit q 100;
変更後: q = load "XXXXX/XXXXX"; q = foreach q generate 'Id' as 'Id'; q = limit q 20000;