SAP PI PO 消息监控器 SXI_MONITOR 报文相关数据库表介绍 SXMSPMAST SXMSCLUP

SAP PI PO 消息监控器 SXI_MONITOR 报文相关数据库表介绍

SXMSCLUP Cluster - Compressed Message Payload Property
SXMSCLURCluster - Compressed Message Payload Resource (attachments)
SXMSPEMAS  Integration Engine: Enhanced Message Queue (Master)
SXMSPERRORXML Message Broker: Message Queue (Incorrect Entries)
SXMSPFADDRESSAddresses Master
SXMSPHISTXI Messages - Master History table
SXMSPMASTXI Messages - Master
SXMSPVERS Integration Engine: Message Version

 CL_XMS_PERSIST
READ_MSG_ALL

  CALL METHOD read_persist_tab_all
    EXPORTING
      im_msgguid      = im_msgguid
      im_pid          = im_pid
      im_version      = im_version
      im_client       = im_client
      im_read_payload = im_read_payload
    IMPORTING
      ex_pmast        = ls_sxmspmast
      ex_pvers        = ls_sxmspvers
      ex_tprop        = lt_sxmspprop
      ex_tres         = lt_sxmspres
      ex_txres        = lt_sxmspxres
      ex_tns          = lt_sxmspns.

CL_XMS_PERSIST
READ_PERSIST_TAB_ALL

LT_XRES[1]-RESCONTENT
EX_TXRES[1]-RESCONTENT

IM_READ_PAYLOAD    TYPE SXMSFLAG  DEFAULT 'X'    Payload lesen
EX_PMAST    TYPE SXMSPMAST    XML Message Broker: Message-Queue (Master)
EX_PVERS    TYPE SXMSPVERS    XML Message Broker: Message-Version
EX_TPROP    TYPE SXMSTPROP    Message Properties
EX_TRES    TYPE SXMSTRES    Message Ressourcen
EX_TXRES    TYPE SXMSTXRES    Message X-Ressourcen
EX_TNS    TYPE SXMSTNS    Namespace Context

    IMPORT lt_prop TO lt_prop
           FROM DATABASE sxmsclup(is) TO wa_clup CLIENT lv_mandt ID clustkey.

      IMPORT lt_res  TO ex_res
             lt_xres TO ex_xres
             lt_ns   TO ex_ns
             FROM DATABASE sxmsclur(is) TO wa_clur CLIENT im_mandt ID im_clustkey.

METHOD read_persist_tab_all .

  DATA: l_prop             TYPE sxmspprop,
        l_res              TYPE sxmspres,
        l_xres             TYPE sxmspxres,
        l_ns               TYPE sxmspns.
  DATA: lt_prop            TYPE sxmspropt,
        lt_res             TYPE sxmsrest,
        lt_xres            TYPE sxmsxrest,
        lt_ns              TYPE sxmsnst.
  DATA: lv_master          TYPE tabname,
        lv_master_retry    TYPE tabname,
        lv_vers            TYPE tabname,
        lv_vers_retry      TYPE tabname.
  DATA: lv_switch_mode     TYPE sxmsswtchm,
        lv_read_retry      TYPE sxmsflag,
        lv_mandt           TYPE symandt,
        lv_read_payload    TYPE sxmsflag,
        lv_not_found       TYPE c LENGTH 1.

  DATA: clustkey           TYPE sxmsclustkey.
  DATA: wa_clup            TYPE sxmsclup.

  DATA: lv_p1              TYPE string.
  DATA: lv_p2              TYPE string.
  DATA: lv_p3              TYPE string.
  DATA: lv_p4              TYPE string.

  FIELD-SYMBOLS <props> TYPE sxmsprops.
  FIELD-SYMBOLS <ress>  TYPE sxmsress.
  FIELD-SYMBOLS <xress> TYPE sxmsxress.
  FIELD-SYMBOLS <nss>   TYPE sxmsnss.

