您可以从SAP Gateway服务返回特定错误吗?

问题描述 投票:1回答:1

[我们有一个第三方通过SAP网关服务中的JSON有效负载向我们的系统下订单。

网关服务的结构保留了JSON中期望的数据结构。

从网关服务中,调用ABAP函数,该函数获取有效负载并创建订单。

我们在ABAP方面有一定程度的错误处理,但是,如果JSON格式完全没有任何问题,则直接从SAP Gateway返回通用500错误,而无需进入ABAP。

所以问题是:有什么办法可以将JSON的特定错误返回给最终用户?

api sap abap sap-gateway
1个回答
0
投票

首先,主网关日志位于/IWFND/ERROR_LOG tcode中。它同时包含系统错误和自定义网关错误,看起来像这样

enter image description here

在SAP Gateway中进行错误记录的一般方法是:

  1. 使用JSON参数验证方法放置您的自定义错误消息并引发业务异常

在获取输入参数时完成,它可以是MPC_EXT类的GetEntityCreateEntity方法。当我们谈论订单创建时,可能是CreateEntity,您可以在其中分析JSON字符串的结构并对其进行验证。分析JSON不在此问题的范围内。

  1. 发现错误后,将触发异常,并在日志和浏览器控制台中都将显示它

enter image description here

网关中有两种主要的异常类型:/iwbep/cx_mgw_busi_exception/iwbep/cx_mgw_tech_exception,但是由于我们要注入自定义逻辑,因此我们选择前者。

实现异常处理的一般方法是:

IF json_invalid = abap_true.

DATA(lo_message_container) = me->mo_context->get_message_container( ).
lo_message_container->add_message( iv_msg_type = /iwbep/cl_cos_logger=>error
                                   iv_msg_number = '100'
                                   iv_msg_id = 'ZJSO'
                                   iv_add_to_response_header = abap_true
                                 ).

RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
 EXPORTING
  message_container = lo_message_container.

重要提示:添加消息时不要错过iv_add_to_response_header = abap_true参数,因此您可以直接读取错误消息作为响应,而无需查看任何日志。

由于您的业务需求包括根据JSON创建订单,因此您可能需要add_messages_from_bapi方法:

lo_message->add_messages_from_bapi( it_bapi_messages = lt_return_msg ).

它使用了来自订单创建BAPI的确切BAPIRET2结构。

最后,毕竟值得通过/IWFND/TRACE跟踪有效负载以检查前端有哪些有效负载。

© www.soinside.com 2019 - 2024. All rights reserved.