簡體   English   中英

SAPUI5 odata.v2.ODataModel 批量請求完成前調用批量請求回調

[英]SAPUI5 odata.v2.ODataModel Call back of batch request is invoked before batch request is complete

我的批處理請求有點問題,當提交並觸發 odata 模型時,在批處理返回結果之前觸發回調中的that.readAndUpdateSercicePeriodPlans(oService).then(function(oSerciceO)

正如您使用我的調試器所看到的,回調函數被觸發:

在此處輸入圖片說明

但網絡還沒有返回結果:

在此處輸入圖片說明

下面是代碼,我做錯了什么?

odataMod = this.getModel("Service");
odataMod.setUseBatch(true);
var aDeffGroup = odataMod.getDeferredGroups();
//add your deffered group
aDeffGroup.push("deletionGroup");
_.forEach(periodPlanArr, function(periodPlanToDel) {
    odataMod.remove('/ProjectTaskServicePeriodPlanCollection(\'' + periodPlanToDel.ObjectID + '\')/', {
        groupId: "deletionGroup"
    });
});

oGlobalBusyDialog.setText("Deleting Period Plans in progress");
oGlobalBusyDialog.setTitle("Updating data Model");
oGlobalBusyDialog.open();
//This trigger the batch request 
odataMod.submitChanges({
            // deffered group id
            groupId: "deletionGroup",
            success: function(oData) {
                sap.m.MessageToast.show(oData.toString());
                var aErrorData = sap.ui.getCore().getMessageManager().getMessageModel();
                var msg = aErrorData.getData();
                var oService = _.find(oNoneAssignedTaskModelData, function(oSewrv) {
                    return oSewrv.ObjectID === uniqueByID[0].ParentObjectID;
                });
                oGlobalBusyDialog.setText("Updating oModel in progress");
                oGlobalBusyDialog.setTitle("Updating data Model");
                // ISSUE : This below  function is invoked before even the batch request is complete , why ?! 
                that.readAndUpdateSercicePeriodPlans(oService).then(function(oSerciceO) {
                        oGlobalBusyDialog.close();
                        //Logic USER STORY 3423: Get Internal Indicator PeriodPlan and update the employee nternal Indicator PeriodPlan

                    },
                    error: function(oError) {
                        var oResponse = JSON.parse(oError.response.body);
                        sap.m.MessageToast.show("Fehler: " + oResponse.error.message.value);
                    }

                });

只有當過濾器中有某些值時,您的 Chrome 過濾器圖標才會顯示為紅色。:)

經過整夜調試和drinkind redbull,我終於找到了問題所在:

var aDeffGroup = odataMod.getDeferredGroups();
aDeffGroup.push("deletionGroup");
//I must set the deffered groups after pushing the ID or else it won't be added 
this.setDeferredGroups(aDeffGroup);

我建議避免兩次添加同一組-因此我遇到了一些問題。

     odataMod = this.getModel("Service");
            odataMod.setUseBatch(true);
            //var aDeffGroup = odataMod.getDeferredGroups();
            //aDeffGroup.push("deletionGroup");
            that.setModelDeferredGroup(odataMod, "deletionGroup");
// the function 
    setModelDeferredGroup: function (oModel, sGroup) {
        if (oModel && sGroup) {
            var aDeferredGroups = oModel.getDeferredGroups();
            if (aDeferredGroups.indexOf(sGroup) < 0) {
                aDeferredGroups.push(sGroup);
                oModel.setDeferredGroups(aDeferredGroups);
            }
        }
    }   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM