Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
rodrigoalejandro_pertierr
Active Contributor
0 Kudos

In the sdn there are some documents abput how to improve or  fetch data from sxi_monitor. in this case a did two RFC.The first RFC (ZXI_MONITOR) fetch the data of differents messages from Imports parameters filters. 

The second RFC get back the Payload (inbound Message) from the message ID thats comes in a Import Parameter

zxi_monitor RFC receive parameters like

    • EndDate
    • BeginTime
    • EndTime
    • SenderSystem
    • TargetSystem
    • MessageID

in simples words the RFC fetch the data from those filters and fill the table GT_MESSAGES.

Also *ZDISPLAY_MESSAGE_PAYLOAD *RFC get the message payload from the messageID

But no much words a go to the action. here you have the ABAP code. this develop is different from others blogs cozi dont create any custom structureto return data, just ussing the standard code and tables.

Here ZXI_MONITOR 

 h5. FUNCTION zxi_monitor.<br />"----

""Local
Interface:
"  IMPORTING<br />"     VALUE(D_BEGINDATE) TYPE  SYDATUM
*"    
VALUE(D_ENDDATE) TYPE  SYDATUM
*"     VALUE(T_BEGINTIME) TYPE 
SYUZEIT
"     VALUE(T_ENDTIME) TYPE  SYUZEIT OPTIONAL<br />"    
VALUE(S_SENDER_SYSTEM) TYPE  CHAR20 OPTIONAL
*"    
VALUE(S_TARGET_SYSTEM) TYPE  CHAR20 OPTIONAL
*"     VALUE(MESSAGEID)
TYPE  CHAR40 OPTIONAL
"  EXPORTING<br />"     VALUE(GT_MESSAGES)
TYPE  Z_TT_SXMSMSGDSP
"----
<br /><br /><br />
Tables*&----

**&     
Form  build_list
*&----

