在 SAP S/4HANA 项目里,经常会碰到这样一个场景。SAP 已经交付了一套标准 CDS 数据模型,我们需要增加几个企业自己的字段,但又不能直接修改 SAP 标准对象。过去在传统 ABAP Dictionary 世界里,这类需求很容易让人联想到 Append Structure,而进入 ABAP CDS、RAP 和 Clean Core 的技术体系之后,更合适的思路往往变成 CDS Entity Extension。
真正容易产生误解的地方,并不是extend view entity这条语句怎么写,而是扩展完成以后,这些新增字段究竟算谁的。
它们是不是仍然属于某个独立的 Extension 对象。调用方是不是需要知道哪些字段来自原始 CDS Entity,哪些字段来自 Extension。Open SQL 查询的时候,要不要使用某种特殊语法才能访问扩展字段。到了 RAP、OData 或 Fiori Elements 层以后,这些字段是否仍然带着某种扩展身份。
答案恰恰体现了 CDS Extension 设计里非常重要的一条原则。
一个字段通过 Entity Extension 被加入 CDS Entity 之后,对于 CDS Entity 的消费者而言,它已经是这个 Entity 正常结构的一部分。调用方在使用它时,并不需要关心它最初是写在原始 Data Definition 中,还是写在另一个 Entity Extension 对象中。
SAP 官方文档对 CDS View Entity 的定义给出了一个非常重要的基础。View Entity 的select list定义了这个实体结构化数据类型中的组件,而 Entity