Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

时间:2022-11-07 11:45:44

本文是关于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>&lt;fetch version="1.0" output-format="xml-platform" mapping="logical"&gt;

&lt;entity name="account"&gt;

&lt;attribute name="name" /&gt;

&lt;/entity&gt;

&lt;/fetch&gt;</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里做开发:

Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

2. 另外还可以用 Microsoft® SQL Server® 2012 报表生成器 来开发报表:

Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

三、 注意事项

下面就一个最简单的例子介绍下开发CRM报表时要注意的地方:

1. 首先建立一个数据源:

Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

2. 建立dataset:

Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

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学习笔记 系列汇总