如何使用 SAP UI5 V2 ODataModel 模型 API 实现 deepCreate 的场景以及局限性

如果开发人员期望在持久化时请求已创建条目的导航属性(navigation property),请使用可选的 expand 参数在与实体创建的 POST 请求相同的批处理请求中有效地执行此操作。

可选的 inactive 参数确定是否创建非活动 transient 上下文。 这样的上下文只会在属性更新时成为活动的 transient上下文。 在此之前,它不是挂起的更改,即它不被 hasPendingChanges API 考虑,也不能被 resetChanges 删除; submitChanges API 不会触发非活动上下文的创建请求。

deepCreate,即首先创建一个实体,并基于这个新创建的实体,再次新创建一个子实体。

V2 ODataModel 不支持在同一个 API 请求里完成这个场景。

可以链接两个 API 调用来创建具有两个顺序请求的父实体和子实体,如以下示例所示,该示例同时创建了一个销售订单和一个销售订单项目:

var oParentContext,
    oModel = this.getView().getModel();
 
oParentContext = oModel.createEntry("/SalesOrderSet");
oParentContext.created().then(function () {
  var oChildContext = oModel.createEntry("ToLineItems", {
    context : oParentContext
  });
 
  oModel.submitChanges(); // triggers request for creation of item
});
 
oModel.submitChanges(); // triggers request for creation of sales order

ODataModel.createEntry 的一个局限性:

ODataListBinding.create 创建一个条目并将其插入到条目列表的开头或结尾。 该条目在绑定控件的对应位置可见,无需先保存到后端再刷新绑定; 与 ODataModel#createEntry API 相比,这是一个优势。

如果有一个显示条目集合的列表或表格控件并且以下条件之一适用,请使用方法 ODataListBinding.create,而不是 ODataModel.createEntry

  • 创建的条目甚至在存储到后端之前就应该出现在此表中,以便最终用户可以查看和修改他们的数据。
  • 即使已经持久化到后端,创建的条目也应该显示在表格中的相同位置; 只是他们的数据会根据创建 POST 请求的响应进行更新。
  • 希望提供内联创建行以快速创建新条目。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...