submitChanges() 与深层实体?

问题描述 投票:0回答:1

我有一个带有导航集的 odata。例如,订单实体集和项目实体集。 Items实体集是Order的导航集(子集)。这是一对多的关系。每个订单可能有 0 件或多件商品。

我的 sap ui5 页面允许人们更新现有订单并将商品添加到订单中,然后按屏幕上的“提交”按钮将更改提交到网关 sap 后端。

订单实体集绑定到表控件,项目实体集绑定到片段中的对话框。订单表有行,每行都有一个名为“管理项目”的按钮。如果您按订单 #1 的管理商品按钮,将打开包含现有商品的对话框 + 您可以向订单 #1 添加其他商品。最后,用户必须关闭项目对话框并按提交更改。提交更改应该将所有订单及其嵌入(嵌套)在每个订单中的项目提交给网关,并让网关处理深层实体结构。

我希望能够通过单个 oModel.submitChanges() 调用一次性提交订单及其项目,并且网关将作为深层实体处理我的请求。

我已经有了后端代码,我已经有了网关,测试数据等。我只需要知道如何从 sap ui5 提交带有深层实体的更改。

网关将处理深层实体 CRUD,从某种意义上说,只有在订单交易不失败的情况下,才会插入、更新、删除项目。如果订单交易失败,商品插入/更新/删除将会回滚。订单和商品密切相关,这就是为什么我不想将订单的更改与商品分开提交。相反,我想将 SubmitChanges 作为深层实体,将项目嵌套在订单中,然后一起提交。

有人可以帮助如何从 sap ui5 提交深层实体更改吗?

sapui5 abap sap-fiori sap-gateway
1个回答
1
投票

正确的方法是在后端实现 CREATE_DEEP 方法。这样,您只需一次请求即可发送完整的深层实体。

发送的对象例如:

{
  "OrderId" : "123",
  "Kunnr" : "001234566",
  "Items": [
    "Matnr" : "123",
    "Qnt" : 1
   ]
}

在前端,您只需调用 Order 实体上的 create 方法,一切都将由框架和网关处理。

当然,您需要在 OData 服务上定义订单和项目实体之间的正确关联。

这将为您发送的每个订单(及其各自的商品)创建一个请求。

如果您需要一次发送多个订单,我会创建一个新实体以将所有订单聚合到一个中:

{
  "id" : "12", 
  "Orders": [{
  "OrderId" : "123",
  "Kunnr" : "001234566",
  "Items": [
    "Matnr" : "123",
    "Qnt" : 1
   ]
}, {
  "OrderId" : "987",
  "Kunnr" : "001234566",
  "Items": [
    "Matnr" : "987",
    "Qnt" : 3
   ]
}]

这还将调用后端的 CREATE_DEEP 方法,您可以在其中一次处理所有信息并仅返回一个结果。

P.S.:如果您使用第一种方法,您也可以一次发送多个请求(使用批量),但您必须单独处理每个请求的结果。这取决于您是否想要“全有或全无”或“如果可以插入并仅对 nok 重复”

© www.soinside.com 2019 - 2024. All rights reserved.