在 SAP 官方关于 RAP 层级目录的示例里,有一个非常典型的业务模型。系统里存在多家旅行社,每一家旅行社都有自己独立的员工组织结构。员工之间仍然是经理与下属这样的 Parent-Child 关系,但整个数据库并不是只保存一棵员工树,而是同时保存了很多棵员工树。
旅行社 A 有自己的 CEO、部门经理和普通员工,旅行社 B 也有自己的组织结构。它们可以存储在同一套表和同一个 CDS hierarchy source 里,但在业务界面或者分析报表中,我们通常不会把所有旅行社的员工混成一棵巨大的树,而是选择某一家旅行社,再查看属于这一家旅行社的完整组织层级。
SAP 官方 RAP 文档正是用旅行社和 HR hierarchy 解释 hierarchy directory。官方说明中,每一个 agency 对应一套可选择的 hierarchy,Agency ID承担区分不同 hierarchy 的作用。对于可编辑的 RAP treeview,SAP 甚至明确指出,带 hierarchy directory 的 hierarchy 是实现完整可编辑树操作的技术基础。
这正是Hierarchy Directories要解决的问题。
很多刚接触 ABAP CDS hierarchy 的开发人员容易把 hierarchy directory 理解成一个普通的过滤 View,甚至认为它和WHERE AgencyId = ...没有什么区别。实际上两者处在完全不同的建模层次。
普通过滤关注的是哪些数据库行进入查询结果。
Hierarchy directory 关注的是在一个能够容纳多套 hierarch