用 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 思路的
