Mussfeldprüfung im ABAP Programmiermodell für SAP Fiori

Mussfeldprüfung im ABAP® Programmiermodell für SAP Fiori® ( CDS, BOPF, Fiori Elements)

Das ABAP Programmiermodell für SAP Fiori, also ABAP CDS Views, Business Object Processing Framework und als UI Fiori/Fiori Elements/SAPUI5, bietet die Möglichkeit, einzelne Felder als Mussfelder zu definieren.
Und das ganz einfach über eine Annotation im ABAP CDS View bzw. der Metadata Extension:

@ObjectModel.mandatory: true

Fiori Elements ist dann auch so nett und zeigt im Änderungsmodus die Mussfeld-Sternchen:

Das ist aber – außer für Key-Felder – leider nur eine Information.
Weder im UI (Browser) noch im SAP Backend erfolgt irgendeine weitere Prüfung auf mandatory Fields!

Ohne Büro sichern?

Klar, kein Problem…

Um die Mussfelder zu prüfen, braucht man eine Validate-Methode im BOPF Objekt und verwenden die Standardklasse /BOBF/CL_LIB_V_MANDATORY_ATTR als Implementation Class.

Damit werden alle Felder gegen die Metadaten geprüft und eine passenden Fehlermeldungen erstellt.

Und das geht natürlich auch für mehrere Felder

Blogs/Links
Cadaxo Webinar zum Thema BOPF

ABAP CDS Views – 6 Schritte zum Verständnis

Zuordnung von Marketing-Attribute-Sets zu Geschäftspartnern

Marketing-Attribute-Sets sind eine Sammlung von einzelnen (1..n) Marketing-Attributen.

Sie können Geschäftspartnern zugeordnet werden, wodurch die Attribute des Set beim Partner bewertet werden können.

Attribute werden mit der Transaktion CRMD_PROF_CHAR Merkmale bearbeiten gepflegt. Die Set mit CRMD_PROF_TEMPL Merkmalsgruppen bearbeiten.

 

Um Geschäftspartner mit einem bestimmten Set zu finden, braucht man folgende Tabellen:

  • KLAH        Klassenkopf Daten
  • KSSK         Zuordnungstabelle: Objekt zu Klasse
  • INOB         Zuordnung einer internen Nummer zu einem bel. Objekt
  • BUT000    GP: Allgemeine Daten I

Mit diesem Select werden alle Partnernummern und Guids ermittelt, die das Attribut-Set ZCDX_DEMO_ATTR_SET zugewiesen haben

 

Und noch das Ergebnis – Nummer und GUID der relevanten BPs:

Information zum SQL Cockpit 3.6 – Releaseinfos

SAP® Gateway – Verknüpfung zwischen MPC und DPC Klassen

Die Implementierungsklassen für den Model Provider (MPC) und den Data Provider (DPC) für ein Gatewayservice können über den View /IWBEP/V_MGW_OMG gefunden werden.

Wer die Texte nicht braucht oder es generell technischer haben will, kann dieses SELECT Statement benutzen:

Cadaxo SQL Cockpit 3.3 – Releaseinfos

In der Cadaxo SQL Cockpits Version 3.3 haben wir neben kleinern Korrekturen und Anpassungen auch einiges an Kundenwünschen eingebaut.

 

Typisierte Symbole und Multi Value Symbole

Ein Symbol kann ab jetzt nicht nur einen einzeln Wert enthalten!

Multivalue-Symbole speichern mehrere Werten von gleichen Type, die in der WHERE Klausel – derzeit- nur hinter IN vorkommen dürfen.

Beispiel der Verwendung:

Der Cockpit SELECT

wird als folgender openSQL SELECT ausgeführt:

 

 

Konvertierungsexits für Symbolwerte

Für einwertige Symbole kann jetzt ein Datenelement definiert werden. Wenn möglich, wird der eingegebene Wert mittels Konvertierungsexit in den internen Wert geändert. Dies ist für vollständige Literale und Werte möglich.

Die 3 Partner-Symbole haben über das Datenelement BU_PARTNER (bzw. dessen Domäne BU_PARTNER) eine Länge von 10 Zeichen und die Konvertierungsroutine ALPHA zugewiesen. Bevor der SELECT ausgeführt wird, werden die Symbolwerte entsprechend angepasst:

  • ‚112‘ => ‚0000000112‘
  • 113 => 0000000113
  • 1234567890123 => 1234567890

 

