
最近在做 SAP RAP 业务对象时,一个很容易遇到的场景是,CDS 数据模型已经搭好了,Behavior Definition 里也已经声明了create、update、delete,Fiori Elements 页面能够新增、修改和删除数据,看起来一个事务型应用似乎已经完成了。真正进入业务开发之后,很快就会发现,企业应用绝不可能只有 CRUD。旅行订单被接受时,需要把状态改成已接受。员工出生日期不满足年龄要求时,不允许保存。用户修改折扣比例时,系统需要自动重算净金额。预订费用发生变化时,总价也应该跟着变化。保存订单前,还可能需要检查日期、客户、币种、状态之间是否满足业务约束。这些行为如果全部塞进 UI5 Controller,或者由前端手工拼接多个 OData 请求,业务规则就会逐渐散落在 UI、Service、ABAP Class 甚至数据库层。对于希望遵循 SAP Clean Core Principle 的 S/4HANA Cloud Private Edition、Public Cloud 以及 ABAP Environment 项目来说,这种设计很难长期维护。RAP 给出的方案,是把业务对象的行为也纳入模型。Behavior Definition 不只是声明 CRUD 能力,它同时描述这个 Business Object 能做什么、什么时候自动执行什么、什么数据允许进入持久化层,以及消费者能够显式发起哪些业务操作。在 managed RAP BO 中,标准的create、update、delete