前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >根据关键字搜索指定的SAP CRM中间件BDOC

根据关键字搜索指定的SAP CRM中间件BDOC

作者头像
Jerry Wang
发布2020-01-21 11:21:29
3120
发布2020-01-21 11:21:29
举报
代码语言:javascript
复制
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的原创文章,请关注公众号"汪子熙":

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档