Чтобы добавить к вышеуказанному ответу от jpenninkhof, у меня есть сценарий, в котором возникают события с запросом. (Возможно, событие застряло в очереди событий) даже после того, как запрос oViewModel.update (в моем случае это запрос на обновление) был завершен. Поэтому у меня есть решение для этого. Позвольте мне сначала объяснить проблему. У меня есть диалоговое окно для редактирования заказа на продажу с помощью кнопки «Сохранить/Отменить». В «Сохранить» oViewModel.update вызывается с функциями «Успех» и «Обработчик ошибок».
this.getOwnerComponent().getModel().detachRequestFailed(this.getOwnerComponent()._oErrorHandler._requestFailedHandler,this.getOwnerComponent()._oErrorHandler);
oViewModel.update(aObjectPath, aData, {
success: function(oData, oResponse) {
MessageToast.show("Request created successfully");
this.getOwnerComponent().getModel().attachRequestFailed(this.getOwnerComponent()._oErrorHandler._requestFailedHandler, this.getOwnerComponent()._oErrorHandler);
},
error: function(oData, oResponse) {
MessageToast.show("Error updating Sales Order.");
this.getOwnerComponent().getModel().attachRequestFailed(this.getOwnerComponent()._oErrorHandler._requestFailedHandler, this.getOwnerComponent()._oErrorHandler);
}});
ErrorHandler -> _ requestFailedHandler вызывается после функции ошибки, таким образом, по-прежнему появляется родовое всплывающее окно об ошибке. Я попробовал ErrorHandler -> attachRequestFailed() в oViewModel.attachRequestCompleted(), но обработчик requestFailed все еще вызывался после завершения запроса oData (возможно, это ошибка/ограничение).
Так что я создал еще один флаг в ErrorHandler.js вместе с функцией обратного вызова. Флаг предотвращает всплывающее всплывающее сообщение службы (например, ErrorHandler -> _ bMessageOpen) и вызывает обратный вызов, чтобы вызывающий абонент знал, что был вызван _showServiceError().
_showServiceError: function(sDetails) {
if (this._bServiceErrorOpen){
this._fnCallback();
return;
}
if (this._bMessageOpen) {
return;
}.....
}
Определим еще 2 функции, один, чтобы установить функцию обратного вызова флаг & и другие, чтобы сбросить его.
setServiceErrorFlag: function(fnCallback){
this._bServiceErrorOpen = true;
this._fnCallback = fnCallback;
},
resetServiceErrorFlag: function(){
this._bServiceErrorOpen = false;
this._fnCallback = undefined;
}
Прежде, чем звонить, уточните модель, установите этот флаг. Теперь ServiceMessage не будет отображаться, вместо этого будет вызываться анонимная функция обратного вызова, которая будет ждать, пока условие будет ложным.
var that = this;
this._bErrorResponse = false;
this.getOwnerComponent()._oErrorHandler.setServiceErrorFlag(function()
{
while (that._bErrorResponse === false){}
that.getOwnerComponent()._oErrorHandler.resetServiceErrorFlag();
});
В обработчик ошибок oViewModel.update(), установить _bErrorResponse истину, так что в то время как цикл получает вышел и флаг ErrorHandler сбрасывается. Это делается для того, чтобы флаг ErrorHandler был сброшен только после вызова Error callback.
error: function(oData, oResponse) {
MessageToast.show("Error updating Sales Order.");
that._bErrorResponse = true;
}
Таким образом, сообщение ServiceError подавляется, и вместо этого вы можете дать собственное сообщение об ошибке в функции обратного вызова ошибки oViewModel CRUD API.
Можете ли вы показать код? Возможно, вы можете попытаться остановить распространение событий в обработчике ошибок, используя https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.base.Event.html#cancelBubble или https: // sapui5 .hana.ondemand.com/документы/апи/символы/sap.ui.base.Event.html # preventDefault – cschuff