
在 SAP S/4HANA 和 ABAP Cloud 项目里,有一类需求几乎绕不开。SAP 已经交付了一套标准 CDS 数据模型,我们希望增加企业自己的字段,甚至增加 Association,但又不希望复制 SAP 标准 CDS,更不能直接修改 SAP 对象。传统 ABAP 项目里,面对这种需求,很容易产生一种直接的思路,把标准对象复制到 Z 命名空间,再在复制版本里增加字段。这样的方案在短期内确实能工作,但到了 SAP S/4HANA Cloud、ABAP Cloud 和 Clean Core 体系下,它会迅速暴露问题。标准对象一旦升级,复制出来的对象无法自动继承 SAP 的改进,SAP 对标准数据模型做结构调整时,自建副本还可能需要大量人工比对和适配。SAP CDS 的 Data Model Extensions 正是为这种场景设计的。它提供的不是修改原对象的能力,而是在 SAP 明确定义好的稳定扩展点上增加自己的数据模型内容。对于采用 Clean Core 的项目而言,这个差异非常重要。扩展代码依赖的是 SAP 承诺保持稳定的扩展接口,而不是某个内部实现细节。SAP 当前的 ABAP 文档把这种扩展能力与C0稳定性契约紧密联系起来。C0的正式名称是Extend,用于保证公开 API 中特定扩展点的稳定性。它和用于普通消费的C1契约并不是一回事。C1主要解决程序能否安全消费某个开发对象,而C0解决的是某个对象能否被稳定扩展。这也是理解 Data Model Extensions 时最重要的一条线索。