扩展标准CDS /PF1/C_VH_ACCOUNT_ID添加segment_id字段激活报错求助
需求可行性确认
这个需求完全可行,但不能直接修改标准CDS视图(SAP标准对象不允许直接修改),必须通过CDS扩展或自定义继承视图的方式实现,同时结合访问控制注解来限制Fiori应用的访问。
正确实现步骤
方法1:使用CDS视图扩展(推荐,不破坏标准对象)
1. 创建CDS扩展视图
创建针对/PF1/C_VH_ACCOUNT_ID的扩展CDS,关联/PF1/DB_SGMT_ACT表并引入segment_id字段:
@EndUserText.label: '扩展账户ID视图,添加Segment ID' extend view /PF1/C_VH_ACCOUNT_ID with ZC_VH_ACCOUNT_ID_EXT { // 关联segment表,需替换为实际存在的关联键(如account_id) segment_id : /PF1/DB_SGMT_ACT-segment_id } association [0..1] to /PF1/DB_SGMT_ACT as _Segment on $projection.account_id = _Segment.account_id;
注意:必须确保关联字段是标准视图中已存在的字段,且两张表的关联逻辑符合业务规则,否则会触发激活报错。
2. 为扩展后的视图添加访问控制
创建访问控制CDS,基于segment_id限制用户访问范围:
@EndUserText.label: '账户ID视图的Segment访问控制' @AccessControl.authorizationCheck: #CHECK define access control ZAC_VH_ACCOUNT_ID { restrict entity /PF1/C_VH_ACCOUNT_ID (ZC_VH_ACCOUNT_ID_EXT) where segment_id in $session.segment_ids; // 可根据实际权限逻辑调整,比如关联自定义权限对象 }
3. 调整Fiori应用数据源
将Fiori应用的数据源从标准/PF1/C_VH_ACCOUNT_ID切换为扩展后的ZC_VH_ACCOUNT_ID_EXT,确保应用加载包含segment_id的数据并受访问控制限制。
方法2:创建继承式自定义CDS视图(适合需要额外自定义逻辑的场景)
1. 创建继承标准视图的自定义CDS
继承/PF1/C_VH_ACCOUNT_ID,并通过左连接引入/PF1/DB_SGMT_ACT的segment_id:
@EndUserText.label: '继承账户ID视图,添加Segment ID' define view ZC_VH_ACCOUNT_ID_INH as select from /PF1/C_VH_ACCOUNT_ID left join /PF1/DB_SGMT_ACT on /PF1/C_VH_ACCOUNT_ID.account_id = /PF1/DB_SGMT_ACT.account_id { // 继承标准视图所有字段 /PF1/C_VH_ACCOUNT_ID.*, // 添加segment字段 /PF1/DB_SGMT_ACT-segment_id as segment_id }
2. 为自定义视图添加访问控制
创建访问控制CDS指向自定义视图:
@EndUserText.label: '自定义账户ID视图的Segment访问控制' @AccessControl.authorizationCheck: #CHECK define access control ZAC_VH_ACCOUNT_ID_INH { restrict entity ZC_VH_ACCOUNT_ID_INH where segment_id in $session.segment_ids; }
3. 切换Fiori应用数据源
将Fiori应用的数据源替换为自定义视图ZC_VH_ACCOUNT_ID_INH。
常见报错排查
- 关联字段不匹配:确认两张表的关联键数据类型、字段名完全匹配,且关联键在标准视图中存在。
- 多对一关联冲突:如果
/PF1/DB_SGMT_ACT中一个账户对应多个segment,需添加聚合逻辑(如max(segment_id))或明确筛选条件。 - 权限不足:创建CDS对象时确保拥有
S_DEVELOP等开发权限,且能访问/PF1/DB_SGMT_ACT表的字段。
内容的提问来源于stack exchange,提问作者Berater_SAP
相关产品推荐
相关产品推荐

