SapUI5: Обработка ошибки при создании записи oData (create)
При вызове метода create, а затем и при обработке и создании записи в бэкенде могут возникать ошибки, которые надо отправлять обратно на фронтенд пользователю.
Посмотрим как это сделать!
В контроллере вызываем метод создания записи create:
oModel.create("/ModifySet", aFld, { success: function(oDt, response) { //если запрос выполнился успешно }, error: function(err) { //запрос выполнился с ошибкой //разберем строку с ошибкой err = JSON.parse(err.responseText); //выведем ошибку (err.error.message.value) sap.m.MessageToast.show("Ошибка изменения" + fieldObj.Fieldlabel + "! (" + err.error.message.value +")", { duration: 3000, //свойство мессадж тоаст animationDuration: 500, autoClose: true }); } }); |
На стороне бекенда, в методе MODIFYSET_CREATE_ENTITY пробуем заблокировать табельный номер. Если табельный номер не блокируется, то мы читаем текст ошибки и передаем его методу raise_exception, который будет отдавать текст ошибки на фронтенд пользователю:
"Блокируем табельный CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE' EXPORTING number = ls_data-pernr IMPORTING return = ls_return. IF ls_return-type = 'E' . lv_str_err = ls_return-message. raise_exception( i_err = lv_str_err ). EXIT. ENDIF. |
Создадим метод raise_exception, который будет получать текст ошибки и возвращать его на фронтенд:
с одним параметром:
и исходным кодом:
method RAISE_EXCEPTION. DATA: lt_header TYPE /iwbep/t_mgw_name_value_pair , lv_message TYPE string , lv_msg TYPE c LENGTH 55 . FIELD-SYMBOLS: < fs_header > TYPE LINE OF /iwbep/t_mgw_name_value_pair . lv_msg = i_err. lv_message = cl_http_utility=>escape_url( i_err ). APPEND INITIAL LINE TO lt_header ASSIGNING < fs_header >. < fs_header >-name = 'error'. < fs_header >-value = lv_message . RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception EXPORTING textid = /iwbep/cx_mgw_busi_exception=>business_error http_header_parameters = lt_header message = CONV #( lv_msg ). endmethod. |
На стороне фронтенда распарсим ответ и выведем его при помощи sap.m.MessageToast. (см. код выше в oModel.create, error: function(err)…):
//разберем строку с ошибкой err = JSON.parse(err.responseText); //выведем ошибку (err.error.message.value) sap.m.MessageToast.show("Ошибка изменения" + fieldObj.Fieldlabel + "! (" + err.error.message.value +")", { duration: 3000, animationDuration: 500, autoClose: true }); |
🙂
Привет, в консоле всё равно будет появляться сообщение типа error. Как его обойти ?