Versenden einer Email im SAP mittels einem ABAP Report

Willkommen zu unserem How-to-Beitrag, der Ihnen Schritt für Schritt zeigt, wie Sie eine CSV-Datei per E-Mail direkt aus dem SAP-System mittels ABAP versenden können. Diese Anleitung richtet sich an Entwickler und IT-Fachkräfte, die bereits grundlegende Kenntnisse in ABAP besitzen und nun lernen möchten, wie Daten per Mail über das SAP-System verschickt werden können.
Wir führen Sie anhand eines Codebeispiels durch den kompletten Prozess, von der Vorbereitung und Formatierung Ihrer Daten in einer CSV-Datei, über das Einlesen und Konvertieren dieser Daten in ein geeignetes Format für den E-Mail-Versand, bis hin zur Konfiguration und Ausführung des Versende-Vorgangs selbst. Dabei werden Standardtexte für die E-Mail-Inhalte genutzt, die CSV-Datei der E-Mail angehängt und Empfängerlisten genutzt. Fehlermeldungen werden über Textbausteine in diesem Beispiel umgesetzt.

Aufbau des Programms

Das Beispielprogramm, das wir besprechen werden, enthält mehrere Schritte von der Definition von Bildschirmelementen zur Eingabe von E-Mail-Daten bis schließlich zum Senden der E-Mail mit CSV-Anhang. Hier ist der Aufbau des Programms:

1. Definition der Eingabefelder

Zunächst definieren wir die notwendigen Eingabefelder auf dem Bildschirm. Dies geschieht im sogenannten “SELECTION-SCREEN” Block. Hier werden verschiedene Parameter und Selektionsoptionen definiert, die der Benutzer ausfüllen muss.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT003.

  SELECT-OPTIONSs_rec FOR lv_rec NO INTERVALS MODIF ID b3,

                  s_recl FOR lv_recl NO INTERVALS MODIF ID b3.

  PARAMETERSp_sub   TYPE c LENGTH 50 MODIF ID b3,

              p_sen   TYPE ad_smtpadr MODIF ID b3,

              p_mailt TYPE tdobname MODIF ID b3,

              p_maill TYPE lang MODIF ID b3 DEFAULT sylangu.

SELECTION-SCREEN END OF BLOCK b3.

 

2. Überprüfung der Eingabedaten

Bevor die E-Mail gesendet wird, müssen wir sicherstellen, dass alle erforderlichen Felder ausgefüllt sind. Das Coding im FORM-Abschnitt emailcsv.

*&———————————————————————*

*&      Form  emailcsv

*&———————————————————————*

*       text

*———————————————————————-*

FORM emailcsv.

*check if necessary fields are filled

  IF s_rec IS INITIAL AND s_recl IS INITIAL.

    MESSAGE TEXT008 TYPE ‘I’.

    EXIT.

  ENDIF.

  IF p_sub IS INITIAL.

    MESSAGE TEXT010 TYPE ‘I’.

    EXIT.

  ENDIF.

  IF p_sen IS INITIAL.

    MESSAGE TEXT011 TYPE ‘I’.

    EXIT.

  ENDIF.

  IF p_mailt IS INITIAL.

    MESSAGE TEXT012 TYPE ‘I’.

    EXIT.

  ENDIF.

  IF p_maill IS INITIAL.

    MESSAGE TEXT013 TYPE ‘I’.

    EXIT.

  ENDIF.

  TRY.

3. Lesen des Standardtextes

Der Inhalt der E-Mail kann aus einem im System gespeicherten Standardtext bestehen. Dieser wird mit dem Funktionsbaustein READ_TEXT gelesen.

*read standard text

      CALL FUNCTION ‘READ_TEXT’

        EXPORTING

          id                      ‘ST’

          language                p_maill

          name                    p_mailt

          object                  ‘TEXT’

        TABLES

          lines                   lt_tlines

        EXCEPTIONS

          id                      1

          language                2

          name                    3

          not_found               4

          object                  5

          reference_check         6

          wrong_access_to_archive 7

          OTHERS                  8.

      IF sysubrc <> 0.

        MESSAGE TEXT009 TYPE ‘I’.

        EXIT.

      ENDIF.

*clear column tlines-tdformat so just the text from the standard text gets passed as a mailtext

      LOOP AT lt_tlines INTO ls_tlines.

        ls_tlinestdformat .

        APPEND ls_tlines TO lt_body_txt.

      ENDLOOP.

