Dynamics 365层级数据的定义展示与查询

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述Dynamics 365层级数据的定义展示与查询相关的知识,希望能为你提供帮助。
我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复455或者20210921可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
我们做项目中有时候用到层级数据,比较常见的比如行政区划,员工,产品BOM之类的,常用的Account实体自带了一个名称为 Account Hierarchy  的Hierarchy Setting。我们今天来看看如何定义,展示效果和查询,参考的官方文档包括但不限于如下:

  • ??Query and visualize hierarchically related data??
  • ??Define and query hierarchically related data??
  • ??Query hierarchical data???


为了方便演示效果,我建立一个行政区域实体,其中一个字段是Lookup字段到本实体,如下:
Dynamics 365层级数据的定义展示与查询

文章图片



然后我们到 Hierarchy Settings  里面区新建一个Hierarchy Setting。
Dynamics 365层级数据的定义展示与查询

文章图片



新建时候点击 Mark a relationship as enabled for hierarchies.  在弹出窗口中选中要lookup到自己的那个relationship,点击【Mark hierarchical】按钮。
Dynamics 365层级数据的定义展示与查询

文章图片



成功后可以看到 【Is Hierarchical?】列的值变成了True,然后我们点击【Done】按钮关闭窗口。
Dynamics 365层级数据的定义展示与查询

文章图片



为了更好的展示效果,我造了一些数据,如下:
Dynamics 365层级数据的定义展示与查询

文章图片



点击第一列的层级图标,我展开一个效果如下所示:
Dynamics 365层级数据的定义展示与查询

文章图片



然后我们来看下如何查询下级,我举个例子,我想查询湖南省下面所有的行政区划,包括市和县,用高级查找是这样的,我这里加了一个常用的筛选条件Status Equal Active,  也就是statecode eq 0,这是我们做项目时候查询一般要加的筛选,以便充分利用默认的启用/禁用功能。
Dynamics 365层级数据的定义展示与查询

文章图片



看到的结果如下,是正确的。
Dynamics 365层级数据的定义展示与查询

文章图片



下载下来的这个查询的FetchXml如下,可以看到用的操作符是 under 。


< fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
< entity name="ly_district">
< attribute name="ly_districtid" />
< attribute name="ly_name" />
< attribute name="createdon" />
< attribute name="ly_districtlevel" />
< attribute name="ly_parentdistrictid" />
< order attribute="ly_name" descending="false" />
< filter type="and">
< condition attribute="ly_districtid" operator="under" uiname="湖南省" uitype="ly_district" value="https://www.songbingjia.com/android/{5972B46E-C11A-EC11-B6E7-002248173C14}" />
< condition attribute="statecode" operator="eq" value="https://www.songbingjia.com/android/0" />
< /filter>
< /entity>
< /fetch>



当然,高级查找界面还支持 Not Under。
Dynamics 365层级数据的定义展示与查询

文章图片



这个查询结果如下,可以看到将湖南省的上级,湖南省本级和广东省的所有行政区划都查询出来了。
Dynamics 365层级数据的定义展示与查询

文章图片



这里下载下来的FetchXml如下:


< fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
< entity name="ly_district">
< attribute name="ly_districtid" />
< attribute name="ly_name" />
< attribute name="createdon" />
< attribute name="ly_districtlevel" />
< attribute name="ly_parentdistrictid" />
< order attribute="ly_name" descending="false" />
< filter type="and">
< condition attribute="ly_districtid" operator="not-under" uiname="湖南省" uitype="ly_district" value="https://www.songbingjia.com/android/{5972B46E-C11A-EC11-B6E7-002248173C14}" />
< condition attribute="statecode" operator="eq" value="https://www.songbingjia.com/android/0" />
< /filter>
< /entity>
< /fetch>



对于层级数据查询,虽然高级查找界面只支持Under和Not Under两个操作符,如果用编程的方式来查询的话可以支持更多,主要是额外支持above、eq-or-above、eq-or-under、eq-useroruserhierarchy、eq-useroruserhierarchyandteams,官方文档解释如下,我就不一一演示了,用到时候自己测试下自然明白。
可以看到用这些查询操作符可以一次查询出相关数据,不用递归进行查询,方便很多。
CONDITION OPERATORS FOR HIERARCHICAL DATA
FetchXML
ConditionOperator
Description
??above??
??Above??
Returns all records in referenced record\'s hierarchical ancestry line.
??eq-or-above??
??AboveOrEqual??
Returns the referenced record and all records above it in the hierarchy.
??under??
??Under??
Returns all child records below the referenced record in the hierarchy
??eq-or-under??
??UnderOrEqual??
Returns the referenced record and all child records below it in the hierarchy
??not-under??
??NotUnder??
Returns all records not below the referenced record in the hierarchy
??eq-useroruserhierarchy??
??OwnedByMeOrMyReports??
When hierarchical security models are used, Equals current user or user\'s reporting hierarchy
??eq-useroruserhierarchyandteams??
??OwnedByMeOrMyReportsAndTeams??
【Dynamics 365层级数据的定义展示与查询】When hierarchical security models are used, Equals current user and user\'s teams, or user\'s reporting hierarchy and their teams

    推荐阅读