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

1057

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 versendenREX2
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Dienstag und 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 - Virtuelle Felder sortieren

Kategorie - ABAP

Haben wir virtuelle Felder in einer Entität im ABAP RESTful Application Programming Model implementiert, wie können wir dann eigentlich eine Sortierung verwenden? Schauen wir uns einmal den Prozess dazu an.

23.01.2026

RAP - Multi-Input Field

Kategorie - ABAP

Eine ganze Entität in einem Feld darstellen? Mit dem Multi-Input Field möglich. Heute schauen wir uns den Punkt in ABAP für die RAP Entwicklung an und schauen uns die Szenarien an.

20.01.2026

RAP - Generierung mit Template

Kategorie - ABAP

Die Generatoren in RAP sind mächtig, wenn es um die schnelle Bereitstellung von RAP Objekten geht. Über Templates kannst du die Entitäten noch einmal schneller anlegen, wenn du eine Schulung machst.

13.01.2026

RAP - CDS Pattern

Kategorie - ABAP

Wie geht eigentlich das CDS Pattern und was hat CDS-only damit zu tun? In diesem Artikel schauen wir auf die Architektur und Nutzung des Patterns.

28.11.2025

Recycling Heroes - Kontakt App

Kategorie - ABAP

In diesem Tutorial modellieren wir eine RAP Anwendung von der Datenbank, über das Modell und das UI, bis zum Deployment und Bereitstellung im System. Damit solltest du den vollen Entwicklungszyklus für modernen ABAP Cloud Anwendungen lernen.

25.11.2025