RAP 悲观并发控制与锁机制,为什么一个业务对象不能让两个人同时改 在 SAP S/4HANA 和 SAP BTP ABAP environment 里做 RAP 应用,最容易被低估的问题之一就是并发修改。页面能打开,OData 能调用,CDS View 能预览,EML 也能跑通,并不代表这个业务对象已经足够可靠。真正进入生产环境后,同一张销售订单、同一条采购申请、同一个差旅单、同一份主数据,会被多个业务用户、后台 Job、外部系统 API、Fiori Elements 页面同时访问。只读访问一般问题不大,一旦进入修改动作,数据库一致性就变成硬约束。RAP 里对并发控制的设计,不是单靠数据库事务隔离级别解决的。RAP 事务模型有自己的 interaction phase、save sequence、transactional buffer、draft runtime、ETag、lock master、lock dependent 这些概念。悲观并发控制,也就是 locking,处理的是同一份业务数据在修改期间被多个会话同时改写的问题。SAP Learning 对 RAP concurrency control 的说明里也明确提到,悲观并发控制通过 exclusive lock 和 global lock table 防止多个用户同时修改同一份数据库数据,锁请求会检查 lock table,发生冲突时请求会被拒绝。(