You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAPUI5中如何用OData V4与oListData更新实体?求代码审查

SAPUI5 实体数据更新实现指南(针对你的代码问题)

一、绑定代码的问题修正

你的路径Company(id)指向单个实体记录,不能用bindList(该方法用于绑定实体集合),单个实体需使用bindObject,同时指定更新分组ID:

var path = this.getAppModel().getProperty("/selectionPath");
// 绑定单个实体而非列表
var oObjectBinding = this.getView().getModel().bindObject({
  path: path,
  parameters: { 
    "$$updateGroupId": 'cmpchange' 
  }
});
// 将binding存入控制器实例,方便后续调用
this._oObjectBinding = oObjectBinding;

二、onSave函数的更新逻辑调整

更新现有实体不需要调用create方法,直接修改绑定实体的属性后提交batch即可,修改后的代码如下:

onSave: function() {
  var oView = this.getView();
  var oModel = oView.getModel();
  // 获取当前绑定的实体路径
  var sEntityPath = this._oObjectBinding.getPath();

  // 获取表单输入值
  var description = oView.byId("description").getValue();
  var validation = oView.byId("invalidCombo").getValue();

  // 直接更新模型中对应实体的属性
  oModel.setProperty(sEntityPath + "/Beschreibung", description);
  oModel.setProperty(sEntityPath + "/Ungueltig", validation === "Ungültig" ? 1 : 0);

  // 处理忙碌状态
  function resetBusy() {
    oView.setBusy(false);
  }
  oView.setBusy(true);

  // 提交指定分组的batch请求
  oModel.submitBatch("cmpchange").then(resetBusy, resetBusy);
  this.onNavBack();
}

三、关键注意点

  • 单个实体绑定用bindObject,集合绑定才用bindList,这是你之前绑定逻辑的核心问题。
  • 通过setProperty修改属性后,框架会自动标记该实体为待更新状态,提交batch时会自动发送PUT/PATCH请求到后端。
  • 确保你的OData服务支持实体更新操作(PUT/PATCH方法),否则提交请求会失败。

内容的提问来源于stack exchange,提问作者Maliha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:22:19