原创地址:
转载请注明出处
(一) 在中,我介绍了如何创建基于Fetch的报表,并使用数据预筛选功能。在这篇文章中,我们使用一个比较复杂的FetchXML来完成一个更有实际意义的报表。
在这个报表中,显示相关客户,客户的订单,以及订单的产品信息。报表使用了三个inner join,account inner join order inner join orderdetail inner join product。
(1) 利用CRM的高级查找创建FetchXML
下载Fetch XML:
(2) 我们将它拷贝到报表中数据集的Query,并进行一些修改(添加我们需要的attribute)
(3) 按照介绍,使用数据预筛选功能。
添加一个CRM_FilteredAccount参数,使用以下的Query:
(4) 修改数据集Query的Fetch XML:
对这一行修改: <entity name="account" enableprefiltering="1" prefilterparametername="CRM_FilteredAccount">
修改结果为:
(5) 在设计面板中添加Table:
(6) 到这一步报表就完成了。将报表上传到CRM中看一下结果:
(二) 使用FetchXML实现inner join
在上面的实例中,已经看到如何使用 link-entity 来实现 inner join。link-entity 有一个属性 -- link-type,它的默认值为inner,你可以不指定该属性值,也可以指定其为inner。
(三) 使用FetchXML实现outer join
实现outer join需要指定link-entity 的属性 link-type的值为outer
(四) 使用 Order + Count
你可以使用order对fetchxml返回的数据集进行排序,并且可以用count指定返回数据的个数。下面的代码指定按照contact fullname 和 account name 进行排序,并返回最多1条数据。
(五) 使用 fetchXML来获取 N:N 关系的数据
如果你使用的是Native N:N 关系,CRM 会自动为你的关系创建一个Entity。比如我做的一个项目中,有如下的关系, account 与 aw_aansluitadres 是 1 : N 的关系, aw_aansluitadres 与 aw_deelcontract 是 N : N 的关系, 系统便自动生成一个名为 aw_deelcontract_aansluitadres的entity。
如果你想获得 account inner join aw_aansluitadres inner join aw_deelcontract, 你可以使用下面的fetchXML:
如果想得到 account outer join aw_aansluitadres outer join aw_deelcontract,我在上面已经解释过了,需要为每个link-entity 的 link-type属性指定值为outer
总结: fetchXML可以实现inner join,也可以实现outer join,关键在于link-entity的link-type属性,inner为inner join, outer 为 outer join,默认值为 inner。通过对数据使用order 排序,还可以通过设置fetch 的 count属性来指定返回的数据数目。