Cadaxo SQL Cockpit 3.2 – Releaseinfos

Für die Version 3.2 unseres SQL Cockpits haben wir neben einigen kleineren Verbesserungen und Korrekturen ein paar sehr interessante Features eingebaut bzw. erweitert.

Vergleichen von Ergebnislisten

Der Vergleich von Ergebnislisten wurde komplett runderneuert. Nun können beliebige Ergebnislisten miteinander verglichen werden. Über eine komfortable Mappingoberfläche können die zu vergleichenden Felder verlinkt werden. Es spielt dabei keine Rolle, ob es sich dabei um neu erstellte Ergebnislisten oder um gespeicherte Listen handelt.

SQL Cockpit 3.2 - Comparing Result Lists

Tipp: Gespeicherte Listen können exportiert bzw. importiert werden. Dadurch ist ein systemübergreifender Ergebnislistenvergleich möglich!

Open SQL Features 7.50

SAP hat mit 7.40 SP5 / SP8 bzw. 7.50 umfangreiche Erweiterungen für den ABAP Open SQL Syntax aufgenommen. Das Cadaxo SQL Cockpit 3.2 unterstützt alle diese neuen SQL Features.

Nachfolgend eine Aufstellung der wichtigsten ABAP Open SQL Features:

  • Open SQL Expressions
  • Open SQL Functions
  • Host Expressions
  • Unions
  • Zugriff auf CDS Views
  • Pfadausdrücke für Assoziationen von CDS-Views
  • CDS-Views mit Eingabeparametern

Integration ADT

Über die Usersettings kann sich nun jeder Anwender einstellen, ob die Vorwärtsnavigation bei einem Doppelklick auf eine Tabelle wie bisher innerhalb des SAP Gui oder ob die Anzeige mit den ADT (ABAP Developer Tools = Eclipse!) erfolgen soll.

Beispielsweise können CDS Views nur mit den ABAP Developer Tools gepflegt werden. Innerhalb von SAP Gui ist lediglich eine Anzeige möglich.

Elementinfo für CDS Views

Die Anzeige der CDS Views wurde in die Elementinfo aufgenommen. Die Element Info sorgt für eine bessere Usability im SQL Cockpit. Notwendige Informationen zu einer DB-Tabelle werden einfach angezeigt, wenn man einen Moment mit dem Mauszeiger über einen Tabellen- oder CDS-View-Namen fährt.

Webinar – SAP® BOPF

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zu unserem Webinar „SAP BOPF

Webinar – ABAP® 7.50 Releaseabhängige Änderungen

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „ABAP 7.50 Releaseabhängige Änderungen

Bücher:

Nützliche Links

Horst Keller Blogs:

Unsere nächsten Webinare

Bild

Backstage!

Webinar – TDD mit ABAP® Units

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „TDD mit ABAP Units“

Umfrageergebnisse:

Verwenden Sie ABAP Unit Tests?

umfrage abap untis

Interessante Auszüge aus dem Chat

Frage: Kann man die Unit Tests soweit integrieren, dass ein Transport nur möglich ist wenn keine Fehler auftreten?
Antwort: Ja sicher, über CI (Code Inspector) Prüfungen bei der Freigabe

Info: So ein Update zum falschen Zeitpunkt ist einem Kollegen kurz vor einer Kundenpräsentation unlängst auch passiert. (Anm. Föß: Danke das hilft!)

Info: Ich denke, der Prozess des Übergangs ist schwierig und ein eigenes Webinar wert. (Anm. Föß: Stimmt vollkommen, bereits während der Vorbereitung hab ich mir die gleichen Gedanken gemacht. Ich denke ich greife genau das Thema nochmals auf)

Frage: „Gibt es eigentlich Kennzahlen mit denen man sinnvoll die Einführung von Unit Tests darstellen kann? (Anm. Föß: Ja gibt’s (von Google selber z.B. ), aber leider hab ich von/über SAP da nichts passendes gefunden)