Filtern nach Benutzern in der Rollenpfelge

Die Benutzer in der Cockpit Rollen Pflege (Admin-Funktion) können jetzt über die Benutzer-ID und den Benutzernamen gefiltert werden:

Filtern nach Benutzer

Filter aufrufen

 

Suche nach ID

Filtern nach Benutzer-ID

 

Gefilterte Liste und Zurücksetzten des Filters

Gefilterte Liste und zurücksetzten des Filters

 

Cockpit-Rollen für Referenzuser

Auch Referenzbenutzer können jetzt Cockpit-Rollen zugewiesen werden. Die Rollen sind auch für alle Benutzer gültig, die auf dem Referenzbenutzer basieren.

Benutzer mit Referenzbenutzer

 

 

Listvergleich

Eine Checkbox in der Legende des Tabellenvergleichs gibt Aufschluss darüber, ob es sich um eine gespeicherte List handelt.

Mapping im Tabellenvergleich

Mapping im Tabellenvergleich

 

Saved List Kennzeichnung im Vergleich

Saved List Kennzeichnung im Vergleich

 

Editorbereich teilen

Das SQL Cockpit wurde in diesem Release für eine API vorbereitet, um Daten (SQL SELECTS, Listen, Symbolwerte,…) aus verschiedenen Quellen in das Cockpit schicken zu können.

Vorerst wird darauf aber nur innerhalb des Cockpits zugegriffen: „Editor teilen“ und „Meine Queue“: 

Mit Hilfe des ersten Buttons kann der User seinen derzeitigen Inhalt des SQL Bereich mit einem anderen User teilen: Ich möchte über einen SELECT mit einem Kollegen diskutieren oder Feedback dazu einholen.

SELECT (Editorbereich) teilen

SELECT (Editorbereich) teilen

 

Der zweite Button zeigt den „Posteingang“ des des Benutzers an.

Posteingang des Benutzers

 

Per Doppelklick wird der geschickte Inhalt in den Editorbereich übernommen.

Wird eine Eintrag nicht mehr benötigt, kann er gelöscht werden.

 

Premium Version – PDF Attachments Erweiterung

Ab jetzt kann ein Administrator eine maximale Größe von PDF-Dokument SQL Cockpit – Admin Bereich festlegen. Wird diese Größe überschritten, wird das PDF Dokument auf mehrere aufgeteilt und als separate Mail verschickt.

Der Änderunglog kann jetzt auch als Attachment an das Solution Manager Ticket gehängt werden. Entweder als Textdokument oder als PDF-Dokumente mit der entsprechenden Maximalgröße.

Premium Edition - Admin Bereich

Premium Edition – Admin Bereich

 

Zwei verschiedene Formulare stehen ab jetzt zur Verfügung:

  • /CADAXO/SQLC_UPDATE_LOG_FORM – Bisheriges Formular
  • /CADAXO/SQLC_UPDATE_LOG_SMALL – Neues, speicheroptimiertes Formular

 

 

Webinar – ABAP® CDS Views

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „ABAP CDS Views“

Umfrageergebnisse:

Welches Webinar sollen wir im September wiederholen?

Da als einziger Vorschlag ebenfalls BOPF gewählt wurde, steht das Ergebnis wohl fest.

Wir werden das berücksichtigen, behalten uns aber vor, doch die Würfel zu befragen 😉

Nützliche Links

 

Interessante Blogs

Domi Bigl – ABAP CDS Views – 6 Schritte zum Verständnis – die Beispiele der LiveDemos im Webinar

Johann Fößleitner – ABAP CDS Access Control mit DCL

Jerry Wang – My CDS view self study tutorial

SDN Sammlung – CDS – Core Data Services

Horst Keller – CDS – One Concept, Two Flavors

Horst Keller – ABAP News for Release 7.50 – ABAP CDS Access Control

Horst Keller – ABAP News for Release 7.50 – Environment Information in ABAP CDS

Horst Keller – ABAP News for Release 7.50 – Annotations in ABAP CDS

Horst Keller – From Open SQL Joins to CDS Associations

Bilder

Es war noch nicht allzu heiß und der Ton ging noch 😉

 

Unsere nächsten Webinare

  • Freitag 29.09.2017 10:00 Uhr – voraussichtlich BOPF – Anmeldung
  • Freitag 24.11.2017 10:00 Uhr – SAP NetWeaver Gateway – Anmeldung

ABAP® CDS Views – 6 Schritte zum Verständnis

Einführung

