1. ABAP开发环境差异与Released API核心概念
在SAP生态系统中,开发环境的差异直接决定了标准对象的使用方式。传统S/4HANA On-Premise环境采用"所见即所得"的开发模式,开发者在SE80或ADT中能查看到的所有开发对象(域、数据元素、表、视图等)都可以直接调用。这种开放性在带来便利的同时也埋下了隐患——开发者可能直接依赖SAP内部表结构,导致后续系统升级时出现兼容性问题。
而在BTP ABAP环境和公有云环境中,SAP实施了严格的API访问控制。只有当标准对象的API状态设置为"Released"时,开发者才能直接引用。这种设计体现了SAP的Clean Core战略理念——通过API契约明确系统边界,保护核心数据结构的稳定性。例如尝试在云环境中直接使用未发布的表TCURX时,系统会明确提示:"The use of Table tcurx is not permitted. Use CDS Entity I_CURRENCY instead"。
关键区别:ABAP语言版本决定了对象使用规则。OP环境默认为Standard ABAP,而BTP ABAP环境强制使用ABAP for Cloud Development版本且不可修改。这种设计差异反映了SAP对不同部署模式的安全要求。
2. 契约类型与发布状态深度解析
2.1 五种契约类型及其应用场景
每个标准对象属性中的"API State"页签详细展示了其支持的契约类型。理解这些契约类型是进行合规开发的基础:
-
C0(扩展契约):控制对象是否允许被扩展。例如想要通过BAdI或增强点扩展标准功能时,目标对象必须设置C0契约。典型应用场景包括自定义字段扩展(Custom Fields)和业务对象增强(BOE)。
-
C1(系统内部使用契约):决定对象能否被直接调用。这是日常开发最常接触的契约类型。当系统提示"Not to be Released"时,开发者需要检查Successors中提供的替代方案。例如表TCURC的替代CDS视图就是I_Currency。
-
C2(远程API契约):管理对象是否允许远程调用。开发OData服务或API接口时,引用的底层对象必须设置C2契约。未发布的远程API可能导致服务运行时异常。