Info: Martin Fowler hat unlängst in einem Blog geschrieben wie schwer es ist als erster mit Unit Tests anzufangen. Da ist es oft notwendig kreativ Lösungen zu finden. (Anm. Föß: Page von Martin Fowler: http://martinfowler.com )

Info: Interfaces ist eine Methode für Datenbankzugriffe, Paul Hardy nennt Unterklassen. Ich nutze manchmal einfach nur If-Statements dafür. (Anm. Föß: Stimmt, ist eine Lösung. In diesem Zusammenhang ein Hinweis auf 7.50 und auf die sogenannten Test seams bzw. Test injections: http://help.sap.com/abapdocu_750/en/index.htm?file=abennews-750-abap_unit.htm )

Info: Working Effectively with Legacy Code““ beschreibt sehr schön wie Tests nachträglich eingeführt werden können. (Anm. Föß: ISBN-13: 978-0131177055)

Bücher:

Nützliche Links

Twitter User denen man folgen sollte:

Bild

Man beachte den rechten Laptop, der war 45 Minuten mit Updates beschäftigt!

20160923_102511

Unsere nächsten Webinare

Webinar – Der SAP® Abkürzungsdschungel

 

Vielen Dank für Ihre Teilnahme an unserem Webinar!

 

Unterlagen/Links zum Webinar „Der SAP Abkürzungsdschungel – Was steckt hinter HCP, S/4, C4C, …“

 
 

Unsere nächsten Webinare

 

Juli

  • Saville – Cadaxo bringt Fiori auf den nächsten Level (Anmeldelink folgt)

August

 
 

Nützliche Links:

 

Webinar – Boost Your ABAP®

 

Vielen Dank für Ihre Teilnahme an unserem Webinar!

 

Unterlagen/Links zum Webinar „Boost Your ABAP – Tipps & Tricks für performance-optimierte Programmierung“

Unser nächstes Webinar

Wichtige Links aus dem Themengebiet „Skills“:

 

Wichtige Links aus dem Themengebiet „Optimize“:

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® – Das gibt’s ja nicht!

Ich wollte schon länger einmal über ein paar seltsame Dinge in ABAP schreiben. Es gibt nämlich ein paar Sachen in ABAP bei denen man sich einfach nur wundert. Na dann, fangen wir mal an:

BSEG, MARA oder DMBTR

Wer kennt sie nicht, die berühmten SAP ECC Tabellen BSEG oder MARA. Auch die Felder DMBTR oder GSBER sind sicher jedem bekannt.

Aber warum gibt es eigentlich solche komischen Kürzel, haben die Entwickler hier einfach ein paar Buchstabenwürfel verwendet? Natürlich nicht, das sind ganz einfach Relikte
aus R/2. Übrigens, DMBTR steht für „Deutsche Mark Betrag“!dmbtr

In R/2 waren nur 4stellige Tabellennamen und 5stellige Feldnamen erlaubt. SAP hat zwar damals mit R/3 eine völlig neue Technologie geliefert, aber viele ABAP Codes, Tabellen und Prozesse wurden einfach 1:1 übernommen. Und bis dato hat sich bei SAP offensichtlich niemand getraut hier einzugreifen.

Das älteste Programm das ich in einem aktuellen ECC gefunden habe, weißt Kommentare aus dem Jahr 1989 auf!

Bin schon jetzt gespannt, ob wir die Tabellen in S/4 HANA wiederfinden.

 

FOR ALL ENTRIES

Manche ABAP Entwickler schwören auf den FOR ALL ENTRIES Zusatz, manche verteufeln ihn. Ich bin da gespalten denn eigentlich mag ich das Zeug überhaupt nicht, aber andererseits komme auch ich manchmal nicht darum herum.

Aber was ich wirklich – sagen wir mal bescheiden – finde ist, wie ein SELECT mit FOR ALL ENTRIES reagiert, wenn die FOR ALL ENTRIES-Tabelle leer ist. Es werden einfach alle sonstigen Selektionsbedingungen komplett ignoriert und ein kompletter Tablescan durchgeführt. Ohne ersichtlichen Grund.

Hier ein Auszug aus der SAP Online Original Dokumentation:

Before using an internal table itab after FOR ALL ENTRIES, always check that the internal table is not initial. In an initial internal tables, all rows are read from the database regardless of any further conditions specified after WHERE. This is not usually the required behavior.

Nicht zu vergessen ist, dass FOR ALL ENTRIES auf unterschiedlichen Datenbanken teilweise ganz unterschiedlich performant ist. Es gäbe noch viele weitere Argumente (Bufferung, .. ) FOR ALL ENTRIES nicht zu verwenden, aber belassen wir es erst einmal dabei.

Man merke sich jedenfalls: Immer die Größe der FOR ALL ENTRIES Tabelle vor dem SELECT überprüfen – oder noch besser, über Alternativen wie JOINs oder Subselects nachdenken.

 

POOL/Cluster Tabellen

Oh, wie ich diese POOL und CLUSTER Tabellen liebe. Von der Technologie her betrachtet meiner Meinung nach einfach ein ziemlicher Schwachsinn. – Aber auch für diese Technologie gibt es einen triftigen Grund: Wie oben erwähnt waren in R/2 Tabellen nur max. 4stellig. Irgendwann ist SAP dann mit der 4stellen Limitierung einfach an Grenzen gestoßen und hat daher versucht hinter einer Tabelle mehrere Tabellen abzubilden. Das war die Geburt der POOL/CLUSTER Tabellen!

Aber es gibt Hilfe! Wenn wir dann einmal alle auf SAP Hana umstellen bekommen die POOL/CLUSTER Tabellen nach so vielen Jahren endlich ihren verdienten Ruhestand.

Es wäre aber nicht SAP wenn sie für den Vorgang nicht auch einen Namen gefunden hätte: „Depooling/Declustering“.

 

ABAP Open SQL und SQL92

SAP hat mit den aktuellen NetWeaver Releases 7.40 SP5, SP8 und SP12 bzw. NetWeaver 7.50 ein paar wichtige Erweiterungen in das ABAP Open SQL aufgenommen und nähert sich so nach und nach dem Standard SQL92. Manche ABAP Entwickler sind deswegen (SQL Expressions, CDS Views, … ) in heller „Juhu!“ Aufregung!

Liebe Entwickler, bitte vergesst nicht – das 92 hinter SQL Steht für das Jahr! Im Jahr 1992 wurde der Standard definiert. Diese jetzt aufgenommenen Erweiterungen werden von allen namhaften Datenbanken bereits seit Jahrzehnten unterstützt.

Ich meine, eine Erweiterung von ABAP Open SQL war seit Jahren längst überfällig!

 

TCURX

In der TCURX ist gecustomized, wie die Dezimalstelle von Währungen in einem SAP zu interpretieren sind. Wieso das?

Geboren wurde die Tabelle noch im R/2, als auch noch Währungen wie die italienische Lira existiert haben. Die Lira waren teilweise so „groß“ dass die Betragsfelder im R/2 nicht mehr ausgereicht hätten. Also hat man kurzerhand die Kommastellen laut Datenbank außer Kraft gesetzt und dafür die Tabelle TCURX erschaffen. Erst wenn eine Währung nicht in der TCURX enthalten ist, gelten für die Währung die 2 Nachkommastellen.

Im Bereich von Schnittstellen ist das immer wieder ein extra Aufwand – nur um die Betragfelder hin und her zu konvertieren. Beispielswiese für YEN.

Ob man hier nicht irgendwann einmal eine besser Lösung hätte finden können?

 

Jetzt also doch, CODE PUSH DOWN

Jahrelang hat SAP ihren Kunden und uns Entwickler gesagt, DB Nahe Operationen (EXEC SQL, DB Hints, … ) nur in begründeten Fällen und mit Vorsicht zu verwenden. Man verliere so die Unabhängigkeit zur Datenbank oder hat natürlich einen Adaptierungsaufwand wenn gleiches Coding mit verschiedenen Backend-Datenbanken laufen soll.

Nun, da SAP jetzt mit SAP Hana ja eine eigene tolle Datenbank hat, sieht die Sache natürlich etwas anders aus. Jetzt empfiehlt SAP sogar direkter auf der Datenbank „operieren“ um deren Vorteile auch wirklich nutzen zu können. Das Modewort dafür ist „Code Push Down“. Aus ABAP Sicht werden darunter die CDS Views, die AMDB Prozeduren und die SQL Expressions verstanden. Auf der SAP Hana ist darunter z.B. SQL Script zu verstehen.

Nicht falsch verstehen, ich bin ein großer Fan von SAP Hana. Die ist einfach – sorry für den Ausdruck – Sauschnell!

Ich find es halt einfach nur interessant.

 

ABAP® 7.02 New Features – Neue Stringfunktionen

SAP hat mit SAP NetWeaver 7.02 im ABAP Stack einige neue, interessante Stringfunktionen hinzugefügt. Die neuen Funktionen ersetzen einerseits bestehende ABAP Kommandos, andererseits liefern die Funktionen teilweise völlig neue Funktionalitäten. Nachfolgend gehe ich auf die einzelnen Stringfunktionen näher ein und zeige anhand von Beispielen die Anwendung der Funktionen.

cmax/cmin – Zeichenartige Extremwertfunktion

Mit den neuen Extremwertfunktionen cmax bzw. cmin können bis zu 9 zeichenartige Argumente verglichen werden und man erhält die größte oder das kleinste der übergebenen Zeichen als Ergebnis. Verglichen werden die Zeichen auf Basis der verwendeten Codepage von links nach rechts.

Beispiele:

Ergebnis: AAAD

Ergebnis: AZAB

Ergebnis: AAAB

Ergebnis: 0AAC

condense – Verdichtungsfunktion

Die Zeichenkettenfunktion condense verdichtet den Inhalt einer Zeichenkette. Im Gegensatz zum ABAP Kommando bietet die Funktion darüber hinaus jedoch noch einige weitere Möglichkeiten. Beispielsweise können mit der Funktion auch führende oder endende Zeichen entfernt werden.

Nachfolgendes Beispiel entfernt die führenden und endenden X und verdichtet die X zwischen abc und def auf ein X:

Ergebnis: abcXdef

concat_lines_of – Verkettungsfunktion

Diese Funktion verkettet die Zeilen einer internen Tabelle in eine Zeichenkette. Mit dem Zusatz sep kann ein Separator als Trenner zwischen den Zeilen eingefügt werden. Mit dem folgenden Beispiel werden alle Zeilen der Tabelle TAB in einen String, getrennt durch einen Strichpunkt verkettet:

escape – Fluchtsymbolfunktion

Die Funktion escape ermöglicht das regelbasierte Ersetzen eines Strings durch Fluchtsymbole. Die möglichen Regeln sind in cl_abap_format als Konstanten definiert.

Ergebnis:

insert – Einfügefunktion

Diese Funktion ermöglicht das Einfügen einer Zeichenkette an der ersten oder einer bliebigen Stelle einer anderen Zeichenkette. Nachfolgend ein Beispiel mit dem an der bestehenden Zeichenkette an einer spezifischen Stelle eine andere Zeichenkette eingefügt wird. Nach Ausführen der folgenden Zeilen enthält l_string den Wert ‘News in ABAP‘.

match – Abgleichfunktion

Die Funktion match durchsucht einen Text nach einer bestimmten Regex-Übereinstimmung und liefert die gefundene Teilmenge zurück. Groß-/Kleinschreibung wird standardmäßig berücksichtigt, kann jedoch übersteuert werden. Für weitere Informationen zu Regex in SAP bitte die SAP Online Dokumentation verwenden.

repeat – Wiederholfunktion

Hier wird eine Zeichenkette zurückgegeben, welche den Inhalt einer anderen Zeichenkette beliebig oft wiederholt. Mir fällt aktuell keine sinnvolle Anwendung ein, aber hier jedenfalls ein Beispiel, welches die Zeichenkette ‘ABC‘ 5-mal wiederholt und in das Feld l_string stellt:

replace – Ersetzungsfunktion

Mit replace wird ein Teilbereich einer Zeichenkette durch eine Übergebene Zeichenkette ersetzt. Einerseits besteht die Möglichkeit den Teilbereich über eine Offset- bzw. Längenangabe oder über ein Regex zu ermitteln.

Beispiele:

Ergebnis: ‘ABAP xISx GOOD‘

Ergebnis: ‘ABAPISGOOD‘

reverse – Umdrehfunktion

Auch diese Funktion klingt zwar sehr interessant, aber in meinem bisherigen ABAP Leben hab ich so eine Funktion noch nicht vermisst. Trotzdem hier kurz ein Beispiel, welches als Ergebnis den Inhalt einer Zeichenkette komplett umdreht:

Ergebnis: ABAP

Für ältere SAP Systeme existiert der Funktionbaustein STRING_REVERSE welcher den gleichen Zweck erfüllt.

shift_left/shift_right – Verschiebefunktion

Diese neuen Funktionen ersetzen im Prinzip das Kommando SHIFT bieten aber mit dem SUB-Zusatz (Substring) eine zusätzliche Funktion.

Beispiele:

Ergebnis: ‘CD‘

Ergebnis: ‘CDAB‘

Ergebnis: ‘CD‘

substring, substring_… – Teilfeldfunktion

Mit Hilfe dieser neuen Funktionen kann aus einer übergebenen Zeichenkette ein Teilfeld ermittelt werden. Ein wesentlicher Vorteil dieser neuen Funktion liegt darin, dass hier auch Regular Expressions verwendet werden können. Nachfolgend Beispiele für alle vorhandenen Substring-Funktionen:

Ergebnis: ‘DEFG‘ – Bei dieser Variante ist es jedoch sinnvoller (und schneller) mit l_result = l_field+3(4) zu arbeiten.

Ergebnis: ‘DEFGH‘

Ergebnis: ‘GH‘

Ergebnis: ‘ABC‘

Ergebnis: ‘ABCDEF‘

to_upper, to_lower, to_mixed, from_mixed – Groß-/Kleinschreibungsfunktionen

Auch hier handelt es sich um Funktionen, die teilweise bestehende Kommandos ersetzen. „to_upper“ und „to_lower“ wandeln die Inhalte einer Zeichenkette in Groß- bzw. Kleinbuchstaben um. Völlig gleiches Ergebnis wie bei dem Kommando TRANSLATE TO UPPER/LOWER CASE.

Neu und interessant sind die beiden Funktionen to_mixed bzw. from_mixed. „to_mixed“ setzt alle Buchstaben ab der 2. Position in Kleinbuchstaben um. „from_mixed“ fügt von links nach rechts ab der 2. Position das erste im Zusatz sep angegebene Zeichen ein. Durch die Zusätze sep, case und min kann auf das Verhalten beider Funktionen Einfluss genommen werden.

Beispiel:

Ergebnis: ‘Cadaxo gmbh‘

translate – Umsetzfunktion

Auch hier wieder eine Funktion, die ähnlich zum bekannten ABAP Kommando TRANSLATE … USING … ist. Die Funktion liefert eine Zeichenkette zurück, bei der die Zeichen, die in FROM vorkommen durch das Zeichen ersetzt werden, welche in TO an der gleichen Stelle wie in FROM vorkommen. (Sorry für den verwirrenden Satz, einfach ein paar Mal durchlesen, dann wird’s klarer J )

Beispiel:

Ergebnis: ‘YBZD‘

distance – Ähnlichkeitsfunktion

Diese Funktion ist sehr interessant. Sie gibt den Editierabstand (Levenshtein-Distanz) zweier Zeichenketten zurück. Das ist die minimale Anzahl von Einfüge-, Lösch- oder Ersetzungsvorgängen, die notwendig sind, um die eine Zeichenkette in die andere Zeichenkette zu überführen. Mit dem Zusatz max kann ein Wert angegeben werden, der die Berechnung abbricht, sobald die Anzahl der Änderungsvorgänge größer wird. Die Verwendung der Funktion könnte z. B. bei Doublettenprüfungen interessant sein.

Beispiele:

Ergebnis: 2 (Ein „C“ und ein Leerzeichen müssen eingefügt werden)

Ergebnis: 4 (Alle Zeichen müssen ausgetauscht werden)