我对 Odata 主题很陌生,并尝试了解使用 OData 服务时的最佳实践方案是什么。
方案 1:
我有一个复杂的应用程序,其中包含来自远程 Odata 模型的多个 EntitySet,该模型是从 SAP 后端加载的。我可以读取数据并将其绑定(bind)到 UI 控件,这不是问题,但我感到困惑的是我可以/应该如何将数据写回后端。
第一个假设 Odata 是单向绑定(bind):
用户操作输入字段、下拉列表、表格等,所有数据通过 createEntry() 或 setProperty() 写入 Odata 模型。对?或者我应该使用另一个 JSONModel 并收集所有用户更改?
问题:我现在如何将在 Odata 模型上所做的更改转移到后端?我读过有关批处理或拥有自己的服务并使用 create() 函数触发此服务的最佳实践是什么?有人可以提供一些提示或某种食谱吗?
方案 2:
双向绑定(bind)中的 Odata ?
这是如何运作的 ?后端必须在 OdataServices 中提供哪些先决条件?我读了一些实验性的东西。
你看我有点困惑。
最佳答案
如果您使用单向或双向绑定(bind),重要的是要知道您会得到什么。这些绑定(bind)实际上都不涉及将数据写回后端 OData 服务。
简而言之:
在单向模型中,您确实需要使用 createEntry 和 setProperty 方法以编程方式更新模型。使用双向绑定(bind),这将自动为您完成。
如果您希望将模型的更改写回服务器上的 OData 服务,您可以运行“submitChanges”方法。此方法将查看在 ODataModel 中所做的所有更改,并将相应的 OData 请求发送到服务器以与后端同步更改。
为确保以一致的方式完成此操作,ODataModel 会将所需的更改包装到所谓的更改集中。然后后端知道哪些请求属于一起,并且只要其中一个更改失败,就能够回滚更改集中的所有更改。在 ABAP 中,您可以将其称为逻辑工作单元 (LUW)。
因为可能需要向服务器发送多个请求(例如,如果更改集更改了多个实体),ODataModel (v2) 将尽可能多的请求分组在一批中。当它打开时(这是默认设置),只向服务器发送一个请求而不是多个请求,这会提高性能。建议仅出于调试目的关闭批处理。
请注意,sap.ui.model.odata.ODataModel 中的两种方式绑定(bind)曾经是实验性的,但请不要再使用该类,因为它已经过时了。请改用 sap.ui.model.odata.v2.ODataModel,因为它更好并且支持更多 OData 功能(例如批处理和双向绑定(bind))。
这实际上是一个多个答案,但我希望它能澄清一些困惑。
关于odata - SAPUI5 OData 模型中的应用程序数据如何写回后端系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37673364/