Dynamics 365基于FetchXml的***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 report for Dynamics 365 – Part 1Create an ***S Report for Dynamics 365 – Part 2.

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

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

 

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

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

 

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

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

 

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

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

 

在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的值,如后图。

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

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

 

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

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

然后我需要新建一个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 按钮关闭。

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

 

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

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

 

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

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

 

点击Preview可以预览如下:

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

 

然后需要添加另外一个报表作为子报表,我命名为 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中。

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

 

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

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

 

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

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

 

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

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

 

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

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

 

在弹出框的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 。当然,为了显示这个是超链接,我还可以为这个单元格设置下划线效果。

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

 

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

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

 

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

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

 

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

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

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

上一篇:【客户下单】基于CRM完全匹配地址库实现自动分单


下一篇:crm系统帮助销售人员缩短销售周期