| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- sap.ui.define([
- "sap/ui/base/Object",
- "sap/m/MessageBox"
- ], function (UI5Object, MessageBox) {
- "use strict";
- return UI5Object.extend("sap.ui.demo.orderbrowser.controller.ErrorHandler", {
- /**
- * Handles application errors by automatically attaching to the model events and displaying errors when needed.
- * @class
- * @param {sap.ui.core.UIComponent} oComponent reference to the app's component
- * @public
- * @alias sap.ui.demo.orderbrowser.controller.ErrorHandler
- */
- constructor : function (oComponent) {
- this._oComponent = oComponent;
- this._oModel = oComponent.getModel();
- this._bMessageOpen = false;
- this._oModel.attachMetadataFailed(function (oEvent) {
- var oParams = oEvent.getParameters();
- this._showServiceError(oParams.response);
- }, this);
- this._oModel.attachRequestFailed(function (oEvent) {
- var oParams = oEvent.getParameters();
- // An entity that was not found in the service is also throwing a 404 error in oData.
- // We already cover this case with a notFound target so we skip it here.
- // A request that cannot be sent to the server is a technical error that we have to handle though
- if (oParams.response.statusCode !== "404" || (oParams.response.statusCode === 404 && oParams.response.responseText.indexOf("Cannot POST") === 0)) {
- this._showServiceError(oParams.response);
- }
- }, this);
- },
- /**
- * Shows a {@link sap.m.MessageBox} when a service call has failed.
- * Only the first error message will be display.
- * @param {string} sDetails a technical error to be displayed on request
- * @private
- */
- _showServiceError : async function (sDetails) {
- if (this._bMessageOpen) {
- return;
- }
- this._bMessageOpen = true;
- const oResourceBundle = await this._oComponent.getModel("i18n").getResourceBundle();
- MessageBox.error(
- oResourceBundle.getText("errorText"),
- {
- id : "serviceErrorMessageBox",
- details : sDetails,
- styleClass : this._oComponent.getContentDensityClass(),
- actions : [MessageBox.Action.CLOSE],
- onClose : function () {
- this._bMessageOpen = false;
- }.bind(this)
- }
- );
- }
- });
- });
|