在 SAP S/4HANA 项目里,经常会碰到这样一个很现实的问题。业务数据明明就在系统里,数据库表也能在 Dictionary 中找到,甚至传统 ABAP 程序通过SELECT直接读取也完全没有问题,可一旦项目开始执行 Clean Core,或者代码切换到ABAP for Cloud Development,原来熟悉的访问方式突然就不能用了。
这并不是 SAP 单纯限制开发人员,而是在改变应用之间建立依赖关系的方式。
过去的经典 ABAP 开发,很容易形成这样的调用链。
自定义程序直接访问 SAP 数据库表,自定义类直接调用 SAP 内部类,自定义程序直接调用某个没有公开承诺稳定性的 Function Module,甚至直接依赖某个标准程序内部结构。
系统当前版本能够运行,并不代表下一次升级仍然安全。
SAP 在 ABAP Cloud 里采用了完全不同的思路。一个对象能不能被外部开发消费,并不取决于技术上能不能找到它,而取决于 SAP 是否明确把它发布成 API,以及它按照什么 Release Contract 发布。
SAP 对 ABAP Cloud 的定义也非常清楚。ABAP Cloud 用来构建生命周期稳定、适合云环境的业务应用、服务和扩展,其关键机制之一就是 Release Contract Framework 与 Public API Lifecycle。ABAP for Cloud Development和ABAP for Key Users这样的严格语言版本,只允许访问相同软件组件中的对象,或者按照相应 Release Contract 发布的