ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-07 23:54:49  阅读:289  来源: 互联网

标签:报表 URL FetchXml 设置 Report Dynamics 365 CRM


我是微软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 report for Dynamics 365 – Part 1Create an ***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=

标签:报表,URL,FetchXml,设置,Report,Dynamics,365,CRM
来源: https://blog.51cto.com/luoyong/3006658

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有