根據關鍵字搜索指定的SAP CRM中間件BDOC

  • 2020 年 1 月 21 日
  • 筆記

REPORT zscan_bdoc_via_keyword.    PARAMETERS: start TYPE smw3_bdoc-snd_date OBLIGATORY DEFAULT sy-datlo,              end   TYPE smw3_bdoc-snd_date OBLIGATORY DEFAULT sy-datlo,              keyword TYPE string LOWER CASE OBLIGATORY DEFAULT 'CRMA'.    DATA: lv_bdoc_id TYPE smw3_bdoc1-bdoc_id VALUE 'FA163E8EAB031EE496D7B1616132B3D2',        lt_header  TYPE STANDARD TABLE OF smw3_bdoc,        lv_xml     TYPE xstring,        lv_count   TYPE i,        lv_string  TYPE string.    START-OF-SELECTION.    PERFORM main.  FORM main.      SELECT * INTO TABLE lt_header FROM smw3_bdoc WHERE snd_date >= start AND snd_date <= end.    IF sy-subrc <> 0.      WRITE: / 'No BDOC exists for given time period.'.      RETURN.    ENDIF.      lv_count = lines( lt_header ).    LOOP AT lt_header ASSIGNING FIELD-SYMBOL(<header>).      PERFORM display_progress USING sy-tabix.      PERFORM get_bdoc_ext_via_id USING <header>-bdoc_id CHANGING lv_xml.      CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'        EXPORTING          im_xstring = lv_xml        IMPORTING          ex_string  = lv_string.      FIND keyword IN lv_string.      IF sy-subrc = 0.         WRITE: / 'found search keyword in BDOC: ' , <header>-bdoc_id.      ENDIF.      CLEAR: lv_xml, lv_string.    ENDLOOP.    ENDFORM.    FORM get_bdoc_ext_via_id USING iv_id TYPE smw3_bdoc1-bdoc_id CHANGING cv_xml TYPE any.    DATA: wa_smw3_bdoc TYPE smw3_fhd,          l_dtyp       TYPE smw3_ddic1,          bdoc_ext     TYPE REF TO data.      FIELD-SYMBOLS: <b_ext> TYPE any.      CALL METHOD cl_smw_bdocstore=>get_bdoc      EXPORTING        bdoc_id         = iv_id        get_bdoc_header = 'X'      IMPORTING        bdoc_header     = wa_smw3_bdoc      EXCEPTIONS        OTHERS          = 4.      ASSERT sy-subrc = 0.      IF wa_smw3_bdoc-ddic2 IS INITIAL.      "MESSAGE s006(smw3).      " No BDoc extension available (no messaging BDoc).      WRITE: / 'Not BDOC extension avaible for BDOC id: ' , lv_bdoc_id.      EXIT.    ENDIF.    * create data refs    l_dtyp = wa_smw3_bdoc-ddic2 .    CREATE DATA bdoc_ext TYPE (l_dtyp).    ASSIGN: bdoc_ext->*        TO <b_ext>.    CLEAR: <b_ext>.      CALL METHOD cl_smw_bdocstore=>get_bdoc      EXPORTING        bdoc_id           = iv_id        get_bdoc_header   = ' '        get_body_ext      = 'X'      IMPORTING        bdoc_body_ext     = <b_ext>      EXCEPTIONS        invalid_bdoc_id   = 1        inconsistent_body = 2        failed            = 3        OTHERS            = 4.      CHECK sy-subrc = 0.      PERFORM get_xml_source USING <b_ext> CHANGING cv_xml.    CLEAR: <b_ext>, bdoc_ext.    ENDFORM.    FORM display_progress USING iv_percent.    DATA: lv_percent type i,          lv_text TYPE string.      lv_percent = iv_percent * 100 / lv_count.    lv_text = 'In process... ' && lv_percent && '%'.       CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'       EXPORTING          PERCENTAGE = lv_percent          text = lv_text.  eNDFORM.    FORM get_xml_source USING is_ext TYPE any CHANGING cv_xml TYPE xstring.        DATA:  *    x_xml_tab        TYPE swr_t_html,      lv_rc            TYPE sy-subrc,      lref_document    TYPE REF TO if_ixml_document,      lref_data_as_dom TYPE REF TO if_ixml_element.      *  Maps a ABAP variable into a DOM structure    CALL FUNCTION 'SDIXML_DATA_TO_DOM'      EXPORTING        name         = 'MESSAGE'        dataobject   = is_ext  *     CONTROL      =      IMPORTING        data_as_dom  = lref_data_as_dom      CHANGING        document     = lref_document  *     TYPE_HANDLE  =      EXCEPTIONS        illegal_name = 1        OTHERS       = 2.      ASSERT sy-subrc = 0.      CALL METHOD lref_document->append_child      EXPORTING        new_child = lref_data_as_dom      RECEIVING        rval      = lv_rc.    ASSERT sy-subrc = 0.    * SDIXML_DOM_TO_XML    CALL FUNCTION 'SDIXML_DOM_TO_XML'      EXPORTING        document      = lref_document      IMPORTING        xml_as_string = cv_xml      EXCEPTIONS        OTHERS        = 1.    ASSERT sy-subrc = 0.    ENDFORM.

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":