我使用OData v4将数据从我的后端加载到我的前端(使用SAP UI5开发),我使用表单来显示详细信息页面。当我点击"编辑"按钮我能够编辑数据。我的实现与此示例类似:this discussion
编辑内容时,数据会直接在模型中编辑,因此会在后端进行更新。但是,我希望能够选择是否要保存更改,或者是否要在后端更新之前取消编辑。
我读过其他问题,可以将ODataModel复制到JSONModel并使用该副本,通过执行以下操作:
var oModel = this.getView().getModel();
var oModelJson = new sap.ui.model.json.JSONModel();
oModel.read("/Data", {
success: function(oData, response) {
oModelJson.setData(oData);
sap.ui.getCore().setModel(oModelJson, "oJSONModel");
alert("Success!");
},
error: function(response) {
alert("Error");
}
});
然而,读取方法似乎不适用于OData v4。加载数据的控制器代码如下所示:
onInit: function() {
this.oModel = new ODataModel({
groupId : "$direct",
synchronizationMode : "None",
serviceUrl : '/odata/'
});
this.getView().setModel(this.oModel, 'oModel');
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.getRoute("details").attachPatternMatched(this._onObjectMatched, this);
this._showFormFragment("display");
},
_onObjectMatched: function (oEvent) {
this.getView().bindElement({
path: "/Data(" + oEvent.getParameter("arguments").dataPath + ")",
model: "oModel"
});
//I want to copy the data from the ODataModel to the JSONModel here
},
实现这一目标的最佳方法是什么?如何使用OData v4进行操作?
答案 0 :(得分:1)
我想你想要在用户取消保存的情况下重置更改。
对于V2 ODataModel,有deferedGroup概念可用于resetChanges或submitChanges。
我对V4的经验不多。虽然从文档中可以得出结论。
请尝试在constructor中传递updateGroupId。然后,您可以按组ID选择resetChanges或submitBatch。
mParameters.updateGroupId?用于更新请求的组ID。如果未指定更新组ID,则使用mParameters.groupId。有效的更新组ID未定义,'$ auto','$ direct'或应用程序组ID,这是一个非空字符串,由基本拉丁字母表中的字母数字字符组成,包括下划线。
谢谢!