Erklärung und Anwendung von TIMESTAMPs in ABAP®/SAP®

Allgemeines zu den Timestamps

Gerade SAP Kunden sind meist global agierende Unternehmen, mit Mitarbeitern in verschiedenen Kontinenten bzw. Zeitzonen. Da leider immer noch viele Entwicklungen – auch im SAP Standard – nach wie vor nur mit sy-uzeit bzw. sy-datum arbeiten, habe ich mich entschlossen, hier ein paar Informationen zu Timestamps in ABAP bzw. SAP niederzuschreiben.

Die bereits erwähnten Systemfelder sy-datum und sy-uzeit sind für viele Anwendungen nicht ausreichend:

  • bei sy-datum und sy-uzeit handelt es sich um lokale Zeitangaben. Global agierende Unternehmen, mit Standorten in verschiedenen Zeitzonen müssen den Anwendern Zeiten in deren Zeitzone darstellen können.
  • sy-uzeit enthält die Zeit lediglich auf Sekunden genau.

Erzeugung eines Timestamps in ABAP bzw. SAP mit GET TIME STAMP

Für die Erzeugung eines aktuellen Timestamps in einem SAP System wird das ABAP Kommando get time stamp … verwendet. Das Kommando erzeugt einen Zeitstempel für die UTC-Zeit des aktuellen ABAP Systems. Entsprechend der Definition des Zielfeldes wird der Timestamp entweder in der Kurz- oder Langform erstellt. Üblicherweise werden für die Felddefinition der Timestamp-Felder die Datenelemente timestamp bzw. timestampl verwendet.

Im nachfolgenden Beispiel werden beide Timestamp-Formate erstellt:

Hinweis: Ein Timestamp ist nicht immer „eindeutig“. Sprich, ein Programm dass in kurzer Zeit mehrere Timestamps zieht, könnte unter Umständen die gleichen Timestamps ziehen.

Konvertierung/Umrechnung von Timestamps

Timestamps können mit Hilfe des Kommandos convert time stamp … in bzw. von Datum- bzw. Uhrzeitfeld (type d und t) konvertiert werden. Für die Konvertierung eines Timestamps in ein Datum- bzw. Uhrzeitfeld ist mit dem Zusatz time zone die Zeitzone anzugeben. Wie oben erwähnt, erhält man bei get time stamp den Zeitstempel in UTC Zeit. Bei der Konvertierung eines Datums bzw. Uhrzeit in einen Timestamp kann mit dem Zusatz time zone die Zeitzone für das Datum- bzw. Uhrzeitfeld mitgegeben werden.

Nachfolgendes Beispiel konvertiert einen Timestamp in ein Datum- bzw. Uhrzeitfeld. Als Ziel-Zeitzone wird die Zeitzone des Anwenders sy-zonlo verwendet. Die Zeitzone kann in den persönlichen Einstellungen am Userstamm eingestellt werden.

Nachfolgend das Gegenstück, ein Beispiel zur Konvertierung eines Datum- bzw. Uhrzeitfeldes in einen Timestamp:

Manchmal besteht die Anforderung darin, ein Datum/Zeit von einer Zeitzone in eine andere Zeitzone zu konveriteren. Ich verwende dazu als Hilfe die Konvertierung in einen Timestamp. Sprich, zuerst Konvertierung von Datum/Uhrzeit der Ausgangszeitzone in einen Timestamp, dann Konvertierung des Timestamps in Datum/Uhrzeit der Zielzeitzone.

Zusatz DAYLIGHT SAVING TIME field

Mit diesem Zusatz erhält man die Information, ob sich der Zeitstempel für die angegebene Zeitzone in der Sommerzeit befindet.

Klasse cl_abap_tstmp – Berechnungen von Timestamps

Für verschiedene Berechnungen, Prüfungen oder Konvertierungen steht in einem ABAP System die Klasse cl_abap_tstmp zur Verfügung. Die Klasse bietet verschiedene Methoden an, nachfolgende Methoden sind hervorzuheben:

  • add Addition von x Sekunden zu einem Timestamp
  • subtract Subtraktion eines Timestamps von einem anderen Timestamp
  • subtractsec Subtraktion von x Sekunden von einem Timestamp
  • compareVergleich von zwei Timestamps

Für weitere Informationen zu den restlichen Methoden bitte direkt in die Klasse/Methode einsteigen und die Dokumentation aufrufen.

Weitere Informationen stehen auch in der SAP Hilfe unter https://help.sap.com/docs/SAP_NETWEAVER_700/109dcbed6c531014bc94b876083bbe59/4d591ec163e444b4e10000000a42189e.html?locale=de-DE zur Verfügung

Ab 7.53 gibt es einen neuen Timestamp ABAP-Typ UTCLONG. – Details dazu unter  https://www.cadaxo.com/high-class-development/abap-7-54-neuer-timestamp-utclong/

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.