从 CHANGESET_BEGIN 看懂 SAP Gateway 的事务边界与 Defer Mode
在 SAP Gateway 项目里,/IWBEP/IF_MGW_APPL_SRV_RUNTIME是一个绕不开的接口。很多开发工作平时集中在GET_ENTITYSET、GET_ENTITY、CREATE_ENTITY、UPDATE_ENTITY、DELETE_ENTITY这些方法上,只有当前端开始真正使用$batch,尤其是一个 changeset 里塞入多条修改操作时,CHANGESET_BEGIN才会突然从一个平时很少碰的方法,变成决定整个服务能不能正确工作的关键入口。SAP Help 对/IWBEP/IF_MGW_APPL_SRV_RUNTIME的定位非常直接,它是每一个 Data Provider Class,也就是DPC,都要实现的中央运行时接口。换个更贴近开发现场的理解,OData 请求从 HTTP 层进入 SAP Gateway Runtime 之后,框架需要找到一个统一的应用层契约,去完成读取、创建、更新、删除、action、stream、expand、changeset 等各种运行时行为,这个契约就是/IWBEP/IF_MGW_APPL_SRV_RUNTIME。平常单独发送一条POST或PATCH时,事务边界相对容易理解。一条请求进入DPC_EXT,应用代码完成业务校验和数据库修改,框架在合适的位置处理事务结束。到了$