SAPUI5:很多错误消息

2020-09-27 21:05发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我使用oData,因此会...

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

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


嗨,

我使用oData,因此会产生如下错误:

数据:lo_exception类型参考/iwbep/cx_mgw_busi_exception,

             lo_container类型参考/iwbep/if_message_container。


       lo_container = mo_context-> get_message_container()。


         lo_container-> add_messages_from_bapi(

           出口

             it_bapi_messages = lt_return

 * iv_error_category =

                 iv_determine_leading_msg = abap_true

                 iv_entity_type = iv_entity_name

                 it_key_tab = it_key_tab

                 iv_add_to_response_header = abap_true

         )。





       创建对象lo_exception

         出口

 * textid =

 *上一个=

          message_container = lo_container

 * http_status_code ='500'

 * http_header_parameters =

 * sap_note_id =

 * msg_code =

 *实体类型= iv_entity_name

 *消息='Konnte nicht gespeichert werden!'

 * message_unlimited =

 * filter_param =

 * operation_no =

         。


       提高例外lo_exception。

但是我总是收到比我想得到的更多的错误消息:

只有中间一个是我添加的错误。

(13.7 kB)
5条回答
bbpeas
2020-09-27 21:41

迈克尔,你好,

您使用的是哪个UI5版本? 您拥有什么NW ABAP/SAP GW? 您介意在这里发布您的错误响应(使用JSON会很棒)吗?

我非常清楚此问题...当您从SAP GW向前端发送错误时,您将在前端收到一定的响应结构。 该结构包含前导消息,并且可能包含零个或更多个详细消息。 这是一个示例:

我们假设以下虚拟SAP GW ABAP代码:

方法employee_get_entityset。
     引发例外类型/iwbep/cx_mgw_not_impl_exc
       出口
         textid =/iwbep/cx_mgw_not_impl_exc => method_not_implemented
         方法='EMPLOYEES_GET_ENTITYSET'。
   ENDMETHOD。

使用/sap/opu/odata/sap/ZNABI_EMPLOYEE_SRV/Employees?$ format = json触发此服务实现代码将在响应中产生以下错误消息(JSON格式):

 {
   "错误":{
     "代码":"/img/IWBEP/CM_MGW_RT/021",
     "信息" : {
       " lang":" en",
       " value":"数据提供程序类中未实现方法'EMPLOYEES_GET_ENTITYSET'。
     },
     " innererror":{
       "申请":{
         " component_id":"",
         " service_namespace":"/img/SAP/",
         " service_id":" ZNABI_EMPLOYEE_SRV",
         " service_version":" 0001"
       },
       " transactionid":" 58BDC3218BC10D60E10080000AF0030E",
       " timestamp":" 20170307090853.3367070",
       " Error_Resolution":{
         " SAP_Transaction":"在SAP Gateway集线器系统(系统别名LOCAL)上运行事务/IWFND/ERROR_LOG并搜索带有上述时间戳的条目以获取更多详细信息",
         " SAP_Note":"请参阅SAP Note 1797736进行错误分析(https://service.sap.com/sap/support/notes/1797736)"
       },
       "错误详情" : [
         {
           "代码":"/img/IWBEP/CX_MGW_NOT_IMPL_EXC",
           " message":"数据提供程序类未实现方法'EMPLOYEES_GET_ENTITYSET'",
           " propertyref":"",
           "严重性":"错误",
           " target":""
         }
       ]
     }
   }
 }
 

在此示例中,我们提出了一个例外。 但是,SAP GW实际上具有前导消息(代码=/IWBEP/CM_MGW_RT/021)和一个错误详细信息(代码=/IWBEP/CX_MGW_NOT_IMPL_EXC)。 在两种情况下都可以看到,消息几乎是相同的:前导消息以点结束,而错误详细信息消息不以点结束! 只是消息中的代码和点本身不同! 这就是SAPUI5假定有2条不同的消息,因此UI5两次显示"一条"消息的原因。 从最终用户的角度来看,这是一场灾难。

SAPUI5具有发现重复消息并将其删除的逻辑。 这是对应的 ui5 github上的ODataMessageParser.js代码

//来自错误响应的消息应包含重复的消息-主要错误应为
//与第一个errordetail错误相同。 如果是这种情况,请删除第一个。
 如果(aMessages.length> 1){
     如果(
         aMessages [0] .getCode()== aMessages [1] .getCode()&&
         aMessages [0] .getMessage()== aMessages [1] .getMessage()
     ){
         aMessages.shift();
     }
 } 


换句话说:如果GW将为两条消息发送相同的代码和相同的消息(包括点),那么您在UI中只能看到一次消息! 从上面提到的UI5代码中,您还可以看到UI5仅比较前两个消息。 这意味着,如果SAP GW以不同的顺序向您发送消息(我也认为这也是您的情况),那么您将两次看到(领先)消息

//这将两次显示前导消息
[oLeadingMessage,oSomeOtherMessage,oLeadingMessage]

///您只会在UI上看到一次消息
[oLeadingMessage,oLeadingMessage,oSomeOtherMessage]


无论如何...恕我直言,这是GW中的错误。 我相信引导消息应该只可用一次(而不是在细节中可用),或者代码+消息应该完全相同。

从您的屏幕截图中,我可以看出一条消息带有一个点,而另一条消息则没有。 此外,我猜代码也不同。 这就是为什么您两次看到该消息的原因。

最好,
纳比

一周热门 更多>