$(function () { pageContext.i18n.modTalk = 'moderation talk'; pageContext.i18n.replyToComment = 'Reply'; pageContext.i18n.modTalkEmpty = 'moderation talk is empty'; pageContext.url.getModTalk = "/comments/%25ID%25/listModTalk.json"; pageContext.url.possibleCommentRecipients = "/comments/%ID%/possibleRecipients.json"; pageContext.url.commentEdit = '/comments/%25ID%25/edit.html'; pageContext.url.commentView = '/comments/%ID%/view.html'; pageContext.i18n.commentVisibility = { 'full': 'Viewable by all users', 'op': 'Viewable by the original poster', 'mod': 'Viewable by moderators', 'opAndMod': 'Viewable by moderators and the original poster', 'other': 'Advanced visibility', 'dialogTitle': 'Comment visibility', 'selectGroups': 'Visible to groups', 'selectOther': 'Other recipients', 'selectOriginalPoster': 'Original poster', 'selectModerators': 'Moderators', 'selectAssignees': 'Asked to answer users' }; pageContext.i18n.commentMenuLabels = { 'comment-edit': 'comments.menu.edit', 'comment-delete': 'comments.menu.delete', 'comment-convert': 'comments.menu.convert' };pageContext.i18n.answer= { bestAnswer: 'Best Answer', controlBar : { accept: 'Accept', unaccept: 'Unaccept', acceptCommand: 'Accept this answer as correct', cancelAcceptedCommand: 'Remove this answers accepted status' } }; window.croles = { u: false, op: false, m: false, og: false, as: false, ag: false, dc: false, doc: false, eo: false, ea: false }; tools.init({ q: { e: false, ew: false, eo: false, r: false, ro: false, d: false, dow: false, fv: false, c: false, co: false, p: false, tm: false , ms: false, mos: false }, n: { f: false, vf: false, vfo: false, vr: false, vro: false, c: false, co: false, vu: false, vd: false, w: false, wo: false, l: false }, c: { e: false, eo: false, d: false, dow: false, ta: false, tao: false, l: false }, a: { e: false, ew: false, eo: false, d: false, dow: false, a: false, aoq: false, ao: false, tc: false, tco: false, p: false, tm: false }, pc: croles }, { tc: true, nsc: true }); commandUtils.initializeLabels(); }); Skip to Content
0

How to reset deferred odata requests

May 11, 2017 at 10:55 AM

142

avatar image
Former Member

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?

10 |10000 characters needed characters left characters exceeded

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

0
* Please Login or Register to Answer, Follow or Comment.

2 Answers

Sascha Weidlich May 24 at 06:12 AM
0

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

Share
10 |10000 characters needed characters left characters exceeded
Himanshu Sharma
May 25 at 02:52 PM
0

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

Share
10 |10000 characters needed characters left characters exceeded