在 SAP Gateway 项目里,更新一条 OData 数据看起来往往很简单。前端修改几个字段,发出一个 HTTP 请求,后台进入UPDATE_ENTITY,调用 BAPI、Business Object API 或直接更新数据库,整个流程似乎就结束了。
真正麻烦的地方并不在于怎样执行UPDATE,而在于一个更容易被忽略的问题,客户端这次到底是在表达「替换整条资源」,还是只表达「修改其中几个字段」。
这两个动作在业务系统里完全不是一回事。
假设我们的 OData 服务暴露一个 Product 实体,当前数据库里的数据是下面这个状态。
ProductID HT-1000 Name Notebook Basic 15 Category NOTEPAD Currency EUR Price 956 Supplier 0100000042 Status ACTIVE某个 SAP Fiori 页面只允许修改商品名称。用户把Name修改为Notebook Basic 15 Plus,页面自然只关心Name的变化。
如果前端传回来的数据只有Name,服务端究竟应该只修改Name,还是应该把客户端没有传回来的Category、Currency、Pri