cancel
Showing results for 
Search instead for 
Did you mean: 

How to reset deferred odata requests

Former Member
0 Kudos

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?

0 Kudos

I am having the exact problem and looking for a solution.

Accepted Solutions (0)

Answers (2)

Answers (2)

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

sascha_weidlich2
Participant
0 Kudos

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