
一个 CDS View 刚开始开发时,源代码通常还很清爽。数据源、Association、字段列表,再加少量 Annotation,整个模型的职责一眼就能看明白。但当这个 CDS Entity 开始被 SAP Fiori Elements、OData、分析应用以及各种消费端使用之后,情况很快就会发生变化。一个字段需要显示在 List Report 中,需要一个@UI.lineItem。另一个字段需要进入筛选栏,需要@UI.selectionField。Object Page 里还需要@UI.identification、@UI.fieldGroup、@UI.facet。为了让界面文字更友好,又可能加入@EndUserText.label。再往后,项目实施团队可能还会提出自己的 UI 排列方式,而 SAP 标准内容本身也可能已经提供了一套 Annotation。这时候,一个原本负责表达数据模型的 CDS Entity,很容易变成数据建模逻辑和几十甚至上百行 UI 元数据混在一起的大文件。SAP 为这个问题提供了一套非常重要的机制,也就是 Metadata Extensions,通常简称为 MDE。Metadata Extension 是一种独立的 CDS Repository Object,它允许我们不修改 CDS Entity 的 Data Definition,而是在另外一个对象中给这个 CDS Entity 添加或者覆盖 Annotation。现代 ABAP CDS 使用annotate entity