SAPUI5 oData.V2批处理请求中的所有操作完成后,如何调用函数?
我在发出SAPUI5 odata V2批处理请求时遇到问题:SAPUI5 oData.V2批处理请求中的所有操作完成后,如何调用函数?,odata,sapui5,Odata,Sapui5,我在发出SAPUI5 odata V2批处理请求时遇到问题: var that = this; var oServiceModel = that.getModel("oServiceModel"); odataMod = this.getModel("Service"); odataMod.setUseBatch(true); var aData = oServiceMo
var that = this;
var oServiceModel = that.getModel("oServiceModel");
odataMod = this.getModel("Service");
odataMod.setUseBatch(true);
var aData = oServiceModel.getData();
var stupidService = _.filter(aData, function (ae) {
return ae.Info === "-N/A";
});
var i = 0 ;
_.forEach(stupidService, function (sap) {
oGlobalBusyDialog.setText("Deleting service :" + sap.ObjectID);
oGlobalBusyDialog.setTitle("Deleting Service");
oGlobalBusyDialog.open();
that.removeService(sap).then(function () {
if (i === 615) {
oGlobalBusyDialog.close();
}
}).catch(function () {});
});
我的删除功能如下:
removeService: function (service) {
var that = this;
return new Promise(
function (resolve, reject) {
odataMod.remove('/ProjectTaskServiceCollection(\'' + service.ObjectID + '\')/', {
success: function (oData) {
resolve(oData);
},
error: function (oResult) {
that.handleError(oResult);
oGlobalBusyDialog.close();
reject(oResult);
}
});
});
发生的情况是,如果我试图删除500个条目,而无法删除200个条目,则错误消息会显示200次
如何使错误信息只显示一次
另外,我想在完成所有操作后关闭批处理请求odataMod.setUseBatch(false
);怎么做
*编辑:*
我已设法做到:
var aDeffGroup = odataMod.getDeferredGroups();
//add your deffered group
aDeffGroup.push("deletionGroup");
for (var s = 0; s < 5; s++) {
odataMod.remove('/ProjectTaskServiceCollection(\'' + stupidService[s].ObjectID + '\')/', {
//pass groupid to remove method.
groupId: "deletionGroup"
});
}
odataMod.submitChanges({
// your deffered group id
groupId: "deletionGroup",
success: function() {
//Get message model data from Core and it contains all errors
// Use this data to show in dialog or in a popover or set this to your local model see below code
var aErrorData = sap.ui.getCore().getMessageManager().getMessageModel();
console.log(aErrorData);
}
});
var aDeffGroup=odataMod.getDeferredGroups();
//添加您的不同组
aDeffGroup.push(“删除组”);
对于(var s=0;s<5;s++){
odataMod.remove('/ProjectTaskServiceCollection(\''+stupidService[s].ObjectID+'\')/'{
//传递groupid以删除方法。
groupId:“删除组”
});
}
odataMod.submitChanges({
//您的不同组id
groupId:“删除组”,
成功:函数(){
//从Core获取消息模型数据,它包含所有错误
//使用此数据在对话框或popover中显示,或将其设置为您的本地模型请参见下面的代码
var aErrorData=sap.ui.getCore().getMessageManager().getMessageModel();
console.log(aErrorData);
}
});
但是仍然是我的console.log(aErrorData)代码>仍会打印多条错误消息
而不是执行单独的删除odata调用。在单个组中添加这些所有remove方法,然后调用odatamod.submitChanges()
方法
例如:
//get all deffered groups
var aDeffGroup = odataMod.getDeferredGroups();
//add your deffered group
aDeffGroup.push("deletionGroup");
//set it back again to odatamodel
odataMod.setDeferredGroups(aDeffGroup);
odataMod.remove('/ProjectTaskServiceCollection(\'' + service.ObjectID + '\')/', {
//pass groupid to remove method.
groupId: "deletionGroup"});
odataMod.submitChanges({
// your deffered group id
groupId:"deletionGroup",
success: function() {
//Get message model data from Core and it contains all errors
// Use this data to show in dialog or in a popover or set this to your local model see below code
var aErrorData = sap.ui.getCore().getMessageManager().getMessageModel();
});
嘿,萨达姆·侯赛因,谢谢,但当我使用console.log(AerorData)时,它仍然会在我的控制台中打印200次,知道为什么吗?顺便说一句,您有一个输入错误,它是setDeferedGroup而不是setDeferedGroup我编辑了我的问题,以向您展示我迄今为止的尝试SAP.ui.getCore().getMessageManager().getMessageModel()这是一个返回错误数组的消息模型,您可以在popover控件中显示一个错误或显示整个数据。谢谢,现在我完全理解了批处理请求的工作原理,非常感谢您的帮助。另外,我遇到了一个有关延迟组ID的问题,我解决了它,但添加了:odataMod.setDeferredGroups(aDeffGroup);推后,我建议编辑代码并添加odataMod.setDeferredGroups(aDeffGroup);