根据指定关键字搜索指定时间范围内的 SAP CRM 中间件 BDOC 的 ABAP 小工具分享

简介: 根据指定关键字搜索指定时间范围内的 SAP CRM 中间件 BDOC 的 ABAP 小工具分享

工具源代码如下:

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.

使用界面:

这段ABAP程序的作用是从SAP系统的smw3_bdoc表中检索指定时间范围内的BDOC(Business Document)数据,然后搜索每个BDOC的内容以查找包含指定关键字的BDOC,并在找到匹配的情况下将其打印出来。以下是详细的说明和示例:


程序名称zscan_bdoc_via_keyword

程序输入参数


  1. start:开始日期,用于指定要搜索的BDOC的起始日期,默认为系统当前日期(sy-datlo)。
  2. end:结束日期,用于指定要搜索的BDOC的结束日期,默认为系统当前日期(sy-datlo)。
  3. keyword:关键字,用于指定要搜索的关键字,默认为"CRMA"。


程序变量说明


  1. lv_bdoc_id:用于存储固定的BDOC ID。
  2. lt_header:标准内表,用于存储从smw3_bdoc表中检索到的BDOC记录。
  3. lv_xml:用于存储BDOC的XML数据(以二进制形式)。
  4. lv_count:用于存储符合时间范围的BDOC记录数量。
  5. lv_string:用于存储将XML数据转换为字符串后的内容。


主要处理逻辑


  1. 首先,程序通过SELECT语句从smw3_bdoc表中检索满足指定时间范围的BDOC记录,并将它们存储在lt_header内表中。
  2. 如果没有找到符合时间范围的BDOC记录,程序将输出消息 “No BDOC exists for given time period.” 并结束执行。
  3. 如果找到符合时间范围的BDOC记录,程序将计算符合时间范围的BDOC记录的数量(lv_count)。
  4. 然后,程序通过循环遍历lt_header内表中的每个BDOC记录。
  5. 在循环中,程序会调用display_progress子程序以显示搜索进度。
  6. 接下来,程序将调用get_bdoc_ext_via_id子程序来获取BDOC的XML数据,并将其存储在lv_xml变量中。
  7. 然后,程序将XML数据转换为字符串格式。
  8. 最后,程序在转换后的字符串中搜索指定的关键字,如果找到匹配的关键字,就会打印出BDOC的ID。


下面是示例执行过程:

假设输入参数为:


  • start:2023年01月01日
  • end:2023年12月31日
  • keyword:‘CRMA’


  1. 程序首先从smw3_bdoc表中检索符合时间范围的BDOC记录。
  2. 如果找到符合条件的BDOC记录,程序将计算符合时间范围的BDOC记录的数量。
  3. 然后,程序会逐个遍历这些BDOC记录。
  4. 对于每个BDOC记录,程序会显示搜索进度,并调用get_bdoc_ext_via_id子程序来获取BDOC的XML数据。
  5. 获取的XML数据将被转换为字符串。
  6. 然后,程序将搜索字符串中是否包含关键字’CRMA’。
  7. 如果找到匹配的关键字,程序将打印出相应的BDOC ID。


示例输出可能如下所示:

In process... 10%
In process... 20%
In process... 30%
found search keyword in BDOC: FA163E8EAB031EE496D7B1616132B3D2
In process... 40%
In process... 50%
In process... 60%
In process... 70%
In process... 80%
In process... 90%

在这个示例中,程序首先显示搜索进度,然后找到了一个包含关键字’CRMA’的BDOC,该BDOC的ID为’FA163E8EAB031EE496D7B1616132B3D2’,所以程序打印了相应的消息。


程序的主要功能是在指定的BDOC数据集合中搜索关键字,并且能够处理大量的BDOC数据,显示搜索进度,以及将XML数据转换为字符串进行搜索。


相关文章
|
24天前
|
人工智能 搜索推荐 Serverless
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
59 7
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
|
1月前
|
搜索推荐
企业如何实现销售增长?2024年最新CRM工具大揭秘!
2024年,企业借助Zoho CRM寻求新机遇,强调数据驱动、战略实干和长期价值。CRM工具助力企业讲述动人故事,创建个性化客户旅程,发展视频营销,以及注重卓越的客户体验。通过这些策略,Zoho CRM旨在帮助企业实现可持续增长和品牌信任,共创美好未来。
14 1
|
1月前
|
中间件
什么是 SAP CRM 系统里的 Initial Download
什么是 SAP CRM 系统里的 Initial Download
23 0
|
1月前
|
中间件
什么是 SAP CRM Initial Download
什么是 SAP CRM Initial Download
20 0
|
1月前
|
存储 数据管理 数据处理
SAP CRM 里 Attachment 搜索的实现逻辑介绍
SAP CRM 里 Attachment 搜索的实现逻辑介绍
21 0
|
21天前
|
存储
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
21 0
|
24天前
|
数据库
SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
17 5
|
24天前
|
Web App开发 开发者 存储
介绍一个 webp 格式转 png 格式的软件:XNConvert
介绍一个 webp 格式转 png 格式的软件:XNConvert
27 6
介绍一个 webp 格式转 png 格式的软件:XNConvert
|
25天前
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
16 1
什么是 SAP ABAP 里的 Subscreen
|
1月前
|
中间件
如何在 SAP CRM 系统调试 Product Initial Download
如何在 SAP CRM 系统调试 Product Initial Download
16 0

热门文章

最新文章