Core Data Service Views – CDS Views – sind die neue Form der DDIC (SE11)-Datenbankview – aber absolut nicht vergleichbar!

CDS Views werden mit der Data Definition Language – DDL – in den Abap Development Tools definiert und können mit der Data Control Language – DCL – um Berechtigungen bzw. Zugriffsbeschränkungen erweitert werden.

Sie sind eine Möglichkeit des Code Push-Down im ABAP und zentraler Bestandteil des S/4 HANA ABAP-Programmiermodels (mehr Details gibt’s in den Folien zum Webinar).

Die hier gezeigten Beispiele wurden in unserem Webinar ABAP CDS Views verwendet und basieren auf Geschäftspartner-Beziehungen. Als System diente SAP NETWEAVER 750 SP1, bei niedrigeren Releases (ab 740 SP5/SP8) stehen manche Funktionen noch nicht zu Verfügung!

Die verwendeten Tabellen sind:

  • BUT000 GP: Allgemeine Daten I
  • BUT050 GP-Beziehungen/GP-Rollenfindungen: Allgemeine Daten
  • TBZ9A GP-Beziehungstypen: Texte
  • BUT100 GP: Rollen

Und hier noch die Datenbasis aus der Geschäftspartnerpflege:

 Schritt 1 – Ein erster CDS View mit JOIN

Definition eines CDS Views mittels DDL

Wir haben hier einem LEFT OUTER JOIN der BUT050 mit TBZ9A (Alias cattx) und den Viewfeldern Partner1, Partner1, Date_to, Reltyp, Date_from aus der Tabelle BUT050 und Spras, Bez50 und Bez50_2 aus der Tabelle TBZ9A. Als Ergebnis erhalten wir alle Beziehungen aus der BUT050 und den entsprechenden Texten zum Beziehungstyp aus der TBZ9A.

Das ist jetzt noch nicht wirklich aufregend und, abgesehen vom Syntax, auch nicht neu. Das schafft man auch mittels SE11-Datenbankview.

Wir wollen dieses einfache Beispiel aber nutzen, um die verschiedenen Bereiche, Befehle und Tools genauer zu beschreiben.

DDL Bereiche

Objekte und Namen

CDS Entity Name (Datenquellenobjekt ): Die CDS Entity wird als Datenquelle z.B. im ABAP Open SQL Statement verwendet.
CDS Datenbank View (generierter SE11 Datenbankview): Für jede Entity wird ein SE11 Datenbankview mit entsprechendem Namen generiert.
CDS Viewname (Sourcecode): Name des DDL Sourcecode Objekt.

Generierter DDL View in der SE11:

Generierter SE11 DDL View

Annotiations

Annotations bieten die Möglichkeit Eigenschaften, Einstellungen und Metadaten für einem CDS View zu definieren. Diese Werte werden z.B. von der ABAP Runtime oder diversen Frameworks (u.a. Gateway/OData Service, BOPF,…) ausgelesen und steuern deren Verhalten bzw. die Ausgabe.

Annotations gelten entweder für den gesamten View – View Annotations:

Oder für einzelne Elemente/Felder – Element Annotations:

Natürlich gibt’s auch Code Completion:

Annotations zu CDS Entitäten bzw. deren Feldern können mit der API Klasse CL_DD_DDL_ANNOTATION_SERVICE ausgelesen werden. Es wird auch die Möglichkeit kundeneigener Annotations geben (derzeit noch nicht offiziell unterstützt).

Weitere Details gibt’s hier:

https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_view_entity_annotations.htm

https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_element_annotation.htm

https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_parameter_annotations.htm

SELECT Liste

Die Select Liste (Datenbankfelder, Literale, Parameter, Funktionen, Systemfelder,…) kann entweder VOR oder NACH den Datenquelle angegeben werden:

Datenquellen

Als Datenquellen können Datenbanktabellen, SE11-Datenbankviews und andere CDS Entitäten angegeben werden. Für ON-Bedingungen von Joins gelten ähnliche Regeln, wie im Open SQL. Vor allem ist auch hier noch kein CAST möglich.

Details findet man hier: https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_joined_data_source.htm

Datenvorschau

Die Ergebnisse eines CDS Views kann in den ADT über die Data Preview angezeigt werden. Der Aufruf erfolgt über das Kontextmenü im DDL Code oder im Project Explorer oder direkt mittels F8:

Die Ausgabe der Data Preview:

