用 Service Definition Extension 给 ABAP 标准服务加一层干净的扩展口
最近在看 RAP 项目里的服务暴露设计时,有一个对象很容易被忽略,Service Definition Extension。它不像 CDS View Extension 那样经常出现在字段增强场景里,也不像 Metadata Extension 那样直接影响 Fiori Elements 页面效果,但它在 Clean Core 开发里非常关键。尤其是我们面对 SAP 标准业务对象,或者面对已经上线运行的自建核心 Service Definition 时,想新增自己的 CDS entity,又不想改动原始服务定义,这个对象就派上用场了。在 RAP 体系里,Service Definition 负责说明哪些 CDS entity 要作为业务服务的一部分暴露出去。它本身不决定协议,也不直接等同于 OData 服务。真正把服务变成 OData V2、OData V4、SQL 或 InA 访问入口的是 Service Binding。Service Definition 更像一份业务服务清单,Service Binding 则像发布渠道。我们在清单里写明 Travel、Agency、Customer 这些实体,到了绑定层再决定它们通过哪种协议被消费。Service Definition Extension 解决的是另一个问题。原始清单已经存在,而且这份清单可能来自 SAP 标准,也可能来自我们的核心产品包。现在业务上需要补充一个新的实体,例如给供应商服务增加一个自定义评分记录,给销售订单服务增加一个自定义审批日志,给物料主数据服务增加一个本地质量扩展视图。直接修改原始 Service Definition 虽然技术上看起来很快,但会把标准对象或核心对象变成被修改对象,后续升级、热修、版本合并都会变得很麻烦。更符合 Clean Core 思路的