**      
text
*----
<br /><br />FORM
build_list TABLES gt_messages<br />                USING d_begindate<br />                     
d_enddate<br />                      t_begintime<br />                     
t_endtime<br />                      s_sender_system<br />                     
s_target_system<br />                      messageid.<br /><br /><br /> 
TYPES:BEGIN OF gt_msgguid_sel,<br />             sign(1),<br />            
option(2),<br />             low(36) TYPE c,<br />             high(36) TYPE
c,<br />           END OF gt_msgguid_sel.<br />  DATA: status(20).<br /> 
DATA: "lv_tabix      LIKE sy-tabix,<br />           lv_state_only TYPE
sxmsflag,<br />*          lv_msgstate   TYPE sxmspmstat,<br />          
lv_client     LIKE sy-mandt,<br />           ls_sxmspemas  TYPE
sxmspemas_sr,<br />           lt_msgguid    TYPE sxmsmguidt,<br />          
ls_msgguid    TYPE sxmsmguid,<br />           lt_pids       TYPE
sxms_sel_options,<br />           ls_pids       TYPE sxmsselopt,<br />          
lt_back_pids  TYPE sxms_tab_sxmspid,<br />           ls_back_pids  TYPE
sxmspid,<br />           wa            TYPE gt_msgguid_sel,<br />          
wa_msgtab     TYPE sxmsmsglst,<br />           lt_clients    TYPE
sxmb_symandt_tab,<br />           lv_index      TYPE sxmsmguid,<br />          
lv_index_count TYPE sxmxindex,<br />           lv_process_mode,<br />          
l_first_ts    TYPE timestampl,<br />           l_exe_date    TYPE d,<br />          
l_exe_time    TYPE t,<br />           l_number      TYPE i VALUE 200.<br /> 
DATA: lt_mstat_tab  TYPE sxmspmstat_tab.<br />  DATA: l_result TYPE
sxmsadminresult.<br />*          lv_stat_type  TYPE sxmspmstat_type.<br /> 
DATA: gt_msgtab              TYPE sxmsmsgtab.<br />  DATA: lv_msgtab LIKE
gt_msgtab.<br />  DATA: gv_xmb_admin.<br />  DATA: g_sel_tab TYPE sy-ucomm.<br /> 
DATA: persist TYPE REF TO cl_xms_persist.<br />  DATA:
gt_sxmsmsglst_sorted   TYPE sxmsmsglst_sorted_tab.<br />  DATA: oref TYPE
REF TO cx_xms_syserr_persist.<br />  DATA: gs_sxmsmsglst_sorted   TYPE
sxmsmsglst_sorted.<br />  DATA: gs_msgtab              TYPE sxmsmsglst.<br /> 
DATA: gs_msgtab_ext          TYPE sxmsmsgdsp.<br />  DATA:
gt_msgtab_ext          TYPE STANDARD TABLE OF sxmsmsgdsp.<br />  DATA: 
pid TYPE sxmspid.<br />  DATA: lt_msgtab LIKE gt_msgtab_ext,<br />             
l_tabix TYPE sytabix.<br />  DATA: errcat  TYPE sxmserrcat,<br />       
errcode TYPE sxmserrid,<br />        msgtype TYPE sxmspmtype.<br />  DATA:
l_icon          TYPE tv_image.<br />  DATA: msgtab TYPE sxmsmsgdsp.<br /> 
DATA: wa_messages TYPE zsxmsmsgdsp_tab.<br />  DATA:
zw_exedate             TYPE sy-datum,<br />      zw_exetime            
TYPE sy-uzeit,<br />      zw_senddate            TYPE sy-datum,<br />     
zw_sendtime            TYPE sy-uzeit,<br />      zw_initdate           
TYPE sy-datum,<br />      zw_inittime            TYPE sy-uzeit.<br /> 
FIELD-SYMBOLS: <msgline> LIKE LINE OF gt_msgtab_ext.<br /><br /> 
REFRESH: gt_msgtab.<br /><br />* Busca mensaje por Message ID. este
parametro debe ser el qe llega por parámetro<br />*  SORT msgguid.<br />*   
CLEAR lifecycl.<br />  REFRESH lt_msgguid.<br /><br />  IF messageid IS NOT
INITIAL.<br />    REPLACE ALL OCCURRENCES OF '-' IN messageid WITH ''.<br />   
CONDENSE messageid NO-GAPS.<br /><br />    IF messageid CO
'0123456789abcdefABCDEF '.<br />      ls_msgguid = messageid.<br />     
APPEND ls_msgguid TO lt_msgguid.<br />* delete time fields, since only
guids are relevant<br />      CLEAR d_begindate.<br />      CLEAR d_enddate.<br />     
CLEAR t_begintime.<br />    ENDIF.<br /><br />    IF pid IS INITIAL AND
messageid IS INITIAL.<br />      lt_back_pids =
cl_xms_persist=>get_pid( cl_xms_persist=>co_back_pid ).<br />     
LOOP AT lt_back_pids INTO ls_back_pids.<br />        ls_pids-sign = 'E'.<br />       
ls_pids-option = 'EQ'.<br />        ls_pids-low  = ls_back_pids.<br />       
APPEND ls_pids TO lt_pids.<br />      ENDLOOP.<br />    ENDIF.<br />  ENDIF.<br />*Asigno
los valores de los filtros a las estructuras<br />*correspondientes para
luego hacer la busqueda correspondiente<br /><br />*   
ls_sxmspemas-ob_party        = sndrprty.<br />*   
ls_sxmspemas-ob_party_type   = sndprtty.<br />* 
ls_sxmspemas-ob_party_agency =<br />  ls_sxmspemas-ob_system       =
s_sender_system.<br />*    ls_sxmspemas-ob_ns           = oifns.<br />*   
ls_sxmspemas-ob_name         = oifname.<br />*   
ls_sxmspemas-ib_party        = rcvrprty.<br />*   
ls_sxmspemas-ib_party_type   = rcvprtty.<br />* 
ls_sxmspemas-ib_party_agency =<br />  ls_sxmspemas-ib_system       =
s_target_system.<br />*    ls_sxmspemas-ib_ns           = iifns.<br />*   
ls_sxmspemas-ib_name         = iifname.<br />*<br /><br />  CALL FUNCTION
'SXMB_SELECT_MESSAGES'<br />    EXPORTING<br />      im_senddate          =
'00000000'<br />      im_sendtime          = '000000'<br />     
im_snd2date          = '00000000'<br />      im_snd2time          =
'000000'<br />      im_exedate           = d_begindate<br />     
im_exetime           = t_begintime<br />      im_exe2date          =
d_enddate<br />      im_exe2time          = t_endtime<br />     
im_pid               = pid<br />      im_pids              = lt_pids<br />     
im_client            = '100'<br />      im_user              = ''<br />     
im_adapter_type_in   = ''<br />      im_adapter_type      = ''<br />     
im_adapter_state     = '000'<br />      im_s_sender_receiver =
ls_sxmspemas<br />      im_errcat            = errcat<br />     
im_errcode           = errcode<br />      im_msgguid_tab       =
lt_msgguid<br />      im_msgstate_tab      = lt_mstat_tab<br />     
im_queueid           = ''<br />      im_msgtype           = msgtype<br />     
im_number            = l_number<br />      im_process_mode      = '0'<br />   
IMPORTING<br />      ex_msgtab            = gt_msgtab<br />     
ex_result            = l_result<br />      ex_first_ts          =
l_first_ts<br />    EXCEPTIONS<br />      persist_error        = 1<br />     
OTHERS               = 2.<br /><br />***************Control de errores de
busqueda de mensajes<br />  IF sy-subrc <> 0.<br />    MESSAGE ID
sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'<br />            WITH
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.<br />    EXIT.<br />  ENDIF.<br /><br />*
test if one message is selected at all<br />  IF gt_msgtab[] IS INITIAL.<br />   
MESSAGE i113(xms_adm) DISPLAY LIKE 'E'.<br />    EXPORT g_sel_tab FROM
g_sel_tab TO MEMORY ID 'RSXMB_SEL_MSG_SEL_TAB'.<br />    EXIT.<br />  ELSE.<br />***************/Control
de errores de busqueda de mensajes<br /><br />* eliminate duplicates<br />   
SORT gt_msgtab BY msgguid pid.<br />    DELETE ADJACENT DUPLICATES FROM
gt_msgtab<br />      COMPARING msgguid pid.<br />  ENDIF.<br /><br />  REFRESH
gt_msgtab_ext.<br />* build displayed list<br />* first step: version 0
entries<br />  LOOP AT gt_msgtab INTO gs_msgtab.<br />    CLEAR:
zw_exedate,  zw_exetime,<br />           zw_senddate, zw_sendtime,<br />          
zw_initdate, zw_inittime.<br />    CONVERT TIME STAMP gs_msgtab-exetimest
TIME ZONE sy-zonlo<br />      INTO DATE zw_exedate TIME zw_exetime.<br />   
CONVERT TIME STAMP gs_msgtab-sendtimest TIME ZONE sy-zonlo<br />     
INTO DATE zw_senddate TIME zw_sendtime.<br />    CONVERT TIME STAMP
gs_msgtab-inittimest TIME ZONE sy-zonlo<br />      INTO DATE zw_initdate
TIME zw_inittime.<br /><br />    CLEAR gs_msgtab_ext.<br />   
MOVE-CORRESPONDING gs_msgtab TO gs_msgtab_ext.<br />   
gs_msgtab_ext-initdate = zw_initdate.<br />    gs_msgtab_ext-inittime =
zw_inittime.<br />    gs_msgtab_ext-exedate  = zw_exedate.<br />   
gs_msgtab_ext-exetime  = zw_exetime.<br />    gs_msgtab_ext-senddate   =
zw_senddate.<br />    gs_msgtab_ext-sendtime   = zw_sendtime.<br />   
gs_msgtab_ext-pelname    = text-042.<br /><br />** get the BPM relevant
fields<br />*        CALL METHOD get_bpm_fields<br />*          EXPORTING<br />*           
msgline = gs_msgtab_ext<br />*          IMPORTING<br />*            msgtab 
= lt_msgtab.<br /><br />        APPEND LINES OF lt_msgtab TO
gt_msgtab_ext.        l_icon3(2)  = '\Q'.<br />        l_icon5(40)
= text-q01.
        l_icon+45(1) = '@'.
      WHEN
