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.

block pernr

block pernr 2

Создадим метод raise_exception, который будет получать текст ошибки и возвращать его на фронтенд:
raise exception
с одним параметром:
raise parameter

и исходным кодом:

  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)…):
error console

//разберем строку с ошибкой
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 message toast

🙂