指定されたキーワードに基づいて、指定された時間範囲内で共有されている 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.

使用インターフェース:

smw3_bdocこの ABAP プログラムの機能は、SAP システムのテーブルから指定された時間範囲内の BDOC (ビジネス ドキュメント) データを取得し、各 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_headersmw3_bdoc:テーブルから取得した BDOC レコードを保存するために使用される標準の内部テーブル。
  3. lv_xml: BDOC (バイナリ形式) を格納するために使用される XML データ。
  4. lv_count: 時間範囲に一致する BDOC レコードの数を保存するために使用されます。
  5. lv_string: XMLデータを文字列に変換してコンテンツを格納するために使用されます。

主な処理ロジック:

  1. まず、プログラムはSELECTステートメントを通じてテーブルから指定された時間範囲を満たす BDOC レコードを取得しsmw3_bdoclt_header内部。
  2. 時間範囲に一致する BDOC レコードが見つからない場合、プログラムは「指定された期間に BDOC が存在しません。」というメッセージを出力して実行を終了します。
  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年1月1日
  • end:2023年12月31日
  • keyword:'CRMA'
  1. プログラムはまず、smw3_bdoc時間範囲に一致する BDOC レコードをテーブルから取得します。
  2. 一致する BDOC レコードが見つかった場合、プログラムは時間範囲に一致する BDOC レコードの数をカウントします。
  3. 次に、プログラムはこれらの BDOC レコードを 1 つずつ調べます。
  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 データを検索用の文字列に変換することができます。

おすすめ

転載: blog.csdn.net/i042416/article/details/132861340