Über Add filter kann, ähnlich der SE16, auf einzelne Feldwerte eingeschränkt werden:

In der SQL Console kann der abgesetzte SQL SELECT Befehl angezeigt und angepasst werden:

Cadaxo SQL Cockpit

Um den ABAP Open SQL Aufruf bzw. Syntax zu zeigen, wird das Cadaxo SQL Cockpit verwendet. Die angeführten SELECT Statement können genauso in ABAP Coding verwendet werden. Einzig der Befehl

muss an den entsprechenden Stellen eingefügt werden.

Cadaxo SQL Cockpit

Das entspricht dem ABAP Befehl:

http://www.cadaxo.com/produkte/cadaxo-sql-cockpit/

Schritt 2 – Eingebaute Funktionen

Die CDS Views biete eine ganze Fülle von eingebauten Funktionen, mit denen z.B. mathematische Funktionen und Stringopperationen ausgeführt, Währungs- und Mengeneinheiten umgerechnet, Zeit- und Datumsangaben geprüft oder Datumsintervalle berechnet werden können.

Eine vollständige Liste gibt’s hier: https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_builtin_functions.htm

Hier wird die eingebaute Funktion DATS_DAYS_BETWEEN verwendet, um die Gültigkeit jeder Beziehung in Tagen zu berechen, und als Viewfeld Period bereitzustellen:

Im Ergebnis sehen wir die unterschiedlich langen Gültigkeitsbereiche in der Spalte PERIOD.

Schritt 3 – Views mit Parametern

Für CDS Views können Parameter definiert werden, die beim SELECT übergeben bzw. befüllt werden müssen:

Der SELECT wurde um zwei JOINs auf die BUT000 erweitert, um Details zu den Partner zu ermitteln. Durch die beiden CASE Anweisungen werden auch Name_last bzw Name_org1 aus dem entsprechenden BUT000-Eintrag geliefert (natürlich sollte hier das Feld BUT000-TYPE zur Fallunterscheidung verwendet werden, zur Demonstration der Funktionalität reicht uns aber die Prüfung <> “).

Der interessante Teil ist aber die Definition des Parameters p_langu mit dem Datentype abap.lang (entspricht dem ABAP Dictionary Type LANG). Der Parameterwert wird in der ON-Bedingung des JOINs verwendnet, um die Einträge auf die gewünschte Sprache einzuschränken. Er kann aber genauso in die WHERE-Bedingung  geschrieben werden. Die beiden Schreibweisen $parameters.p_langu und :p_langu sind gleichwertig und austauschbar.

Beim Aufruf der Data Preview erscheint jetzt zuerst ein Popup für die Parametereingabe:

Die Ergebniszeilen werden entsprechend eingeschränkt und auch die CASE Anweisung arbeitet richtig:

Der Open SQL Aufruf erfolgt ähnliche einem Methodenaufruf:

Als Typen können DDIC-Datenelemente oder vordefinierte Datentypen verwendet werden: https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_typing.htm

Die  Code Completion unterstützt auch hier:

Über spezielle Parameter Annotations, die Environment Annotationen, können Systemfelder (z.B. SY-UNAME) als Defaultwerte für Parameter definiert werden. Wird der SELECT im ABAP ausgeführt, kann der Parameter weggelassen werden und wird auf den aktuellen Systemwert gesetzt:

Derzeit ist das für diese SY-Felder möglich:

sy-mandt #CLIENT
sy-datum #SYSTEM_DATE
sy-uzeit #SYSTEM_TIME
sy-langu #SYSTEM_LANGUAGE
sy-uname #USER

Das ist zwar nett, kann aber auch über eine Where-Bedingung erreicht werden. Wirklich lustig werden Parameter aber, wenn man mit ihnen Logik in die CDS Views bring:

Wir legen einen weiteren Parameter p_name_first an und verwenden ihn in einer CASE Anweisung. Wird der Parameter mit dem Wert ‚F‘ übergeben, soll für Personen der Vorname (name_first) geliefert werden. Bei jedem anderen Wert kommt wie bisher der Nachname (name_last):

Die Ergebnislisten der beiden Select enthalten die erwarteten Namen:

Schritt 4 – Associations

Associations sind am einfachsten als „JOINs On Demand“ zu beschreiben. Durch Associations können Abhängigkeiten zwischen CDS View Entitäten (also Datenbanktabellen) abgebildet und damit komplexe Datenmodelle definiert werden. Datenbankseitig entsprechen sie JOINs. Die JOIN Bedingung wird aber nur ausgeführt, wenn wirklich Daten über die Associations gelesen werden müssen, also ein Feld aus der Association in der Select-Liste oder Where-Klausel verwendet wird.