cl_xms_persist=>co_stat_queue_error.
        l_icon       =
icon_led_red.
        l_icon3(2)  = '\Q'.<br />        l_icon5(40) =
text-q02.
        l_icon+45(1) = '@'.
      WHEN
cl_xms_persist=>co_stat_queue_waiting.
        l_icon       =
icon_led_yellow.
        l_icon3(2)  = '\Q'.<br />        l_icon5(40)
= text-q03.
        l_icon+45(1) = '@'.
      WHEN
cl_xms_persist=>co_stat_queue_processing.
        l_icon       =
icon_led_green.
        l_icon3(2)  = '\Q'.<br />        l_icon5(40) =
text-q04.
        l_icon+45(1) = '@'.
      WHEN OTHERS.
       
l_icon       = icon_space.
    ENDCASE.
   
gs_msgtab_ext-queueicon = l_icon.

*-----set status of job
   
CASE gs_msgtab_ext-status.

      WHEN 'X'.
       
l_icon       = icon_led_yellow.
        l_icon+3(2)  = '\Q'.
       
l_icon5(40) = text-j01.<br />        l_icon45(1) = '@'.
      WHEN
'D'.
        l_icon       = icon_okay.
        l_icon+3(2)  =
'\Q'.
        l_icon5(40) = text-j02.<br />        l_icon45(1) = '@'.
     
