天天看点

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 。

当然,高级查找界面还支持 Not Under。

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

这个查询结果如下,可以看到将湖南省的上级,湖南省本级和广东省的所有行政区划都查询出来了。

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

这里下载下来的FetchXml如下:

对于层级数据查询,虽然高级查找界面只支持Under和Not Under两个操作符,如果用编程的方式来查询的话可以支持更多,主要是额外支持above、eq-or-above、eq-or-under、eq-useroruserhierarchy、eq-useroruserhierarchyandteams,官方文档解释如下,我就不一一演示了,用到时候自己测试下自然明白。

可以看到用这些查询操作符可以一次查询出相关数据,不用递归进行查询,方便很多。

CONDITION OPERATORS FOR HIERARCHICAL DATA

<col>

FetchXML

ConditionOperator

Description

​<code>​above​</code>​

​<code>​Above​</code>​

Returns all records in referenced record's hierarchical ancestry line.

​<code>​eq-or-above​</code>​

​<code>​AboveOrEqual​</code>​

Returns the referenced record and all records above it in the hierarchy.

​<code>​under​</code>​

​<code>​Under​</code>​

Returns all child records below the referenced record in the hierarchy

​<code>​eq-or-under​</code>​

​<code>​UnderOrEqual​</code>​

Returns the referenced record and all child records below it in the hierarchy

​<code>​not-under​</code>​

​<code>​NotUnder​</code>​

Returns all records not below the referenced record in the hierarchy

​<code>​eq-useroruserhierarchy​</code>​

​<code>​OwnedByMeOrMyReports​</code>​

When hierarchical security models are used, Equals current user or user's reporting hierarchy

​<code>​eq-useroruserhierarchyandteams​</code>​

​<code>​OwnedByMeOrMyReportsAndTeams​</code>​

When hierarchical security models are used, Equals current user and user's teams, or user's reporting hierarchy and their teams

继续阅读