4. Erstellen des E-Mail-Dokuments

Das E-Mail-Dokument wird erstellt und ein Anhang in CSV-Format hinzugefügt. Hierzu wird der Text zunächst in einen xstring und dann in ein Binärformat umgewandelt.

*create document (email)

      lo_document cl_document_bcs=>create_document(   i_type ‘RAW’

                                                       i_text lt_body_txt

                                                       i_subject p_sub

                                                   ).

*for adding a attachment to an email the csv has to be converted to binary format

*first table to string

*then string to xstring

*finally xstring to binary

      LOOP AT lt_csv INTO lv_line.

        CONCATENATE lv_csv_string lv_line lv_separator INTO lv_csv_string.

      ENDLOOP.

      CALL FUNCTION ‘SCMS_STRING_TO_XSTRING’

        EXPORTING

          text   lv_csv_string

        IMPORTING

          buffer lv_csv_xstring

        EXCEPTIONS

          OTHERS 1.

      CALL FUNCTION ‘SCMS_XSTRING_TO_BINARY’

        EXPORTING

          buffer     lv_csv_xstring

        TABLES

          binary_tab lt_attachment

        EXCEPTIONS

          OTHERS     1.

*add attachement

      lo_document->add_attachment(

          i_attachment_type ‘CSV’

          i_attachment_subject lv_filenamemail

          i_att_content_hex lt_attachment

      ).

      IF sysubrc <> 0.

        MESSAGE TEXT005 TYPE ‘I’.

        EXIT.

      ENDIF.

5. Senden der E-Mail

Nachdem das Dokument und der Anhang erstellt wurden, wird die E-Mail zusammen mit den Empfängern über die Klasse cl_bcs gesendet.

*create send request

      lv_subject p_sub.

      lo_send_request cl_bcs=>create_persistent( ).

      lo_send_request->set_message_subjectip_subject lv_subject ).

      lo_send_request->set_documentlo_document ).

*set sender

      lo_sender cl_cam_address_bcs=>create_internet_addressi_address_string p_sen ).

      lo_send_request->set_senderlo_sender ).

      IF s_recl IS NOT INITIAL.

        LOOP AT s_recl.

          lv_recl s_recllow.

          CALL FUNCTION ‘SO_DLI_READ_API1’

            EXPORTING

              dli_name                   lv_recl “Unique name of distribution list to be viewed

              shared_dli                 ‘X’ “Flag: Shared distribution list

            TABLES

              dli_entries                lt_dli_tab

            EXCEPTIONS

              dli_not_exist              1

              operation_no_authorization 2

              parameter_error            3

              x_error                    4.

*only select email adresses from distribution list type = A

          LOOP AT lt_dli_tab INTO ls_dli_tab.

            IF ls_dli_tabmember_typ ‘A’.

              lv_rec ls_dli_tabmember_adr.

              lo_recipient cl_cam_address_bcs=>create_internet_addresslv_rec ).

              lo_send_request->add_recipient(

                i_recipient lo_recipient

                i_express abap_true

              ).

              CLEAR lv_rec.

            ENDIF.

          ENDLOOP.

        ENDLOOP.

      ENDIF.

*set recipient and send email

      LOOP AT s_rec.

        lv_rec s_reclow.

        lo_recipient cl_cam_address_bcs=>create_internet_addresslv_rec ).

        lo_send_request->add_recipient(

          i_recipient lo_recipient

          i_express abap_true

        ).

        CLEAR lv_rec.

      ENDLOOP.

      lo_send_request->set_send_immediatelyabap_false ).

      IF lo_send_request->sendi_with_error_screen abap_true ) = abap_true.

        MESSAGE TEXT006 TYPE ‘I’.

      ELSE.

        MESSAGE TEXT007 TYPE ‘I’.

      ENDIF.

      COMMIT WORK.

    CATCH cx_root INTO lo_text.

      lv_error_text lo_text->get_text( ).

      WRITE/ lv_error_text.

  ENDTRY.

ENDFORM.                    “emailcsv

 

Wenn Sie lernen möchten, wie Sie CSV-Dateien in Ihren ABAP Report einbinden und diese hoch- oder herunterladen können, lesen Sie doch unsere Anleitung zum Download und Upload von CSV-Dateien unter ABAP durch.

Beitrag teilen:

Können wir Ihnen helfen?

Können wir Ihnen helfen?

Stefan Hanisch
Nach oben scrollen