
在 SAP S/4HANA 的业务接口里,一个非常典型的问题是,同一张业务单据可能同时被 SAP Fiori、外部集成程序、移动应用以及后台批处理程序读取和修改。SAP 官方的 Production Order OData V4 API 就明确使用 ETag 实现 Optimistic Concurrency Control,也就是乐观并发控制。当客户端准备修改 Production Order 资源时,服务端会利用 ETag 判断客户端手里的数据版本是不是当前版本,从而避免一个较早读取的数据把已经发生的新修改覆盖掉。这正是 SAP Gateway Foundation for OData V4 Developer Guide 里Conditional Handling要解决的问题。SAP Gateway Foundation 对条件请求提供了通用处理能力。针对读取场景,可以使用GET配合If-None-Match。针对修改场景,可以使用If-Match。框架并不是简单地把这些 HTTP Header 交给业务代码,而是在 OData V4 Data Provider 的运行链路中已经提供了一套通用实现。业务开发可以直接利用这套机制,也可以在业务规则比较特殊时重新定义相关处理逻辑。SAP 官方文档明确说明,If-Match支持PUT、DELETE和PATCH,而If-None-Match在这里用于单实体GET请求。理解 Condit