Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项
本文是关于CRM 2013报表开发入门介绍,包括开发工具的使用,以及不同于普通Reporting service的相关注意事项。
一、CRM报表简介
报表有两种,SQL-based报表和Fetch-based报表,区别如下:
区域 | SQL-based 报表 | Fetch-based 报表 |
Data Provider |
<DataProvider> 元素的值设置为SQL. 示例如下:<DataProvider>SQL</DataProvider> |
报表RDL文件中的 <DataProvider> 元素的值设置为MSCRMFETCH. 示例如下:<DataProvider>MSCRMFETCH</D taProvider> |
Report query |
报表RDL文件中的<Query>元素下<CommandText>子元素获取数据用的查询语句是一个SQL查询语句。比如下面这个SQL语句就是查询所有客户的name列:<CommandText>SELECT name FROM FilteredAccount;</CommandText> |
报表RDL文件中的<Query>元素下<CommandText>子元素获取数据用的查询语句是一个SQL查询语句。比如下面这个查询语句就是查询所有客户的name列:<CommandText><fetch version="1.0" output-format="xml-platform" mapping="logical"> <entity name="account"> <attribute name="name" /> </entity> </fetch></CommandText> |
部署范围 | 仅能部署到on-premises Microsoft Dynamics CRM | 能部署到Microsoft Dynamics CRM Online 和on-premises Microsoft Dynamics CRM |
创建SQL-based报表只能使用系统中的Filtered Views,自定义的实体也会自动创建和更新其对应的Filtered View,一般命名规则是Filtered 加上实体的架构名称,比如客户Account实体对应的Filtered view便是FilteredAccount。可以直接到名称为 <organization_name>_MSCRM 的数据库的View节点中去查看视图的定义,数据等等。Filtered Views会自动应用安全性,通过该视图查看数据只能看到你能看到的数据。对Filtered Views的说明如下:
1. 所有的视图列名都是小写的。
2. 对于数据类型是选项集的列,Filtered Views会有两列和这样的列对应,一个列是这个选项集的值,一个列是这个选项集的显示文本。比如潜在客户lead这个实体的属性LeadSource数据类型是选项集,Filtered Views会有leadsource列来对应选项集的值,leadsourcename列来对应选项集的显示文本。
3. 对于数据类型是DateTime的列。Filtered Views会有两列和这样的列对应,一个列对应显示适合于你的时区的日期时间,另一个列对应的是UTC时间,一般会加上utc。比如记录创建时间字段createdon就记载的是适合你看的时间,我们默认是东八区,而createdonutc则是记载的是UTC时间,是东八区的时间减去8个小时。
二、 开发工具
1. 我们以前开发报表是用的Business Intelligence Development Studio,但SQL Server 2012里没有这个了,取而代之的是SQL Server Data Tools,实际上也是在vs里做开发:
2. 另外还可以用 Microsoft® SQL Server® 2012 报表生成器 来开发报表:
三、 注意事项
下面就一个最简单的例子介绍下开发CRM报表时要注意的地方:
1. 首先建立一个数据源:
2. 建立dataset:
3. 注意事项:
SELECT TOP 1
u.FullName ,
mad.new_rate
FROM dbo.Filterednew_material_apply_order CRMAF_ma
JOIN dbo.Filterednew_material_apply_details mad ON CRMAF_ma.new_material_apply_orderId = mad.new_material_apply_order
LEFT JOIN dbo.FilteredSystemUser u ON CRMAF_ma.CreatedBy = u.SystemUserId
- 这里的sql 语句用到的是filtered view,所以都是以Filtered开头的, 上段代码中标红色的地方
- 其中主视图的别名是以CRMAF_开头,标蓝色的地方,这里表示只取当前数据行
- 用上面的sql语句,你会发现没有数据出来,因为这时你没指定是哪个用户,为了测试,我们可以在这段sql之前,加上下面的语句以指定是哪个用户:
DECLARE @binUserGuid VARBINARY(128)
DECLARE @userGuid UNIQUEIDENTIFIER
SELECT @userGuid = ( SELECT TOP 1
SystemUserId
FROM SystemUser
WHERE DomainName = 'CRM\123456'
)
SET @binUserGuid = CAST(@userGuid AS VARBINARY(128))
SET context_info @binUserGuid
注意把上面的CRM\123456换成你想要的用户名;另外测试完没问题后,记得把它去掉,再发布到CRM系统中。
Dynamic CRM 2013学习笔记 系列汇总