SAP PI PO 消息监控器 SXI_MONITOR 报文相关数据库表介绍
SXMSCLUP | Cluster - Compressed Message Payload Property |
SXMSCLUR | Cluster - Compressed Message Payload Resource (attachments) |
SXMSPEMAS | Integration Engine: Enhanced Message Queue (Master) |
SXMSPERROR | XML Message Broker: Message Queue (Incorrect Entries) |
SXMSPFADDRESS | Addresses Master |
SXMSPHIST | XI Messages - Master History table |
SXMSPMAST | XI 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