在更新更改之前如何在服务器端检测odata模型更改

时间:2019-07-11 12:14:55

标签: odata sapui5

当同一实体上的不同用户同时进行更新时,如何在保存之前检测该实体是否已更新并防止第二次更新发生并将新数据推送到第二个用户。

可以使用电子标签吗?

2 个答案:

答案 0 :(得分:0)

是的,这正是etag的用途。如果将SAP Gateway作为后端,则已经在SAPUI5的ODataModel中提供了支持,因此只需将etag发送给客户端并在进行更新时(在服务器上)对其进行验证。如果在此同时更改了该实体,则会向客户端发送错误消息,通知他该实体自加载实体以来已更改(HTTP状态412)。

答案 1 :(得分:0)

SAP Gateway不支持悲观锁定(例如,期望别人在编辑同一文档的同时编辑其他文档),但由于无状态而支持乐观锁定(即,不期望其他人同时编辑) RESTful Web服务的性质。所以这是选项:

  1. 使用pguddi的答案中提到的etags
  2. 自定义功能具有UI读取实体时收到的lastUpdate时间戳属性,并在更新请求时发送回去,后端与lastUpdated时间戳匹配,并且如果记录已经在后端中更新则引发异常,否则将继续
  3. 如果您正在使用CDS视图和基于BOPF的OData服务,则支持某种悲观锁定。详细信息可以在这里https://blogs.sap.com/2019/01/25/locking-the-gui-apps-from-the-fioriui5-has-never-been-so-easier-via-the-durable-locks-for-abap-programming-model-for-fiori/