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
相关产品推荐
相关产品推荐

