Salesforce Connect カスタムアダプターの集計
COUNT() クエリを受信すると、選択された列の aggregation プロパティの値が QueryAggregation.COUNT になります。選択された列は、DataSource.QueryContext の tableSelection の columnsSelected プロパティで指定されます。
次の例は、aggregation プロパティの値を適用して COUNT() クエリを処理する方法を示しています。
1// Handle COUNT() queries
2if (context.tableSelection.columnsSelected.size() == 1 &&
3 context.tableSelection.columnsSelected.get(0).aggregation ==
4 QueryAggregation.COUNT) {
5 List<Map<String, Object>> countResponse = new List<Map<String, Object>>();
6 Map<String, Object> countRow = new Map<String, Object>();
7 countRow.put(context.tableSelection.columnsSelected.get(0).columnName,
8 response.size());
9 countResponse.add(countRow);
10 return countResponse;
11}集計クエリには検索条件を設定できるため、次の例のようにクエリメソッドを実装して、基本的な aggregation クエリを (検索条件の有無を問わず) サポートできます。
1override global DataSource.TableResult query(DataSource.QueryContext context) {
2 List<Map<String,Object>> rows = retrieveData(context);
3 List<Map<String,Object>> response = postFilterRecords(
4 context.tableSelection.filter, rows);
5 if (context.tableSelection.columnsSelected.size() == 1 &&
6 context.tableSelection.columnsSelected.get(0).aggregation ==
7 DataSource.QueryAggregation.COUNT) {
8 List<Map<String, Object>> countResponse = new List<Map<String,
9 Object>>();
10 Map<String, Object> countRow = new Map<String, Object>();
11 countRow.put(context.tableSelection.columnsSelected.get(0).columnName,
12 response.size());
13 countResponse.add(countRow);
14 return DataSource.TableResult.get(context, countResponse);
15 }
16 return DataSource.TableResult.get(context, response);
17}