Dynamics 365基于FetchXml的S S R S报表开发实例

我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复449或者20210707可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

前面的博文 Dynamics 365报表开发之安装Report Authoring Extension 讲了工具的安装,今天我们来做个报表,做个基于客户实体的报表,展示该客户下面的联系人,并且为联系人名字做个超链接可以点击。这里我会做两个报表,一个父报表,一个子报表。

主要的官方文档可以参考 Report writing guide for Dynamics 365 Customer Engagement (on-premises), version 9.xAdd report navigationUse parameters in reportsPublish reports using the web applicationBest practices for reports 。还有一些非官方文章也很值得参考:Create an S S RS report for Dynamics 365 – Part 1Create an S S R S Report for Dynamics 365 – Part 2.

首先添加一个项目,项目类型为 Report Server Project,

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

右击Reports文件夹,选择 Add > New Item... 。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

选择 Report 这个类型,输入个合适名字,点击 Add 按钮

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

如果刚才新增的Report没有打开的话双击打开,然后在左边的 Data Sources 文件夹上右击选择 Add Data Source.

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

在Data Source Properties这个窗口的General Tab中,Name我一般取名为D365DataSource,Embedded connection的Type请选择 Microsoft Dynamics 365 Fetch, 然后Connection string我输入的是 https://luoweidemo.crm5.dynamics.com;unqa38a904d9ebf43cd9aab92098bb67 。这个connection string分号分隔的前面部分好理解,就是访问的URL,后面这串数字则来自Advanced Settings > Customizations > Developer Resources 页面中的Unique Name的值,如后图。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后就是设置好连接用的Credentials,如下图,点击OK按钮保存并关闭。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

然后我需要新建一个Data Set,这是用来展示客户的信息,我这里使用的FetchXml如下,需要注意到增加了 enableprefiltering="1"这个属性,而且FetchXml中不要包括filter元素。

<fetch version="1.0" mapping="logical" distinct="false">
  <entity name="account" enableprefiltering="1">>
    <attribute name="name" />
    <attribute name="primarycontactid" />
    <attribute name="telephone1" />
    <attribute name="accountid" />
  </entity>
</fetch>

 

右击左边Data Sources下面的Datasets,选择Add Dataset,弹出的Dataset Properties窗体如下,名字命名成有意义的,选择 Use a dataset embedded in my report,Data source选择前面步骤的创建的D365DataSource,Query type选择Text,用前面的FetchXml,然后点击 OK 按钮关闭。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

可以看到新建的Dataset如下图:

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

通过左边的 Toolbox,拉一个 List 组件到右边的报表中,设置该List组件对应的Tablix的 DataSetName 属性为 AccountDataSet ,然后将要的字段拖动到 List组件中。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

点击Preview可以预览如下:

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后需要添加另外一个报表作为子报表,我命名为 AccountContactReport,方法类似不再重复,Data Source的设置同父报表, Dataset我用FetchXml的如下,因为我是用来做子报表的,所以不需要添加enableprefiltering="1"这个属性,而且也要保留适当的filter,当然父记录ID这个筛选我就换成了一个参数,到时候由父报表传递过来。

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="contact">
    <attribute name="fullname" />
    <attribute name="telephone1" />
    <attribute name="contactid" />
    <attribute name="emailaddress1" />
    <order attribute="fullname" descending="false" />
    <filter type="and">
      <condition attribute="statecode" operator="eq" value="0" />
      <condition attribute="parentcustomerid" operator="eq" value="@AccountId" />
    </filter>
  </entity>
</fetch>

 

对于这个子报表,我用Table来呈现数据,设置这个Table的DataSetName 属性为 ContactDataSet ,并将三个列放到table中。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

为了方便预览报表,将刚才自动生成的参数 AccountId我设置一个合适的默认值,然后确保预览没有问题。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

为了跳转到CRM我需要获取CRM的URL,我这里新增一个Parameter,如下,Name我设置为CRM_URL。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

为了方便预览,我也为这个Parameter设置一个默认值,我这里设置为 https://luoweidemo.crm5.dynamics.com/main.aspx ,如下图,然后点击OK按钮保存。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后右击我要做超链接的列,选择 Text Box Properties...

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

在弹出框的Action Tab中我选择 Go to URL,并设置Select URL的值为表达式  =Left(Parameters!CRM_URL.Value,InStr(Parameters!CRM_URL.Value,"dynamics.com") + 11) & "/main.aspx?pagetype=entityrecord&etn=contact&id=" & Fields!contactid.Value 。当然,为了显示这个是超链接,我还可以为这个单元格设置下划线效果。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后我去预览下如下,需要确保预览不会有问题。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后我需要将这个子报表嵌入到父报表中。父报表也需要增加一个名称为 CRM_URL 的Parameter (这个Parameter的名称不能改,一定要是CRM_URL),该Parameter其余的设置和子报表的一样。右击父报表的Tablix中的空白处选择 Insert > Subreport 。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后右击刚才插入的子报表,选择 Subreport Properties,设置好 Use this report as subreport的值。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

还需要设置传递给子报表的两个参数的值,我这里设置如下:

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

预览没有问题后,我们在某个解决方案中,点击左侧的Reports 节点,然后New一个报表,Report Type选择Existing File,然后选择父报表,其余设置如下图,保存。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后再创建子报表,如下图,Parent Report字段的值会自动设置好。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

然后我们去看效果,打开一个account,点击Run Report 按钮,

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

选择制作的报表来看效果:

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

效果如下,contact的链接点击也好用。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

优秀的个人博客,低调大师

微信关注我们

原文链接:https://blog.51cto.com/luoyong/3006658

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。