可能是我的问题的答案,但我没有看到它:Stick with generic ErrorHandler.js while allowing custom errormessage handling per request and not have double message boxes
我正在扩展Fiori标准应用程序(具体来说是MyProfile),因此一切正常。现在,客户希望根据网关发送的技术消息来显示特殊的错误消息。因此,我尝试在 Component.js 中扩展ErrorHandler:
jQuery.sap.declare("com.company.hcm.fab.myprofile.ext.Component");
jQuery.sap.require("com.company.hcm.fab.myprofile.ext.controller.ErrorHandler");
sap.ui.component.load({
name: "hcm.fab.myprofile",
url: "/sap/bc/ui5_ui5/sap/hcmfab_prfl_mon"
});
this.hcm.fab.myprofile.Component.extend("com.company.hcm.fab.myprofile.ext.Component", {
metadata: {
manifest: "json"
},
init: function() {
hcm.fab.myprofile.Component.prototype.init.apply(this, arguments);
this._oErrorHandler = new com.company.hcm.fab.myprofile.ext.controller.ErrorHandler(this);
}
});
然后按照显示的帖子中的理解方式扩展了 ErrorHandler.js :
sap.ui.define([
"hcm/fab/myprofile/controller/ErrorHandler",
"sap/m/MessageBox"
], function(ErrorHandler, MessageBox) {
"use strict";
return ErrorHandler.extend("com.company.hcm.fab.myprofile.ext.controller.ErrorHandler", {
constructor: function (oComponent) {
this._oResourceBundle = oComponent.getModel("i18n").getResourceBundle();
this._oComponent = oComponent;
this._oModel = oComponent.getModel();
this._sErrorText = this._oResourceBundle.getText("errorTitle");
this._oModel.attachRequestFailed(this._requestFailedHandler, this);
},
_requestFailedHandler: function(oEvent) {
var oParameters = oEvent.getParameters();
console.log("now?", oResponse);
this._showServiceError(oParameters.response);
}
});
});
无论如何,我不仅会看到我的消息,而且还会看到来自标准应用程序中ErrorHandler的消息。有人有主意吗?
最好的问候 马可
更新 为了阐明我的想法:在我正在扩展的原始应用程序中,ErrorHandler在init-Method中初始化。因此,如果我做对了,我必须完全重写/覆盖init-Method,或者找到一种方法来分离原始事件,然后可以扩展或重写ErrorHandler。 我更喜欢后面的选项,因为我不仅必须在此标准fiori应用程序中扩展ErrorHandler,而且还要扩展其他六个应用程序。与总是重写ErrorHandler相比,总是重写init-method感觉更糟。
答案 0 :(得分:0)
我猜是因为您首先调用了super方法,该方法初始化了原始的ErrorHandler(即,将事件处理程序附加到失败的请求等)。之后,您只需在自己的ErrorHandler中附加更多处理程序即可。您需要分离先前的处理程序(可能很棘手),或者首先不初始化原始类。