繁体   English   中英

能否从 SAP 网关服务返回特定错误?

[英]Can you return specific errors from a SAP Gateway service?

我们有一个第 3 方,通过 JSON 有效负载将订单下达到我们的系统中,并将其放入 SAP 网关服务。

网关服务的结构包含 JSON 中预期的数据结构。

从网关服务调用 ABAP function,它接收有效负载并创建订单。

我们在 ABAP 端进行了一定程度的错误处理,但如果 JSON 格式存在任何问题,则会直接从 SAP 网关返回一般 500 错误,而无需进入 ABAP。

所以问题是:有没有办法将 JSON 的具体错误返回给最终用户?

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

在此处输入图像描述

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

  1. 将您的自定义错误消息并在 JSON 参数验证方法中引发业务异常

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

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

在此处输入图像描述

Gateway 中有两种主要的异常类型: /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跟踪有效负载以检查哪些有效负载到达前端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM