OData сообщение об успехе, хотя нет новой записи? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть приложение SAPUI5, которое развернуто на сервере ABAP и доступно через Fiori Launchpad.Я использую это приложение для создания нового взаимодействия (OData Service CUAN_IMPORT_SRV) в Hybris Marketing.Моя проблема в том, что, хотя вызов OData не создал новую запись (потому что такая запись уже существует), я получаю сообщение об успехе.Когда я добавляю недопустимые данные в загружаемые данные, я получаю сообщение об ошибке.

Это мой код:

var oModel = new sap.ui.model.odata.v2.ODataModel("https://hostname:port/sap/opu/odata/sap/CUAN_IMPORT_SRV/", true);

var oData = { some json... }

oModel.create("/ImportHeaders", oData, { 
success: function() { 
    sap.m.MessageBox.success("Interaction successfully created!", {
        title: "Success"
    });
},
error: function() { 
    sap.m.MessageBox.error("Interaction could not be created.", {
        title: "Error"                                
    });
}
});

Когда я запускаю / n / iwfnd / traces, он помечается как «успешное выполнение» (хотя новая запись не была создана).

Как может получиться, что сообщение об успехе появляется, даже если новая запись не была создана?Как я могу избежать этого?

1 Ответ

0 голосов
/ 09 июня 2018

Прежде всего, добавьте свою бизнес-ошибку в бэкэнд ABAP:

DATA: 
 lt_bapi_return type table of bapiret2,
 lo_message_container type ref to /iwbep/if_v4_message_container.

#Error handling
if lt_bapi_return is not initial.
#check if an error message is in lt_bapi_return
loop at lt_bapi_return into ls_bapi_return.
if ls_bapi_return-type = 'E'.

lo_message_container = io_response->get_message_container( ).

loop at lt_bapi_return into ls_bapi_return.
lo_message_container->add_t100(
exporting
iv_msg_type = ls_bapi_return-type
iv_msg_id = ls_bapi_return-id
iv_msg_number = ls_bapi_return-number
iv_msg_v1 = ls_bapi_return-message_v1
iv_msg_v2 = ls_bapi_return-message_v2
iv_msg_v3 = ls_bapi_return-message_v3
iv_msg_v4 = ls_bapi_return-message_v4 ).
endloop.

"raise exception
raise exception type zcx_e2e001_odata_v4_so
exporting
message_container = lo_message_container.

endif.
endloop.

endif.

И в интерфейсе пользователя:

error: function(response) { 
    //response will have message details
    //each message can have business text, technical info, error code.
    sap.m.MessageBox.error("Interaction could not be created.", {
        title: "Error"                                
    });
}

Вы можете добавить эту частькод для каждого переопределенного метода. Лучше создать метод util и повторно использовать.

...