OData V2 SubmitChanges错误回调不起作用

2020-08-19 16:55发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我已经实现了OData批处理,并且存在以下问题。

即使后端引发业务异常,也不会触发错误回调。

(我发现只有在出现连接错误时才会触发)

我的引发异常的后端代码

如果sy-subrc <> 0。
   io_message_container-> add_message_from_bapi(
     出口
       it_bapi_messages = lt_return
       iv_add_to_response_header = abap_true
   )
   引发异常类型/iwbep/cx_mgw_busi_excetion
     出口
       message_container = io_message_container。
 endif。

用于调用SubmitChanges的前端代码

 oModel.submitChanges({
 成功:功能(oRes){
//一些代码;
 },
 错误:函数(oErr){
//一些代码;
 },
 groupId:sBatchGroup
 });
 

引发异常时,我可以在控制台中看到错误消息,但不会触发错误回调。


我已阅读以下有关此问题的主题,但尚未找到解决方案。

https://answers。 sap.com/questions/12184545/submitchanges-error-callback-not-working-in-versio.html

/img/questions /12269639/odata-submitchanges-error-handling.html#

我需要做的是显示带有服务器返回的消息的消息弹出窗口。

除非OData请求失败,否则消息似乎不会出现在消息弹出窗口中。

此致

宇达电通

(47.4 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我已经实现了OData批处理,并且存在以下问题。

即使后端引发业务异常,也不会触发错误回调。

(我发现只有在出现连接错误时才会触发)

我的引发异常的后端代码

如果sy-subrc <> 0。
   io_message_container-> add_message_from_bapi(
     出口
       it_bapi_messages = lt_return
       iv_add_to_response_header = abap_true
   )
   引发异常类型/iwbep/cx_mgw_busi_excetion
     出口
       message_container = io_message_container。
 endif。

用于调用SubmitChanges的前端代码

 oModel.submitChanges({
 成功:功能(oRes){
//一些代码;
 },
 错误:函数(oErr){
//一些代码;
 },
 groupId:sBatchGroup
 });
 

引发异常时,我可以在控制台中看到错误消息,但不会触发错误回调。


我已阅读以下有关此问题的主题,但尚未找到解决方案。

https://answers。 sap.com/questions/12184545/submitchanges-error-callback-not-working-in-versio.html

/img/questions /12269639/odata-submitchanges-error-handling.html#

我需要做的是显示带有服务器返回的消息的消息弹出窗口。

除非OData请求失败,否则消息似乎不会出现在消息弹出窗口中。

此致

宇达电通

(47.4 kB)
付费偷看设置
发送
7条回答
我是小鹏鹏啊
1楼 · 2020-08-19 17:39.采纳回答

已通过将" iv_message_target"传递到" add_message"方法解决了该问题。

(" add_messages_from_bapi"没有此参数)。

之后,MessageManager开始从后端接收错误消息。

<后端代码>

 lv_target = |/Header('{}')|。
 io_message_container-> add_message(
   出口
     iv_msg_type ='E'
     iv_msg_id ='ZMSGCLASS'
     iv_msg_number ='000'
     iv_is_leading_message = abap_ture
     iv_add_to_response_header = abap_ture
     iv_message_target = lv_target
 )。
  引发异常类型/iwbep/cx_mgw_busi_excetion
    出口
      message_container = io_message_container。
 

<前端代码>

由于即使后端有错误,submitChanges回调仍然成功,所以我需要进行额外的错误检查。

 oModel.submitChanges({
 成功:功能(oRes){
//额外检查后端错误
 if(!that._responseHasError(oRes)){
//执行成功函数
 }
 },
 错误:函数(oErr){
//执行错误功能
 },
 groupId:sBatchGroup
 });

 _responseHasError:function(oRes){
 var bStatusExists = oRes中的"响应"。__batchResponses [0];
 如果(!bStatusExists){
 返回false;
 }
 否则((oRes .__ batchResponses [0] .response.statusCode> = 400){
 返回true;
 }
 返回false;
 },
 
Cikesha
2楼-- · 2020-08-19 17:55

只是一个小问题。.您如何将消息发送到弹出窗口? 您打算在错误句柄中手动读取它们吗?

落灬小鱼
3楼-- · 2020-08-19 17:38

嗨,Mahesh,

一旦您将以下代码添加到控制器的init方法,并将MessagePopover控件添加到视图,就应该自动显示消息。

MessaegManager负责获取和显示消息。

 var oMsgManager = sap.ui.getCore()。getMessageManager();
 this.getView()。setModel(oMsgManager.getMessageModel()," message");
 oMsgManager.registerObject(this.getView(),true);
 
Alawn_Xu
4楼-- · 2020-08-19 17:42

感谢Mahesh,我实现了此注释功能。

我的假设是,如果SubmitChanges()返回错误,则消息管理器可以自动选择消息。

宇峰Kouji
5楼-- · 2020-08-19 17:37

是。 此应用首先使用create方法实现,并且错误处理按预期工作。

Nan4612
6楼-- · 2020-08-19 17:41

哦,我假设messagemanger还要处理来自commitchangs抛出的odata消息。

但是,如果您尝试使用普通的create call以及所有方法,它们是否会被消息管理器记录?

My梦
7楼-- · 2020-08-19 17:45

嗨,丹尼尔,

您可以使用以下代码检查批量调用是否成功。

如果调用成功,则ODataModel应该不再具有挂起的更改。

仅当对后端本身的调用失败(例如连接错误)时,才会调用commitChanges的错误回调。

 oOdataModel.submitChanges({
  成功:功能(){
 如果(oOdataModel.hasPendingChanges()){
//错误回调
 }
 其他{
//成功回调
 }
  },
  错误://在连接错误时调用
 }); 

此致

Mio

一周热门 更多>