一个 SAP 应用真正复杂的地方,通常不是页面,也不是 OData URL,更不是数据库里到底有多少张表,而是业务规则究竟放在哪里。
销售订单能不能保存,取决于客户状态、销售组织、信用状态和订单金额。采购申请是否需要额外审批,取决于金额、成本中心、采购类别以及组织规则。分析报表里的净销售额,也不是简单读取数据库字段,而可能由销售额、退货额、折扣、税费等多个业务语义共同构成。
这些规则都属于 Domain-Specific Logic,也就是领域特定逻辑。
在传统 ABAP 开发里,我们很容易把这类逻辑全部塞进 ABAP Class、Function Module、BAdI、User Exit,甚至直接写进 Report。到了 ABAP Cloud,思路发生了明显变化。领域逻辑不再天然等同于 ABAP 源代码,而是可以由 CDS、ABAP,或者两者共同承担。
SAP 当前对 ABAP Cloud 的架构说明也明确采用了这种划分。具体业务逻辑究竟使用 ABAP、CDS,还是二者结合,需要根据不同 Use Case 的 Runtime Characteristics 来决定。同时,基于 CDS 实现的领域逻辑可以被事务处理、分析和集成等不同场景共同利用。
理解这个变化,对 RAP、Clean Core、Developer Extensibility,乃至 SAP S/4HANA Cloud 的开发方式都非常重要。
过去我们经常问的是,某段代码应该放在哪个 Class。
现在更应该问的是,这条业务规则究竟属于数据模型语义、声明式计算、访问控制、事务行为,还是需要 ABAP Runtime 才能完成的过程逻辑。
一旦问题这样提出,CDS 和 ABAP