* get the switch mode
  CLEAR: lv_switch_mode, lv_not_found.

  lv_read_payload = im_read_payload.

  CALL METHOD cl_xms_persist=>get_current_table_container
    IMPORTING
      ex_master       = lv_master
      ex_vers         = lv_vers
      ex_master_retry = lv_master_retry
      ex_vers_retry   = lv_vers_retry
      ex_switch_mode  = lv_switch_mode
      ex_read_retry   = lv_read_retry.

  IF im_client IS INITIAL.
    lv_mandt = sy-mandt.
  ELSE.
    lv_mandt = im_client.
  ENDIF.

  SELECT SINGLE * FROM (lv_master) CLIENT SPECIFIED
        INTO ex_pmast
        WHERE mandt    = lv_mandt
        AND   msgguid  = im_msgguid
        AND   pid      = im_pid.

  IF sy-subrc <> 0.           "message unknown
* reread if table switch is currently active
    IF lv_read_retry = co_true.

      SELECT SINGLE * FROM (lv_master_retry) CLIENT SPECIFIED
           INTO ex_pmast
           WHERE mandt    = lv_mandt
           AND   msgguid  = im_msgguid
           AND   pid      = im_pid.

      IF sy-subrc <> 0.           "message unknown
        lv_not_found = 'X'.
      ENDIF.
    ELSE.
      lv_not_found = 'X'.
    ENDIF.
  ENDIF.

  IF lv_not_found = 'X'.          " message unknown
    lv_p1 = im_msgguid.
    lv_p2 = im_pid.
    lv_p3 = im_version.
    CONCATENATE '(loc: RM1'
                '; TC: ' lv_master
                '; SM: ' lv_switch_mode
                '; RR: ' lv_read_retry
                '; Mandt: ' lv_mandt
                ')'
                INTO lv_p4
                SEPARATED BY space.                         "#EC NOTEXT

    RAISE EXCEPTION TYPE cx_xms_syserr_persist
      EXPORTING
        id = cx_xms_syserr_persist=>co_id_no_msg_vers
        p1 = lv_p1
        p2 = lv_p2
        p3 = lv_p3
        p4 = lv_p4.
  ENDIF.

  CLEAR: lv_not_found.

  SELECT SINGLE * FROM (lv_vers) CLIENT SPECIFIED
        INTO ex_pvers
        WHERE mandt    = lv_mandt
        AND   msgguid  = im_msgguid
        AND   pid      = im_pid
        AND   vers     = im_version.

  IF sy-subrc <> 0.           "message unknown
* reread if table switch is currently active
    IF lv_read_retry = co_true.

      SELECT SINGLE * FROM (lv_vers_retry) CLIENT SPECIFIED
            INTO ex_pvers
            WHERE mandt    = lv_mandt
            AND   msgguid  = im_msgguid
            AND   pid      = im_pid
            AND   vers     = im_version.

      IF sy-subrc <> 0.           "message unknown
        lv_not_found = 'X'.
      ENDIF.
    ELSE.
      lv_not_found = 'X'.
    ENDIF.
  ENDIF.

  IF lv_not_found = 'X'.          " message unknown
    lv_p1 = im_msgguid.
    lv_p2 = im_pid.
    lv_p3 = im_version.
    CONCATENATE '(loc: RM2'
                '; TC: ' lv_master
                '; SM: ' lv_switch_mode
                '; RR: ' lv_read_retry
                '; Mandt: ' lv_mandt
                ')'
                INTO lv_p4
                SEPARATED BY space.                         "#EC NOTEXT

    RAISE EXCEPTION TYPE cx_xms_syserr_persist
      EXPORTING
        id = cx_xms_syserr_persist=>co_id_no_msg_vers
        p1 = lv_p1
        p2 = lv_p2
        p3 = lv_p3
        p4 = lv_p4.

  ENDIF.

* cluster key
  clustkey-msgguid  = im_msgguid.
  clustkey-pid      = im_pid.
  clustkey-vers     = im_version.

  IF lv_switch_mode = 2.
    IMPORT lt_prop TO lt_prop
           FROM DATABASE sxmsclup2(is) TO wa_clup CLIENT lv_mandt ID clustkey.

    IF sy-subrc <> 0.
