SAP异步SOAP服务fault message抓取

华坚成
2023-12-01

背景
SAP调用本系统的异步SOAP服务,需要读取standard fault message, 获取异步服务的异常
原理
异步的fault message, 会记录到SOAP服务的Error log中,可以通过事务代码SRT_MONI或SRT_ELOG查询到;而通过SOAP服务代理类的protocol方法,很容易获取每次服务调用的唯一标识message id,再通过此ID获取log条目及详细的context信息。需要注意的是,异步服务执行时间很难确定,因此在commit服务操作后,需等待log写入DB,需要自行判断等待时间长短。此方案是偶然发现,并不是标准做法,仅供参考。
官方protocol参考:https://help.sap.com/viewer/12aa7f056c531014aa5bca7aee037e55/7.0.37/en-US/473d95b07e1a20cae10000000a155369.html

参考代码

      lo_api->product_mdmbulk_replicate_requ(
        input = ls_input
      ).

      commit work and wait.
      wait up to 1 SECONDS.

      data(lo_protocol_message) = cast cl_wsprotocol_message_id(
                                      lo_api->get_protocol( if_wsprotocol=>message_id ) ).

      data(lv_msssage_id) = lo_protocol_message->if_wsprotocol_message_id~get_message_id( ).

      data:lt_message_id type srt_util_uuid_tab,
           ls_message_id type sysuuid_c.

      ls_message_id = lv_msssage_id.
      append ls_message_id to lt_message_id.

      cl_soap_util_db=>log_get_data_by_mids(
      exporting
        mid_list = lt_message_id
      importing
        error_message = data(lv_error_message)
        result_list = data(lt_result_list)
      ).

      "获取log的详细context信息
      read table lt_result_list into data(ls_result) with key t100_msgno = '131'.
      if sy-subrc eq 0.
        cl_soap_xml_parser=>get_formatted_data(
        exporting
        xdoc       = ls_result-error_context
        importing
        data       = data(lt_xml_data)
              ).

20220223更新
发现一个可能有用的方法CL_BS_SOA_XI_UTILS=>GET_XI_GUID( )

附录

对于XI monitor相关内容感兴趣的,可以阅读一下链接。
Retrieving XI Messages from ABAP
Fetching Data from SXMB_MONI Standard Tables

 类似资料: