如何在另一ABAP CDS视图中调用层级CDS并获取根节点ID
获取CDS层级中的根节点ID
我已创建一个ABAP CDS层级,希望在另一个CDS视图中调用它,获取每个节点对应的根节点ID。相关代码如下:
源表
@EndUserText.label : 'Hierarchy' @AbapCatalog.enhancement.category : #EXTENSIBLE_CHARACTER_NUMERIC @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #A @AbapCatalog.dataMaintenance : #RESTRICTED define table hierarchy_table { key mandt : mandt not null; key id : char10 not null; parent : char10; }
层级源CDS视图
@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Hierarchy Source' @Metadata.ignorePropagatedAnnotations: true define view entity ZI_HierarchySource as select from hierarchy_table association [1..1] to ZI_HierarchySource as _hierarchy on $projection.parent = _hierarchy.id { _hierarchy, key id, parent }
层级CDS
define hierarchy ZI_HIERARCHY as parent child hierarchy( source ZI_HierarchySource child to parent association _hierarchy siblings order by id ascending ) { id, parent, $node.node_id as hiera_node_id, $node.parent_id as hiera_parent_id, $node.hierarchy_is_orphan as hiera_is_orphan, $node.hierarchy_is_cycle as hiera_is_cycle, $node.hierarchy_rank as hiera_rank, $node.hierarchy_parent_rank as hiera_parent_rank, $node.hierarchy_level as hiera_level }
目标视图需求
define view entity ZI_NODE_ID_AND_ROOT_ID as select from hierarchy_table association [1..1] to ZI_Hierarchy as hier on $projection.id = hier.id { key id, root // 需要从层级中获取根节点ID }
在ABAP程序中可以使用层级节点导航器HIERARCHY_ANCESTORS实现,但不清楚如何在CDS视图中完成。
解决方案
要在CDS视图中获取根节点ID,可借助CDS层级的内置属性$hierarchy.root_id,步骤如下:
- 修改现有层级CDS,添加根节点字段
更新ZI_HIERARCHY,将根节点ID作为字段包含进去:
define hierarchy ZI_HIERARCHY as parent child hierarchy( source ZI_HierarchySource child to parent association _hierarchy siblings order by id ascending ) { id, parent, $node.node_id as hiera_node_id, $node.parent_id as hiera_parent_id, $node.hierarchy_is_orphan as hiera_is_orphan, $node.hierarchy_is_cycle as hiera_is_cycle, $node.hierarchy_rank as hiera_rank, $node.hierarchy_parent_rank as hiera_parent_rank, $node.hierarchy_level as hiera_level, $hierarchy.root_id as hiera_root_id // 添加根节点ID字段 }
- 在目标视图中关联层级CDS并获取根节点ID
修改目标视图,通过关联层级CDS直接引用根节点字段:
define view entity ZI_NODE_ID_AND_ROOT_ID as select from hierarchy_table as ht left outer join ZI_HIERARCHY as hier on ht.id = hier.id { key ht.id, hier.hiera_root_id as root // 直接获取根节点ID }
这种方式复用了已定义的层级逻辑,实现更简洁高效。
内容的提问来源于stack exchange,提问作者RaTiO
相关产品推荐
相关产品推荐

