![](/img/trans.png)
[英]Azure function called from API gateway management service return "internal Server error"
[英]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 中进行错误日志记录的一般方法是:
它是在获取输入参数时完成的,它可以是 MPC_EXT class 的GetEntity
或CreateEntity
方法。 当我们谈到订单创建时,它可能是一个CreateEntity
,您可以在那里分析 JSON 字符串的结构并对其进行验证。 分析 JSON 不在此问题的 scope 范围内。
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.