Zunächst modellieren wir unsere JOINs als Associations und definieren die entsprechende Kardinalität. In unserem Fall [1..1] für die Partner Beziehung und [0..*] für die Text Beziehung. Die Kardinalität dient derzeit noch hauptsächlich rein zur Abbildung des Datenmodells und wird durch die Syntaxprüfung nur teilweise berücksichtigt. Eine Ausnahme ist die Verwendung in der WHERE-Klausel, wo als Kardinalität nur [0..1] oder [1..1] erlaubt ist.

Wir verwenden hier einige Felder aus der Association _cattx mit einem FILTER auf das Feld Spras. Damit werden nur Einträge geliefert, die auch dem Filter entsprechen („Where-Klausel“). Die Texte zum Beziehungstyp werden einerseits zu übergebenen Sprache im Parameter p_langu gelesen, aber zusätzlich auch für Deutsch. Wir sehen hier auch eine Warnung bezüglich der Kardinalität ([0..*] für TBZ9A), können den View aber trotzdem ausführen:

Auch im ABAP:

Interessanterweise erhalten wir aber mehr Zeilen als über die JOIN-Verknüpfung in Schritt 3!?!

Das liegt daran, dass Associations standardmäßig als LEFT OUTER JOIN gebildet werden. Das kann aber übersteuert werden:

Über die Angabe inner in den Filterwerten, mit dem Zusatz where, wird nun ein INNER JOIN generiert. Die ebenfalls neue Anweisung 1: setzt die Kardinalität für diese Verwendung auf [0..1]. Die Warnung wird nicht mehr angezeigt:

Das Ergebnis ist wieder gleich der JOIN Variante:

Associations veröffentlichen – Pfadzugriffe

Wer sich bisher gewundert hat, warum in der SELECT-Liste der Viewdefintion die beiden Associations _partner1 und _partner2 (Alisasnamen für Associations sollten mit ‚_‘ beginnen) angegeben sind, in der Ergebnisliste aber nicht wirklich aufscheinen: Damit wird Association nur veröffentlicht. Sie kann also „von außen“ durch einen Aufrufer verwendet werden. Der Zugriff auf Associations mittels Open SQL erfolgt über Pfade:

Hier wird über die Entität Zwb_But050_Txt_Asso_E selektiert, es werden aber nur Felder der Association _partner2 abgerufen, also Felder aus der Datenbanktabelle BUT000. Im SQL Trace (Transaktion ST05) ist der abgesetzte SELECT Befehl ersichtlich:

Es wird also zur Laufzeit ein JOIN mit der ON-Bedingung der Association gebildet.

Natürlich kann man auch nur einzelne Felder über Pfadausdrücke ansprechen:

Oder in der Where-Klausel verwenden:

Der Zugriff auf nicht veröffentlichte Associationen von außen ist nicht möglich:

Compare Filter

Wir haben bisher immer die View-Annotation

verwendet, diese aber noch nicht erklärt. Um zu verstehen, was diese macht, müssen wir uns den generierten, technischen SQL Befehl anschauen. Das ist über das Kontextmenü möglich:

Wir erkennen, dass für die Association _cattx (technischer Alias A0) nur eine JOIN Verknüpfung angelegt wird.

Setzen wir den Annotationwert auf false und betrachten den technischen SQL Befehl erneut:

Jetzt wird für jedes Association-Feld eine JOIN-Bedingung definiert!

Kardinalitätsfehler in der Where-Klausel

Für das Beispiel wurde auch die Assiocation _cattx nach außen veröffentlicht.

Schritt 5 – Viewerweiterungen

SAP bietet auch die Möglichkeit CDS Views modifikationsfrei zu erweitern. Dazu kann über einen Extend View eine Entität um zusätzliche Assiciations und Felder erweitert werden:

Die Entität Zwb_But050_Txt_Asso_E liefert jetzt auch das Feld Relnr der Tabelle BUT050 und es gibt die Association _roles:

Die Data Preview bietet auch die Möglichkeit auf Assiocaitions zuzugreifen:

Daten der hinzugefügten Association _roles für eine Ergebniszeile der Entität.

Und auch im ABAP:

