OData 模型中的 SAPUI5 应用程序数据如何写回后端系统

SAPUI5 Application Data in OData Model how to write back to backend system

我对 Odata 主题还很陌生,尝试了解使用 OData 服务时的最佳实践场景是什么。

场景 1:

我有一个复杂的应用程序,其中包含多个来自远程 Odata 模型的 EntitySet,该模型是从 SAP 后端加载的。我可以读取数据并将其绑定到 UI 控件,这不是问题,但我感到困惑的是我如何 can/should 将数据写回后端。

第一个假设 Odata 是单向绑定:

用户操作输入字段、下拉列表、表格等,所有数据都通过createEntry() 或setProperty() 写入Odata 模型。正确的?或者我应该使用另一个 JSONModel 并收集所有用户更改?

问题:我现在如何将对 Odata 模型所做的更改传输到后端?我读过有关批处理或拥有自己的服务并使用 create() 函数触发此服务的最佳实践是什么?谁能给出一些提示或某种食谱。

场景 2:

双向绑定中的 Odata ?

这是如何运作的?后端必须在 OdataServices 中提供哪个先决条件?我读了一些实验性的东西。

你看我有点糊涂了。

了解使用单向或双向绑定会得到什么很重要。 None 这些绑定实际上涉及将数据写回后端 OData 服务。

简而言之:

  • 单向绑定 意味着模型(例如 ODataModel)仅使您的 UI 控件保持同步。对模型所做的更改也将级联到绑定到模型的 UI 控件。但是,当您更改 UI 控件中的值时,更新后的值不会自动写回到模型中。
  • 双向绑定 意味着该模型使您的 UI 保持同步(类似于单向绑定),但最重要的是,您的UI 控件也将级联回模型。双向绑定

在单向模型中,您确实需要使用 createEntry 和 setProperty 方法以编程方式更新模型。使用双向绑定,这将自动为您完成。

如果您希望将对模型的更改写回服务器上的 OData 服务,您可以 运行 'submitChanges' 方法。该方法会查看ODataModel中所做的所有更改,并将相应的OData请求发送到服务器以与后端同步更改。

为了确保以一致的方式完成此操作,ODataModel 会将所需的更改包装到所谓的更改集中。后端然后知道哪些请求属于一起,并且能够在其中一个更改失败时回滚更改集中的所有更改。在 ABAP 中,您可以将其称为逻辑工作单元 (LUW)。

因为可能需要向服务器发送多个请求(例如,如果更改集更改多个实体),ODataModel (v2) 将尽可能多的请求分组到一个批次中。当它打开时(这是默认设置),只有一个请求被发送到服务器而不是多个请求,这提高了性能。建议仅出于调试目的关闭批处理。

请注意,sap.ui.model.odata.ODataModel 中的双向绑定曾经是实验性的,但请不要再使用 class,因为它已经过时了。请改用 sap.ui.model.odata.v2.ODataModel,因为它更好并且支持更多 OData 功能(例如批处理和双向绑定)。

这实际上是多个答案合二为一,但我希望它能澄清一些困惑。