5. Обработка ошибок

Для вебморды обработка ошибок -- это одна из самых важных тем, ибо из-за большого количества объектов. Пойти что-то не так -- может что угодно.

В идеале -- нужно обрабатывать два вида ошибок:

  1. Что-то свалилось на фронтенде (где-то произошел throw new Error('message'))
  2. Что-то свалилось на бэкенде (BUSI_EXCEPTION/любая другая системная ошибка/выпадение в дамп при обработке запроса)

Чтобы каждый раз не дублировать код обработки ошибок, ОЧЕНЬ РЕКОМЕНДУЕТСЯ выносить его отдельно в утилитарный класс и вызывать.

Т.е. нагроможденную конструкцию

this.getView().setBusy(true);
this.getModel().read("/Entity('key'", {
	///.......
    error: function () {
        sap.m.MessageBox.error("Error!", {
            styleClass: this.getOwnerComponent().getContentDensityClass()  
        });
        this.getView().setBusy(false);
    },
    success: function(oData){
	    // Обработка, которая тоже потенциально может вызвать ошибки
	    // И в ней тоже придётся делать 
	    // try { } catch (e) { }
	    // здесь ожидается callback hell
    }
});

можно заменить на более минималистичную и наглядную:

this.getView().setBusy(false);
try{
	const entity = await this.useOdata().read("/Entity('key')");
	// Обработка, которая тоже потенциально может вызвать ошибки 
	// throw new Error("при обработке Х произошла ошибка");
} catch(e) {
	this.showMessage(e); // Вынесенный в родительский класс метод парсинга ошибки с oData

} finally {
	this.getView().setBusy(false);
}

В общем случае, можно прямо так и оставить одну строку с обработкой.
Если нужно для бизнес логики -- можно прямо здесь сделать проверку и поймать нужную ошибку.

Для унификации -- предлагаю класс с парсером ошибок и класс BaseController, у которого есть явные методы по отображению ошибок пользователю.

Используем правильный контрол

  1. Информационные сообщения, и сообщения об успехе -- можем показывать через Message Toast
  2. Сообщения об ошибках и предупреждения показываем пользователю явно -- во всплывающем диалоге (MessageBox или Dialog). Для отображения нескольких ошибок -- используем MessageView.

(Если вы используете BaseController из моего репозитория -- у вас это уже зашито в метод showMessage() )