* reread if table switch is currently active
      IF lv_read_retry = co_true.
        IMPORT lt_prop TO lt_prop
               FROM DATABASE sxmsclup(is) TO wa_clup CLIENT lv_mandt ID clustkey.

        IF sy-subrc <> 0.
          lv_not_found = 'X'.
        ENDIF.
      ELSE.
        lv_not_found = 'X'.
      ENDIF.
    ENDIF.
  ELSE.
    IMPORT lt_prop TO lt_prop
           FROM DATABASE sxmsclup(is) TO wa_clup CLIENT lv_mandt ID clustkey.

    IF sy-subrc <> 0.
* reread if table switch is currently active
      IF lv_read_retry = co_true.
        IMPORT lt_prop TO lt_prop
               FROM DATABASE sxmsclup2(is) TO wa_clup CLIENT lv_mandt ID clustkey.

        IF sy-subrc <> 0.
          lv_not_found = 'X'.
        ENDIF.
      ELSE.
        lv_not_found = 'X'.
      ENDIF.
    ENDIF.
  ENDIF.

  IF lv_not_found = 'X'.          " message unknown

    lv_p1 = im_msgguid.
    lv_p2 = im_pid.
    lv_p3 = im_version.

    CONCATENATE '(loc: RM3'
                '; TC: ' lv_master
                '; SM: ' lv_switch_mode
                '; RR: ' lv_read_retry
                '; Mandt: ' lv_mandt
                ')'
                INTO lv_p4
                SEPARATED BY space.                         "#EC NOTEXT

    RAISE EXCEPTION TYPE cx_xms_syserr_persist
      EXPORTING
        id = cx_xms_syserr_persist=>co_id_no_msg_vers
        p1 = lv_p1
        p2 = lv_p2
        p3 = lv_p3
        p4 = lv_p4.

  ENDIF.

  CLEAR ex_tprop[].
  l_prop-msgguid  = clustkey-msgguid.
  l_prop-pid      = clustkey-pid.

  LOOP AT lt_prop ASSIGNING <props>.
    MOVE-CORRESPONDING <props> TO l_prop.
    APPEND l_prop TO ex_tprop.
  ENDLOOP.
  UNASSIGN <props>.

  IF ex_pmast-msgstate = co_stat_error_trans
                     AND im_version = ex_pmast-vers.
    FIELD-SYMBOLS <prop> TYPE sxmspprop.
    READ TABLE ex_tprop WITH KEY nsuri = if_xms_msghdr30_error=>co_nsuri lcname = if_xms_msghdr30_error=>co_lcname ASSIGNING <prop>.
    IF <prop> IS ASSIGNED AND <prop>-content IS INITIAL.
      DATA error TYPE sxmsperror.
      TRY.
          get_error_info(
            EXPORTING
              im_msgguid = ex_pmast-msgguid    " XMB: Message-ID
              im_pid     = ex_pmast-pid    " XML Message Broker: interne logische Pipeline-ID
              im_client = im_client
            IMPORTING
              ex_perr    = error    " XML Message Broker: Message-Queue (fehlerhafte Einträge)
          ).

          DATA error_hdr TYPE REF TO cl_xms_msghdr30_error.
          CREATE OBJECT error_hdr.
          error_hdr->set_retry( error-retry ).
          error_hdr->set_category( cx_xms_syserr_engine=>co_category_xiserver ).
          error_hdr->set_code( im_area = error-errcat im_id = error-errcode ).
          DATA stack_tab TYPE sxms_tag_attributes.
          DATA stack_wa TYPE LINE OF sxms_tag_attributes.
          stack_wa-value = error-errtxt.
          APPEND stack_wa TO stack_tab.
          error_hdr->set_stack( stack_tab ).
          <prop>-content = error_hdr->if_xms_prop~writetoxmlstring( ).
          <prop>-linecount = 1.
        CATCH cx_xms_system_error ##NO_HANDLER.
      ENDTRY.
    ENDIF.
  ENDIF.
  CALL METHOD me->read_persist_clur_tab
    EXPORTING
      im_mandt        = lv_mandt
      im_clustkey     = clustkey
      im_read_payload = lv_read_payload
      im_enc_key      = ex_pvers-enc_key
    IMPORTING
      ex_res          = lt_res
      ex_xres         = lt_xres
      ex_ns           = lt_ns.