Schritt 6 – einfach ausprobieren

 CDS Views erscheinen auf den ersten Blick vielleicht etwas fremd und komplex. Aber jeder ABAP Entwickler, der bereits über ein SELECT * FROM table hinausgekommen ist und etwas Erfahrung mit ADT hat, findet sich sehr schnell zurecht! Einfach mal ein paar Beispiele ausprobieren und die Templates zum Anlegen verwendet – dann wird man die CDS Views kennen und lieben lernen! Zumindest wars bei mir so 😉

Und spätestens mit S/4 HANA kommen wir an CDS Views nicht mehr vorbei…

ABAP CDS Access Control mit DCL

Appendix

Mit dem Cadaxo SQL Coskpit ist es möglich die DDL Source auch im SAP GUI anzuzeigen, ohne Eclipse starten zu müssen:

ADT Templates

In den ADT können neue DDL Sourcen angelegt werden und es stehen einige Templates bereit:

<Screens skipped…>

How to send emails from ABAP® with CL_BCS

Usage of the class CL_BCS in order to send eMails from ABAP™ applications via the Business Communication Service.

With our development tips we address special, related to praxis topics around the exciting and inexhaustible topic software development.

Valid for: SAP NetWeaver ABAP Web AS from 6.10

Index

  • General
  • e-mail dispatch from SAP
  • Class CL_BCS
  • Method CREATE_PERSISTENT – compile of a sending task
  • Method SET_DOCUMENT – attach text, data files and other objects
  • Method ADD_ATTACHMENT of the class CL_DOCUMENT_BCS
  • Method ADD_RECIPIENT – transfer of receiver
  • Method SEND – Sending of e-mail
  • Cases of application
  • Copyright & disclaimer

General

Often it is important to have necessary information at disposal in order to react quickly and in the right way. Especially, when the information procurement, like a report, takes a long time and cannot be constantly watched, it is useful to release an action upon completion. That can for example be an eMail with the status of a batch job or even the ABAP list.

eMail dispatch from SAP

SAP provided with the web AS 6.10 (6.20) the Business Communication Services (BCS) to send objects from ABAP applications. This object orientated interface is the successor of the Business Communication Interface (BCI), which is implemented as objects of the Business Object Repository (BOR).

In this Cadaxo development tip I will give an overview of the e-mail dispatch via BCS.

Class CL_BCS

Via BCS different objects with attachments and notes for several receivers can be sent also in different communication ways. Consequently the interface – the class CL_BCS – is constructed complex. In this development tip we therefore concentrate on sending an e-mail with attachment only.

A sending process breaks down into the following steps:

  • Generation of a sending task
  • Attaching an object
  • Choice of receivers
  • Sending of the mail

For all those tasks the class CL_BCA provides the following methods:

  • CREATE_PERSISTENT Compilation of a sending task
  • SET_DOCUMENT Attaching a text, data or other objects
  • ADD_RECIPIENT Add the receiver
  • SEND Sending of e-mail

Method CREATE_PERSISTENT – Compilation of a sending order

This method generates a sending task and returns an object of the class CL_BCS. All further steps are used upon that object.

Method SET_DOCUMENT – Attachment oft ext, data and other objects

With this method the content, meaning the actual text and data attachments of the e-mail is committed. The method expects an object with the interface IF_DOCUMENTS_BCS. Attachments are committed via this object too.

Via the statistic method CREATE_DOCUMENT of the class CL_DOCUMENT_BCS a respective object can be created.

The method expects the following parameters:

I_TYPE: Type of committed data, e.g. HTM für eine HTML Datei, TXT for text data, BIN for binary data like PDFs

I_TEXT/I_HEX: A chart with the actual text resp. the binary data according to the choosen type

I_SUBJECT: subject of the e-mail

Method ADD_ATTACHMENT of class CL_DOCUMENT_BCS

This method is similarly used to the CREATE_DOCUMENT:

I_ATTACHMENT_TYPE: Type of committed data, e.g. HTM for HTML data, TXT for text data, BIN for binary data like PDFs

I_ATTACHMENT_TEXT/

I_ATTACHMENT_HEX: An internal table with the actuall text resp. the binary data according to the choosen type

I_ATTACHMENT_SUBJECT: Name of the attachment file

Method ADD_RECIPIENT – Transfer of receiver

Depending on the way of communication and type of the sent object different receivers can be transferred to the mail. E.g. no business object relation can be per e-mail.

The method expect at least one object which implements the interface IF_RECIPIENT_BCS:

I_RECIPIENT: receiver address (Interface IF_RECIPIENT_BCS)

