This is a test message to test the length of the message box.
Login
ABAP RAP E-Mail versenden
Erstellt von Software-Heroes

RAP - E-Mail versenden

289

Nachdem wir im letzten Artikel die Konfiguration vorgenommen haben, senden wir dieses Mal eine Mail und schauen uns die Besonderheiten mit RAP an.

Werbung


Letzte Woche haben wir die Grundkonfiguration für den Mailversand definiert und die Anbindung an Office 365 im ABAP Environment eingerichtet. Im nächsten Schritt wollen wir einmal eine Mail versenden und einen Mailversand in unsere RAP Anwendung implementieren.

 

Versenden

Um den Mailversand durchzuführen, greifen wir auf die freigegebenen APIs von SAP zu, die uns diesen Versand ermöglichen. Mit den Klassen unter "CL_BCS_MAIL*" haben wir alle nötigen Komponenten, um eine erste Testmail zu versenden. Im ersten Schritt benötigen wir eine Mail-Instanz, die wir mit den entsprechenden Daten vorbereiten können.

DATA(lo_mail) = cl_bcs_mail_message=>create_instance( ).

 

Im zweiten Schritt definieren wir den Absender und setzen mögliche Empfänger, die im Anschluss die Mail erhalten sollen:

lo_mail->set_sender( 'BTP-noreply@CONNECT.com' ).
lo_mail->add_recipient( 'test-me@CONNECT.com' ).

 

Im dritten Schritt setzen wir den Betreff und befüllen die E-Mail mit einem Body. In unserem Beispiel setzen wir auf eine HTML Mail, die wir noch entsprechend gestalten können. Dabei definieren wir im Text eine H1 Überschrift und einen Paragraph mit etwas Text.

lo_mail->set_subject( 'Test Mail' ).

lo_mail->set_main( cl_bcs_mail_textpart=>create_instance(
    iv_content      = '<h1>Hello</h1><p>Hello world send from RAP!</p>'
    iv_content_type = 'text/html' ) ).

 

Im letzten Schritt können wir den eigentlichen Versand starten. Hier muss keine Commit durchgeführt werden, dieser wird durch die Klasse ausgelöst und damit der Mailversand gestartet. Im Anschluss erhalten wir eine Tabelle mit dem Status der Empfänger, so können wir den Ausgang prüfen, ob alle Empfänger die E-Mail erhalten haben.

lo_mail->send( IMPORTING et_status = DATA(lt_status) ).

 

Nach Ausführung wird die E-Mail erstellt und landet bei uns im Posteingang, hier noch der entsprechenden Preview der E-Mail:

 

Die vollständige ausführbare Klasse findest du hier, ein entsprechendes Fehlerhandling und Ausgaben in die Console wurden ebenfalls implementiert:

CLASS zcl_bs_demo_crap_mail DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.
ENDCLASS.


CLASS zcl_bs_demo_crap_mail IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    TRY.
        DATA(lo_mail) = cl_bcs_mail_message=>create_instance( ).

        lo_mail->set_sender( 'BTP-noreply@CONNECT.com' ).
        lo_mail->add_recipient( 'test-me@CONNECT.com' ).

        lo_mail->set_subject( 'Test Mail' ).

        lo_mail->set_main( cl_bcs_mail_textpart=>create_instance(
            iv_content      = '<h1>Hello</h1><p>Hello world send from RAP!</p>'
            iv_content_type = 'text/html' ) ).

        lo_mail->send( IMPORTING et_status = DATA(lt_status) ).

        out->write( lt_status ).

      CATCH cx_bcs_mail INTO DATA(lo_err).
        out->write( lo_err->get_longtext( ) ).
    ENDTRY.
  ENDMETHOD.
ENDCLASS.

 

Monitoring

Im ABAP Environment findest du für den Mailversand auch eine entsprechende App, um den Mailausgang zu prüfen und den entsprechenden Status einzusehen. Dazu findest du über die Suche die Anwendung "Monitor Email Transmissions".

 

Es besteht weiterhin die Möglichkeit, tiefer zu navigieren, um den Status für jeden Empfänger zu prüfen und so weitere Fehlermeldungen zu analysieren.

 

RAP