WHEN OTHERS.
        l_icon       = icon_space.
    ENDCASE.
   
gs_msgtab_ext-jobicon = l_icon.

*-----set status of message

   
CALL FUNCTION 'SXMB_GET_ICON_FOR_MSG_STATE'
      EXPORTING
       
im_state           = gs_msgtab_ext-msgstate
       
im_commit_flag     = gs_msgtab_ext-commitact
       
im_restart_version = gs_msgtab_ext-rest_vers
       
im_msgtype         = gs_msgtab_ext-msgtype
      IMPORTING
       
ex_icon            = l_icon.

    gs_msgtab_ext-staticon =
l_icon.
    MODIFY gt_msgtab_ext FROM gs_msgtab_ext.
*move-corresponding
gs_msgtab_ext to
  ENDLOOP.

* cargo los mensajes obtenidos a
mi
* estructura return que pasara los  datos al front end
  LOOP
AT gt_msgtab_ext INTO gs_msgtab_ext.
    MOVE-CORRESPONDING
gs_msgtab_ext TO wa_messages.
    APPEND wa_messages TO gt_messages.
   
CLEAR wa_messages.
  ENDLOOP.
ENDFORM.                   
"build_list*

  Here Zdisplay_message_payload

 

h5. FUNCTION zdisplay_message_payload.
"----
<br />
"*"Local
Interface:
"  IMPORTING<br />"     VALUE(MESSAGEID) TYPE  CHAR40
*" 
EXPORTING
"     VALUE(PAYLOAD) TYPE  SLDSTRING<br />"----



 
DATA:
   iv_version TYPE sxmslsqnbr,
   i_version TYPE
sxmslsqnbr,
   size TYPE i,
   ref_xms_persist TYPE REF TO
cl_xms_persist,
   ref_xms_main TYPE REF TO cl_xms_main,
  
ex_message TYPE REF TO if_xms_message,
   prop TYPE REF TO
if_xms_prop,
   props TYPE REF TO sxms_pro_t,
   resource TYPE REF
