Salesforce报表开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Salesforce报表开发Salesforce提供了强⼤的报表功能,⽀持表格、摘要、矩阵以及结合共四种形式,本⽂探讨在站在开发的⾓度要如何理解报表。
⼀:查询报表基本信息
报表在Sales force中是Report对象,基本的查询语句可以获取⼀些报表的基本信息
1select id,Name,CreatedById,ername,LastModifiedDate,FolderName from Report
⼆:在Apex类中运⾏报表
Salesforce分别提供了runReport(同步)以及runAsyncReport(异步)两种⽅式运⾏报表
1//同步⽅法:
2 Reports.ReportResults results = Reports.ReportManager.runReport(reportId,true);
3//异步⽅法
4 Reports.ReportInstance instance = Reports.ReportManager.runAsyncReport(m.id, true);
我们写⼀段静态代码来执⾏打印报表数据
1 String reportId = '报表id';
2 Reports.ReportResults results = Reports.ReportManager.runReport(reportId,true);
3 System.debug('===========报表运⾏结果========>>');
4 System.debug(results);
需要注意的有两点
没选中任何列的情况下运⾏报错
结合报表不⽀持
没有选中任何列的报表指的如下图所⽰
运⾏结果:reports.MetadataException: ⽆法运⾏报表,因为它尚未选择任何列。
确保通过⽤户界⾯向报表添加字段作为列
⾄少需要添加⼀个字段到该报表,之后隐藏详细记录,即可实现同样的效果。
如果报表类型是结合报表,运⾏上述代码回提⽰错误
在避开上述两个易出现的问题后,就能成功⽤apex⽅法执⾏⼀个报表并得到它的返回值results了。
Results返回值是⼀个JSON串,ReportResults对象,包含属性
allData:标识
factMap:Map<坐标,数据>存放数据的map
groupingsAcross:横向分组字段
groupingsDown:纵向分组字段
hasDetailRows:是否有数据
reportExtendedMetadata:表头
reportMetadata:其他信息
实际返回值结构如下
1 Reports.ReportResults[ 2//public Boolean getAllData()
3//true, indicates that all report results are returned.
4//false, indicates that results are returned for the same number of rows as in a report run in Salesforce.
5 allData=true,
6//public MAP<String,Reports.ReportFact> getFactMap()
7 factMap={},//对象,⽆序键值对
8//public Reports.Dimension getGroupingsAcross()
9//Returns a collection of column groupings, keys, and values.
10 groupingsAcross=Reports.Dimension[],
11//public Reports.Dimension getGroupingsDown()
12//Returns a collection of row groupings, keys, and values
13 groupingsDown=Reports.Dimension[],
14//public Boolean getHasDetailRows()
15//Returns information about whether the fact map has detail rows
16//true, indicates that the fact map returns values for summary-level and record-level data.
17//false, indicates that the fact map returns summary values.
18 hasDetailRows=true,
19//public Reports.ReportExtendedMetadata getReportExtendedMetadata()
20//Returns additional, detailed metadata about the report, including data type and label information for groupings and summaries.
21 reportExtendedMetadata=Reports.ReportExtendedMetadata[],
22//public Reports.ReportMetadata getReportMetadata()
23//Returns metadata about the report, including grouping and summary information
24 reportMetadata=Reports.ReportMetadata[]
25 ]
其中factMap以⽆序键值对的形式存储了所有报表数据,groupingsAcross和groupingsDown存储了报表的横纵字段信息,reportExtendedMetadata记录了包括报表横纵分组信息在内的相关信息,reportMetadata则记录了表格类型,分组长度等信息。
1.查看报表类型
1 Reports.ReportMetadata metadata = results.getReportMetadata();
2 String reportType = '' + metadata.getReportFormat();
3if(reportType == 'TABULAR'){
4 System.debug('该报表为表格类型');
5 }
6if(reportType == 'SUMMARY'){
7 System.debug('该报表为摘要类型');
8 }
9if(reportType == 'MATRIX'){
10 System.debug('该报表为矩阵类型');
11 }
2.报表数据获取
factMap最多⽀持2*2的矩阵类型,在表格数据的展⽰上如上表所⽰,数据显⽰格式 *_*!*_*
其中,如果遇到⼩计/总计的数据,对应的点⽤T(Total)进⾏标识,⽐如最后横纵交汇的点就是T!T
3.报表分组信息的获取
1 Reports.ReportExtendedMetadata extended_metadata = results.getReportExtendedMetadata();
1 Reports.ReportExtendedMetadata[
2//public MAP<String,Reports.AggregateColumn> getAggregateColumnInfo()
3//Returns all report summaries such as Record Count, Sum, Average, Max, Min, and custom summary formulas. Contains values for each summary that is listed in the report metadata.
4 aggregateColumnInfo={},//汇总信息
5//public MAP<String,Reports.DetailColumn> getDetailColumnInfo()
6//Returns a map of two properties for each field that has detailed data identified by its unique API name. The detailed data fields are also listed in the report metadata.
7 detailColumnInfo={},//详细信息
8//public MAP<String,Reports.GroupingColumn> getGroupingColumnInfo()
9//Returns a map of each row or column grouping to its metadata. Contains values for each grouping that is identified in the groupingsDown and groupingsAcross lists.
10 groupingColumnInfo={}//分组字段
11 ]
横纵向的两个分组字段信息可以从groupingColumInfo中获取,包括了字段的类型,名称,标签以及分组级别
4.每个分组下对应显⽰的字段
1 Reports.Dimension dim_Across = results.getGroupingsAcross();
2 List<Reports.GroupingValue> list_gr = dim_Across.getGroupings();
3 System.debug('横向' + list_gr);
4 Reports.Dimension dim_Down = results.getGroupingsDown();
5 List<Reports.GroupingValue> list_gr_down = dim_Down.getGroupings();
6 System.debug('纵向' + list_gr_down);
5.其他报表信息查询
1 Reports.ReportMetadata metadata = results.getReportMetadata();
Reports.ReportMetadata提供了关于报表的所有信息,⽐如报表的id,Name,报表类型,汇总字段,⾏列分组以及汇总信息依据。
我们甚⾄可以⽤来修改报表的汇总信息条件。
尤为重要的是其提供了groupingsAcross数组,从⽽能确定报表的分组排列⽅式,下⾯是我抽取的⼀段JSON数据,可以看到报表的分组形式横向分别是订单类型(ORDER_TYPE),订单所有⼈(ORDER_OWNER),纵向分组是订单状态(ORDER_STATUS),订单等级(Order.DeliveryLevel__c)。
1 groupingsAcross=(Reports.GroupingInfo[
2 dateGranularity=NONE,
3 name=ORDER_TYPE,
4 sortAggregate=null,
5 sortOrder=ASCENDING
6 ],
7 Reports.GroupingInfo[
8 dateGranularity=NONE,
9 name=ORDER_OWNER,
10 sortAggregate=null,
11 sortOrder=ASCENDING
12 ]),
13 groupingsDown=(Reports.GroupingInfo[
14 dateGranularity=NONE,
15 name=ORDER_STATUS,
16 sortAggregate=null,
17 sortOrder=ASCENDING
18 ],
19 Reports.GroupingInfo[
20 dateGranularity=NONE,
21 name=Order.DeliveryLevel__c,
22 sortAggregate=null,
23 sortOrder=ASCENDING
24 ]),
Salesforce提供了强⼤的报表功能,但是作为开发者也应该了解其内部的数据存储,希望本⽂对你能有所帮助。
如有错漏,欢迎指正,有问题可以留⾔。