I_EXPRESS: Express message; if the receiver is a SAP user, a pop-up appears at the next processing of the PBO event with the notice of a new message

I_COPY: The receiver receives the message as a copy

I_BLIND_COPY: The receiver receives the message as a blind copy

I_NO_FORWARD: no forwarding; if the receiver is a SAP user, he cannot forward the message

The two most important receiver types are probably e-mail addresses and SAP users. The respective objects are generated by the following statistic methods:

CL_SAPUSER_BCS=>CREATE For SAP users

CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS For e-mail addresses

Method SEND – Sending of an e-mail

The message is passed on to SAPconnect and sent via the respective interface. The actual sending process is usually scheduled by a batch job with the report RSCONN01, which periodically sends all upcoming messages. In order to avoid the waiting perioduntil the next job performance, the message can be tagged as “to be sent immediately”: Method SET_SEND_IMMEDIATELY( abap_true ) of the sending task.

Method SHORT_MESSAGE

With this method the SAPOffice dialogue opens itself for new messages, on which the user can maintain receivers, texts, attachments and their settings himself. Via parameters suggestion values for the respective fields and objects, e.g. receiver addresses, can be taken with at the time of selection, which later will be displayed in the message.

ABAP-Klasse CL_BCS – Mailversand aus ABAP

Verwendung der Klasse CL_BCS zum Versenden von eMails aus ABAP™ Anwendungen über das Business Communication Service.

Mit unseren Development Tipps behandeln wir spezielle, praxisbezogene Themen rund um das spannende und unerschöpfliche Thema Softwareentwicklung.
Gültig für: SAP NetWeaver ABAP Web AS ab 6.10

Inhalt

  • Allgemeines
  • Mail versenden aus SAP bzw. ABAP
  • Klasse CL_BCS
    • Methode CREATE_PERSISTENT: Anlegen eines Sendeauftrags
    • Methode SET_DOCUMENT: Anfügen von Text, Dateien und anderen Objekten
    • Methode ADD_ATTACHMENT: der Klasse CL_DOCUMENT_BCS
    • Methode ADD_RECIPIENT: Übergabe der Empfänger 4
    • Methode SEND: Senden der E-Mail
  • Anwendungsfälle

Allgemeines

Oft ist es wichtig, benötigte Informationen schnell zur Verfügung zu haben, um rasch und richtig reagieren zu können. Besonders, wenn die Informationsbeschaffung, etwa ein Report, lange dauert und nicht ständig überwacht werden kann, ist es sinnvoll nach Beendigung eine Aktion auszulösen. Das kann z. B. eine eMail mit dem Status eines Batchjobs oder gar schon der fertigen ABAP-Liste sein.

Mail versenden aus SAP bzw. ABAP

SAP hat mit dem Web AS 6.10 (6.20) die Business Communication Services (BCS) zum Versenden von Objekten aus ABAP Anwendungen zur Verfügung gestellt. Dieses objektorientierte Interface ist der Nachfolger des Business Communication Interface (BCI), das über Objekte des Business Object Repository (BOR) realisiert ist.

In diesem CADAXO Development Tipp werde ich einen kurzen Überblick zum E-Mail Versand mittels BCS geben.

Klasse CL_BCS

Über das BCS können unterschiedlichste Objekte mit Anhängen und Notizen an mehrere Empfänger und auf unterschiedliche Kommunikationsarten geschickt werden. Dementsprechend komplex ist das Interface – die Klasse CL_BCS – auch aufgebaut. In diesem Development Tipp beschränken wir uns auf das Versenden einer E-Mail mit Anhang.

Ein Sendevorgang gliedert sich üblicherweise in folgende Schritte.

  1. Erzeugen des Sendeauftrags
  2. Anfügen eines Objekts
  3. Auswahl der Empfänger
  4. Versenden der Nachricht

Für all diese Aufgaben stellt die Klasse CL_BCS Methoden zu Verfügung:

  • CREATE_PERSISTENT Anlegen eines Sendeauftrags
  • SET_DOCUMENT Anfügen von Text, Dateien und anderen Objekten
  • ADD_RECIPIENT Übergabe der Empfänger
  • SEND Senden der E-Mail

Methode CREATE_PERSISTENT – Anlegen eines Sendeauftrags

Diese Methode erzeugt einen Sendeauftrag und liefert diesen als Objekt der Klasse CL_BCS zurück. Alle weiteren Schritte werden auf dieses Objekt angewendet.

