Rechercher le partage de gadgets ABAP du middleware SAP CRM BDOC dans une période spécifiée en fonction de mots-clés spécifiés

Le code source de l'outil est le suivant :

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.

Interface d'utilisation :

smw3_bdocLa fonction de ce programme ABAP est de récupérer les données BDOC (Business Document) dans un intervalle de temps spécifié à partir de la table du système SAP, puis de rechercher le contenu de chaque BDOC pour trouver les BDOC contenant les mots-clés spécifiés, et si une correspondance est trouvée , c'est imprimé. Voici des instructions détaillées et des exemples :

Nom du programme :zscan_bdoc_via_keyword

Paramètres d'entrée du programme :

  1. start: Date de début, permet de préciser la date de début du BDOC à rechercher, la valeur par défaut est la date actuelle du système ( sy-datlo).
  2. end: Date de fin, permet de préciser la date de fin du BDOC à rechercher, la valeur par défaut est la date actuelle du système ( sy-datlo).
  3. keyword: Mot-clé, utilisé pour spécifier le mot-clé à rechercher, la valeur par défaut est "CRMA".

Description des variables du programme :

  1. lv_bdoc_id: Utilisé pour stocker l’ID BDOC fixe.
  2. lt_header: Table interne standard utilisée pour stocker smw3_bdocles enregistrements BDOC récupérés de la table.
  3. lv_xml: Données XML utilisées pour stocker le BDOC (sous forme binaire).
  4. lv_count: utilisé pour stocker le nombre d'enregistrements BDOC qui correspondent à la plage horaire.
  5. lv_string: Utilisé pour stocker le contenu après avoir converti les données XML en chaînes.

Logique de traitement principale :

  1. Tout d'abord, le programme récupère les enregistrements BDOC qui correspondent à la plage de temps spécifiée SELECTà partir de la table via des instructions smw3_bdocet les stocke dans lt_headerla table interne .
  2. Si aucun enregistrement BDOC correspondant à la plage de temps n'est trouvé, le programme affichera le message "Aucun BDOC n'existe pour une période donnée" et mettra fin à l'exécution.
  3. Si un enregistrement BDOC correspondant à la plage horaire est trouvé, le programme comptera le nombre d'enregistrements BDOC correspondant à la plage horaire ( lv_count).
  4. Le programme parcourt ensuite lt_headerchaque enregistrement BDOC dans la table interne.
  5. Dans la boucle, le programme appelle display_progressun sous-programme pour afficher la progression de la recherche.
  6. Ensuite, le programme appellera get_bdoc_ext_via_idun sous-programme pour obtenir les données XML du BDOC et les stockera dans lv_xmlune variable.
  7. Le programme convertit ensuite les données XML au format chaîne.
  8. Enfin, le programme recherche le mot-clé spécifié dans la chaîne convertie. Si un mot-clé correspondant est trouvé, l'ID BDOC sera imprimé.

Voici un exemple d'exécution :

Supposons que les paramètres d'entrée sont :

  • start: 1 janvier 2023
  • end: 31 décembre 2023
  • keyword:'CRMA'
  1. Le programme smw3_bdocrécupère d'abord les enregistrements BDOC correspondant à la plage horaire de la table.
  2. Si un enregistrement BDOC correspondant est trouvé, le programme comptera le nombre d'enregistrements BDOC qui correspondent à la plage horaire.
  3. Ensuite, le programme parcourra ces enregistrements BDOC un par un.
  4. Pour chaque enregistrement BDOC, le programme affiche la progression de la recherche et appelle get_bdoc_ext_via_idun sous-programme pour obtenir les données XML BDOC.
  5. Les données XML obtenues seront converties en chaîne.
  6. Le programme recherchera ensuite le mot-clé « CRMA » dans la chaîne.
  7. Si un mot-clé correspondant est trouvé, le programme imprimera l'ID BDOC correspondant.

Un exemple de résultat pourrait ressembler à ceci :

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%

Dans cet exemple, le programme affiche d'abord la progression de la recherche, puis trouve un BDOC contenant le mot-clé « CRMA ». L'ID du BDOC est « FA163E8EAB031EE496D7B1616132B3D2 », le programme imprime donc le message correspondant.

La fonction principale du programme est de rechercher des mots-clés dans la collection de données BDOC spécifiée, et il peut traiter une grande quantité de données BDOC, afficher la progression de la recherche et convertir les données XML en chaînes pour la recherche.

Je suppose que tu aimes

Origine blog.csdn.net/i042416/article/details/132861340
conseillé
Classement