贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述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字段到本实体,如下:
文章图片
然后我们到 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="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。
文章图片
这个查询结果如下,可以看到将湖南省的上级,湖南省本级和广东省的所有行政区划都查询出来了。
文章图片
这里下载下来的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 |
推荐阅读
- 想了解Xtrabackup备份原理和常见问题分析,看这篇就够了
- 实体关联起来查询可以不通过关系(Lookup字段)吗()
- Flutter 多引擎支持 PlatformView 以及线程合并解决方案
- 深入 iOS 静态链接器— ld64
- SpringBoot技术专题「权限校验专区」Shiro整合JWT授权和认证实现
- Spring源码分析带你正视一下Spring祖容器之BeanFactory的原理与功能分析
- 「绝密档案」“爆料”完整秒杀架构的设计到技术关键点的“八卦追踪”
- Alibaba工具型技术系列「EasyExcel技术专题」实战项目中常用的Excel操作指南
- SpringBoot技术专题「开发实战系列」动态化Quartz任务调度机制+实时推送任务数据到前