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

Posted luoyong0201

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。我们今天来看看如何定义,展示效果和查询,参考的官方文档包括但不限于如下:


为了方便演示效果,我建立一个行政区域实体,其中一个字段是Lookup字段到本实体,如下:


然后我们到 Hierarchy Settings 里面区新建一个Hierarchy Setting。


新建时候点击 Mark a relationship as enabled for hierarchies. 在弹出窗口中选中要lookup到自己的那个relationship,点击【Mark hierarchical】按钮。


成功后可以看到 【Is Hierarchical?】列的值变成了True,然后我们点击【Done】按钮关闭窗口。


为了更好的展示效果,我造了一些数据,如下:


点击第一列的层级图标,我展开一个效果如下所示:


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


看到的结果如下,是正确的。


下载下来的这个查询的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="{5972B46E-C11A-EC11-B6E7-002248173C14}" />
<condition attribute="statecode" operator="eq" value="0" />
</filter>
</entity>
</fetch>


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


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


这里下载下来的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="{5972B46E-C11A-EC11-B6E7-002248173C14}" />
<condition attribute="statecode" operator="eq" value="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​

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

以上是关于Dynamics 365层级数据的定义展示与查询的主要内容,如果未能解决你的问题,请参考以下文章

Dynamics 365 V9.0 多选选项集之组织服务查询数据过滤及字段赋值

Dynamics 365 App for Outlook 与 Dynamics 365 for Outlook(已被弃用)

自定义适用于手机和平板电脑的 Dynamics 365:显示的实体

Dynamics CRM 2015/2016/365 Web API:级联查询

Dynamics 365 通过Virtual Entity和第三方的数据源集成二

自定义适用于手机和平板电脑的 Dynamics 365:窗体自定义项