* Payload necessary?
  IF lv_read_payload = 'X'  OR
     lv_read_payload = '1'.

* Yes
    IF ex_pvers-vers_link <> im_version AND
       ex_pvers-paylcount_link = '999'.

* cluster key
      clustkey-msgguid  = im_msgguid.
      clustkey-pid      = im_pid.
      clustkey-vers     = ex_pvers-vers_link.

       SELECT SINGLE enc_key FROM (lv_vers) CLIENT SPECIFIED
        INTO ex_pvers-enc_key
        WHERE mandt    = lv_mandt
        AND   msgguid  = im_msgguid
        AND   pid      = im_pid
        AND   vers     = ex_pvers-vers_link.

  IF sy-subrc <> 0.           "message unknown
* reread if table switch is currently active
    IF lv_read_retry = co_true.

      SELECT SINGLE enc_key FROM (lv_vers_retry) CLIENT SPECIFIED
            INTO ex_pvers-enc_key
            WHERE mandt    = lv_mandt
            AND   msgguid  = im_msgguid
            AND   pid      = im_pid
            AND   vers     = ex_pvers-vers_link.
      endif.
  endif.

      CALL METHOD me->read_persist_clur_tab
        EXPORTING
          im_mandt        = lv_mandt
          im_clustkey     = clustkey
          im_read_payload = lv_read_payload
          im_enc_key      = ex_pvers-enc_key
        IMPORTING
          ex_xres         = lt_xres.

    ENDIF. " ex_pvers-vers_link

  ELSE. " im_read_payload
*  No
    FREE lt_xres.
  ENDIF. " im_read_payload

  CLEAR ex_tres[].
  l_res-msgguid  = clustkey-msgguid.
  l_res-pid      = clustkey-pid.

  LOOP AT lt_res ASSIGNING <ress>.
    MOVE-CORRESPONDING <ress> TO l_res.
    APPEND l_res TO ex_tres.
  ENDLOOP.
  UNASSIGN <ress>.

  CLEAR ex_txres[].
  l_xres-msgguid  = clustkey-msgguid.
  l_xres-pid      = clustkey-pid.

  LOOP AT lt_xres ASSIGNING <xress>.
    MOVE-CORRESPONDING <xress> TO l_xres.
    APPEND l_xres TO ex_txres.
  ENDLOOP.
  UNASSIGN <xress>.

  CLEAR ex_tns[].
  l_ns-msgguid  = clustkey-msgguid.
  l_ns-pid      = clustkey-pid.

  LOOP AT lt_ns ASSIGNING <nss>.
    MOVE-CORRESPONDING <nss> TO l_ns.
    APPEND l_ns TO ex_tns.
  ENDLOOP.
  UNASSIGN <nss>.

ENDMETHOD.                    "

 SXMSDCONF
SXMSINTERFACE
SXMSMSGREF
SXMSMSTAT
SXMSPIPE
SXMSPMAST, SXMSPEMAS

CL_XMS_PERSIST_ADM
SELECT_MSG
SELECT_MSG_JOIN_WOM
SELECT_MSG    Selecting of messages, for example, from the monitor
SELECT_MSG_JOIN_WM    Join for 'Select_msg' with List of MessageGUID
SELECT_MSG_JOIN_WOM    Join for 'Select_msg' Without List of MessageGUID

SXI_MONITOR
SXMB_MONI
SXMB_SELECT_MESSAGES
SXMB_SELECT_MESSAGES_NEW
Returns list of messages according to selction criteria

PI Monitoring Functionality –Fetching Data from SXMB_MONI Standard Tableshttps://archive.sap.com/kmuuid2/b050ff4f-84c3-2b10-3d99-8f9c44f57a17/PI%20Monitoring%20Functionality%20%E2%80%93%20Fetching%20Data%20from%20SXMB_MONI%20Standard%20Tables.pdf

PI Monitoring Functionality Fetching Data from SXI_MONITOR SXMB_MONI Standard Tables - Part Ihttps://wiki.scn.sap.com/wiki/display/Snippets/PI+Monitoring+Functionality+-+Fetching+Data+from+SXMB_MONI+Standard+Tables+-+Part+I

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值