on 05-11-2017 11:55 AM
I am deferring a delete request using v2 odata model:
this._oModel.setDeferredGroups(["TechObjDelete"]);
this._oModel.remove("/TechnicalObjectSet(EquipmentNo='" + oItem.EquipmentNo + "',Job='" + oItem.Job + "')", {
groupId: "TechObjDelete",
changeSetId: oItem.EquipmentNo,
success: function(oData) {
},
error: function(oError) {
}
});
And want to process with the deletion when the user click the "Save" button. So on save I call:
this._oModel.submitChanges();
And it all works fine. The problem is when the user doesn't click on "Save" button but moves to another screen. I then would like to reset the deferred changes in the model.
I could do that by initializing the following property as it stores the deferred requests:
this._oModel.mDeferredRequests = {};
But this is accessing the private property of the model. Is there a better way to reset it?
Hi Radek,
I had the same query and colleagues from UI5 helped to get it resolved. So, there are 2 ways in which we can delete/remove deferred calls.
1. By calling the destroy() method of the model. When the Model is destroyed all pending requests are aborted.
this._oModel.destroy();
2. By calling the abort() method which is available in the returned object of each operation such as create, read, remove, update, callFunction and submitChanges.
If you check the documentation of each of above methods you fill find that they return an Object and the description of this object reads as follows "An object which has an abort
function to abort the current request."
var oCreateRequest = this._oModel.create("/MyEntitySet", myObj);
oCreateRequest.abort();
Note: The approach mentioned by Sascha works well only if all the changes were collected by using the #setProperty method of the model. This is mentioned in the documentation of resetChanges() API.
Hope this helps!
Best Regards,
Himanshu
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Radek,
you could make use of the "resetChanges" Function. In your case this would be something like
this._oModel.resetChanges();
This would reset all Pending Changes in the Model. Anyways,.. if you want to check if the pending request is in the Change-Group you want to reset you could do it in a way like this..
if (this._oModel.hasPendingChanges()) {
var mChanges = this._oModel.getPendingChanges();
for (var i in mChanges) {
// Do some validation if the path of the change is in your changegroup
if (bRemove) {
this._oModel.resetChanges(mChanges[i]
}
}
}
Hope this helps. For more Information see the API-Doc of resetChanges. 🙂
Regards,
Sascha
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
84 | |
23 | |
11 | |
9 | |
8 | |
5 | |
5 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.