Methode SET_DOCUMENT – Anfügen von Text, Dateien und anderen Objekten

Mit dieser Methode wird der Content, also der eigentliche Text und Dateianhänge der E-Mail, übergeben. Die Methode erwartet ein Objekt mit dem Interface IF_DOCUMENT_BCS. Auch Attachments werden über dieses Objekt übergeben.

Über die statische Methode CREATE_DOCUMENT der Klasse CL_DOCUMENT_BCS kann man sich ein entsprechendes Objekt erzeugen lassen. Die Methode erwartet zumindest folgende Parameter:

  • I_TYPE: Typ der übergebenen Daten, z. B. HTM für eine HTML Datei, TXT für Textdateien, BIN für Binärdaten, etwas PDFs
  • I_TEXT/I_HEX: Eine Tabelle mit dem eigentliche Text bzw. den Binärdaten, je nach gewähltem Typ
  • I_SUBJECT: Betreff der E-Mail

Methode ADD_ATTACHMENT der Klasse CL_DOCUMENT_BCS

Diese Methode ist ähnlich der CREATE_DOCUMENT zu verwenden:

  • I_ATTACHMENT_TYPE: Typ der übergebenen Daten, z. B. HTM für eine HTML Datei, TXT für Textdateien, BIN für Binärdaten, etwas PDFs
  • I_ATTACHMENT_TEXT/I_ATTACHMENT_HEX: Eine Tabelle mit dem eigentliche Text bzw. den Binärdaten, je nach gewähltem Typ
  • I_ATTACHMENT_SUBJECT: Name der Attachmentdatei

Methode ADD_RECIPIENT – Übergabe der Empfänger

Je nach Kommunikationsart und Typ der versendeten Objekte können unterschiedliche Empfänger an die Nachricht übergeben werden. Es kann zum Beispiel keine Business Objekt Verknüpfung per E-Mail verschickt werden.

Die Methode erwartet zumindest ein Objekt, das das Interface IF_RECIPIENT_BCS implementiert:

  • I_RECIPIENT: Empfängeradresse (Interface IF_RECIPIENT_BCS)
  • I_EXPRESS: Expressnachricht; ist der Empfänger ein SAP Benutzer, so erhält er bei der nächsten Prozessierung des PBO-Events eine Pop-up mit dem Hinweis auf eine neue Nachricht
  • I_COPY: Der Empfänger erhält die Nachricht als Kopie
  • I_BLIND_COPY: Der Empfänger erhält die Nachricht als Blindkopie
  • I_NO_FORWARD: keine Weiterleitung; ist der Empfänger ein SAP Benutzer, so kann dieser die Nachricht nicht weiterleiten

Die beiden wichtigsten Empfängertypen sind wahrscheinlich E-Mailadressen und SAP Benutzer. Die entsprechenden Objekte werden durch folgende statische Methoden erzeugt:

  • CL_SAPUSER_BCS=>CREATE Für SAP Benutzer
  • CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS Für E-Mailadressen

Methode SEND – Senden der eMail

Die Nachricht wird an SAPconnect übergeben und über das entsprechende Interface verschickt. Der eigentliche Sendeprozess wird üblicherweise durch einen Batchjob mit dem Programm RSCONN01 eingeplant, der periodisch alle anstehenden Nachrichten verschickt. Um die Wartezeit bis zur nächsten Jobausführung zu umgehen, kann die Nachricht als „sofort zu verschicken“ gekennzeichnet werden: Methode SET_SEND_IMMEDIATELY( abap_true ) des Sendeauftrags.

Methode SHORT_MESSAGE

Mit dieser Methode öffnet sich der SAPOffice Dialog für neue Nachrichten, auf dem der Benutzer selbst Empfänger, Text, Attachments und deren Einstellungen pflegen kann. Über Parameter können Vorschlagswerte für die entsprechenden Felder und Objekte, z. B. Empfängeradressen beim Aufruf mitgegeben werden, die dann in der Nachricht angezeigt werden.

Anwendungsfälle

Wo ist nun eine Anwendung der Klasse CL_BCS denkbar und sinnvoll?

  • Anwender können informiert werden, oder bereits Ergebnisse zugeschickt bekommen, wenn eine Auswertung, die als Hintergrundjob eingeplant war, fertig ist.
  • In Fehlersituationen bei kritischen Anwendungen oder Schnittstellen können die zuständigen Personen sofort benachrichtigt werden und somit viel schneller reagieren.