$(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
avatar image
Former Member

How to reset deferred odata requests

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?

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

2 Answers

  • May 24 at 06:12 AM

    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

    Add comment
    10|10000 characters needed characters exceeded

  • May 25 at 02:52 PM

    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

    Add comment
    10|10000 characters needed characters exceeded