TO if_xms_resource,
   ex_msgstate TYPE sxmspmstat,
    
ex_string TYPE string,
   comp_string TYPE string,
   data TYPE
etxml_line_str,
   cx_ref TYPE REF TO cx_xms_syserr_persist.
 
DATA:
     lt_msgguid TYPE sxmsmguidt,
     ls_msgguid TYPE
sxmsmguid.
  DATA:
    gt_msgtab   TYPE sxmsmsgtab,
   
gs_msgtab   TYPE sxmsmsglst.

  ls_msgguid = messageid.
 
APPEND ls_msgguid TO lt_msgguid.

  CALL FUNCTION
'SXMB_SELECT_MESSAGES'
    EXPORTING
*  
IM_SENDDATE                =
*   IM_SENDTIME                =
*  
IM_SND2DATE                =
*   IM_SND2TIME                =
*    
im_exedate                 = exedate
*    
im_exetime                 = start_time
*    
im_exe2date                = exe2date
*    
im_exe2time                = end_time
*   IM_PID                     =
*  
IM_PIDS                    =
*   IM_CLIENT                  =
*  
IM_USER                    =
*   IM_ADAPTER_TYPE_IN         =
*  
IM_ADAPTER_TYPE            =
*   IM_ADAPTER_STATE           =
*  
IM_S_SENDER_RECEIVER       =
*   IM_ERRCAT                  =
*  
IM_ERRCODE                 =
  im_msgguid_tab             =
lt_msgguid
*   IM_MSGSTATE_TAB            =
*  
IM_QUEUEID                 =
*   IM_MSGTYPE                 =
 
im_number                  = 1
*   IM_ADAPTER_OR              = '0'
*  
IM_PROCESS_MODE            = '0'
 IMPORTING
  
ex_msgtab                  = gt_msgtab
*   EX_RESULT                 
=
*   EX_FIRST_TS                =
 EXCEPTIONS
  
persist_error              = 1
   missing_parameter          = 2
  
negative_time_range        = 3
   too_many_parameters        = 4
  
OTHERS                     = 5.

  IF sy-subrc <> 0.
   
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    LOOP AT gt_msgtab
INTO gs_msgtab.
      CLEAR ex_message.
      CLEAR ex_msgstate.
     
CLEAR i_version.
      CREATE OBJECT ref_xms_persist.

     
TRY.
          CALL METHOD ref_xms_persist->read_msg_all
           
EXPORTING
              im_msgguid  = ls_msgguid
             
im_pid      = gs_msgtab-pid
              im_version  = i_version
           
IMPORTING
              ex_message  = ex_message
             
ex_msgstate = ex_msgstate.
        CATCH cx_xms_syserr_persist INTO
cx_ref.
          EXIT.
      ENDTRY.

      CALL METHOD
ex_message->numberofattachments
        RECEIVING
         
size = size.

      IF size IS NOT INITIAL.
        CALL METHOD
ex_message->getattachmentatindex
          EXPORTING
           
index    = '1'
          RECEIVING
            resource =
resource.
        TRY.
            CALL METHOD
resource->getbinarydata
              RECEIVING
               
data = data.
          CATCH cx_xms_exception.
          CATCH
cx_xms_system_error.
        ENDTRY.
        IF ex_string IS NOT
INITIAL.
          MOVE ex_string TO comp_string.
        ENDIF.

       
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
          EXPORTING
           
im_xstring = data
          IMPORTING
            ex_string  =
ex_string.

        IF i_version EQ '000'.
         
CONCATENATE ex_string payload INTO payload.
        ENDIF.

       
IF ex_string NE comp_string AND comp_string IS NOT INITIAL.
         
CONCATENATE ex_string payload INTO payload.
          CONTINUE.
       
ENDIF.
      ENDIF.
      i_version = i_version + 1 .
   
ENDLOOP.
  ENDIF.
ENDFUNCTION.
 
h5.

 
4 Comments