Implementieren wir nun noch einen Mailversand in unser komplexes RAP Objekt in dem wir eine Aktion zur Verfügung stellen. Diese Aktion soll ein Popup anzeigen, in das wir einen entsprechenden Empfänger eintragen können. Die selektierten Einträge sollen als Dateianhang per Mail verschickt werden. Wie man eine Aktion mit Popup implementiert, findest du in einem anderen Artikel, deshalb hier nur kurz zusammengefasst:

  • Definition der abstrakten CDS Entität für das Popup
  • Definition der Aktion in der Verhaltensdefinition
  • Freigabe der Aktion in der Projektion
  • Erweiterung der Metadaten zur Anzeige der Aktion
  • Implementierung der Logik

 

Bei der Implementierung erzeugen wir zuerst einmal für alle selektierten Einträge den Dateiinhalt, um diesen dann gesammelt in die E-Mail zu übernehmen:

READ ENTITIES OF ZBS_R_RAPCInvoice IN LOCAL MODE
     ENTITY Invoice
     ALL FIELDS WITH CORRESPONDING #( keys )
     RESULT DATA(lt_invoice).

DATA(ld_mail_content) = ``.
LOOP AT lt_invoice INTO DATA(ls_invoice).
  ld_mail_content &&= |Doc: { ls_invoice-Document }, From: { ls_invoice-Partner }
|.
ENDLOOP.

 

Im nächsten Schritt ermitteln wir den Empfänger, dieser wurde über das Popup der Aktion mitgegeben und ist somit variabel. Die eingegebenen Parameter erhalten wir über einen Eintrag der KEYS Tabelle:

keys[ 1 ]-%param-ReceiverMail

 

Den Anhang können wir nun mit der entsprechenden Methode an die E-Mail hängen und das entsprechende Format und den Dateinamen bestimmen:

lo_mail->add_attachment( cl_bcs_mail_textpart=>create_instance( iv_content      = id_mail_content
                                                                iv_content_type = 'text/plain'
                                                                iv_filename     = 'Attachment.txt' ) ).

 

Im Anschluss können wir die E-Mail wieder versenden und erhalten sie nach kurzer Zeit in unserem Postfach:

 

Hinweis: Möchtest du eine Mail aus einer RAP Aktion verschicken, funktioniert dies maximal bis STRICT MODE 1. Bei höheren Modi erfolgt eine striktere Prüfung und es kommt beim Versand zu einem Dump im System, es wird auch keine E-Mail mehr versendet. Hintergrund ist die gewahrte Datenintegrität, da Commits während der RAP Verarbeitung und außerhalb der Save-Sequence verboten sind.

 

Validierung

Um eine E-Mail Adresse im ABAP Environment zu validieren, gibt es die Klasse CL_MAIL_ADDRESS mit der Methode VALIDATE. Weiter Informationen kannst du der offiziellen Dokumentation entnehmen.

 

GitHub

Im aktuellen Commit unseres GitHub Projektes zum Blog, findest du die Änderungen am RAP Objekt und den gezeigten Beispiel-Code, um die Anpassungen nachzuvollziehen. Da viele kleine Änderungen gemacht wurden, verzichten wir auf die Darstellung in diesem Blog.

 

Fazit

Du weißt nun, wie man eine E-Mail aus dem ABAP Environment senden kann und auf was man dabei achten sollte. Ebenso solltest du nun die Integration in RAP kennen und welche Besonderheiten man beachten sollte.


Enthaltene Themen:
RAPBTPE-Mail versenden
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


RAP - Events

Kategorie - ABAP

Wie kannst du eigentlich Events in RAP erzeugen und mit ABAP verarbeiten? Hier erfährst du mehr zur eventgetriebenen Verarbeitung.

23.12.2024

RAP - Excel Datei laden

Kategorie - ABAP

In diesem praktischen Beispiel schauen wir uns die Verarbeitung von Excel in ABAP mit den neuen XCO Klassen an und wie wir die Datei in unser RAP Objekt bekommen.

20.12.2024

RAP - Semantischer Schlüssel

Kategorie - ABAP

Wofür benötigst du den semantischen Schlüssel und wie wird er im ABAP RESTful Programming Model dargestellt? Hier gibt es mehr dazu.

13.12.2024

RAP - Upload von Dateien (Stream)

Kategorie - ABAP

Wie kannst du einfach Dateien in deine RAP Entität laden und diese in ABAP zur Verfügung stellen? Hier schauen wir uns einmal die Details an.

10.12.2024

RAP - Report Pattern

Kategorie - ABAP

Wie ist das Report Pattern in RAP aufgebaut und was kannst du damit machen? Mehr dazu in diesem ABAP Artikel.

06.12.2024