Beispiele zur Verwendung von ABAP® CONCATENATE

Der ABAP Befehl CONCATENATE wird sehr oft benötigt. In diesem kurzen Blog zeige ich anhand einiger Beispiele wie Zeichenketten im ABAP „concatendated“ werden können. In den Beispielen finden sich auch die „moderneren“ Formen mit && bzw. der Stringfunktion concat_lines_of. Ansonsten ist, denke ich. das Codingbeispiel eigentlich selbsterklärend und bedarf keiner weiteren Worte.

SAP® Entwickler 2.0

Lange Zeit hat sich die Welt eines ABAP Entwicklers nicht wesentlich geändert. Da wurde mal ein Report erstellt, dort ein Funktionsbaustein. Manchmal wurde ein Userexit implementiert und selten auch einmal eine ganze Dynpro Transaktion. Ja es war sogar lange Zeit möglich die objektorientierte Welt mit geringem Aufwand zu umschiffen.

Die Zeiten sind nun definitiv vorbei!

Gerade in den letzten Jahren hat die Programmiersprache ABAP eine enorme Weiterentwicklung erlebt. Insbesondere mit ABAP 7.40 und ABAP 7.50 wurden eine ganze Reihe moderner Konzepte aus anderen Programmiersprachen in ABAP übernommen. Ergänzend dazu stehen neue Tools, Frameworks und Entwicklungsumgebungen einem SAP Entwickler zur Verfügung.

S/4 HANA Programmiermodell

Bei der SAP TechEd 2016 in Las Vegas wurde erstmals vom neuen S/4 HANA Programmiermodell gesprochen. Das Programmiermodell besteht aus mehren Schichten und vereint die gängigen Technologien eines SAP Entwicklers:

Modernes ABAP

Wie weiter oben erwähnt, wurde und wird ABAP durch die SAP kontinuierlich weiterentwickelt. Es gibt eine große Anzahl von Büchern, Kursen, Blogeinträgen, … die sich mit modernen ABAP Themen beschäftigen, deshalb erspare ich mir hier eine exakte Aufzählung. Nachfolgend eine Auflistung von Themen die für mich unter modernes ABAP fallen und jeder Entwickler im SAP kennen sollte:

  • Objektorientiertes Design
  • Open SQL Expressions
  • String Expressions
  • Table Expressions
  • Regular Expressions
  • Class Based Exceptions
  • Enhancement Framework
  • CDS Views
  • ABAP Shared Objects
  • ABAP Push Channels, ABAP Message Channels

Unabhängig von ABAP selber sollte sich ein Entwickler zumindest noch mit folgenden Themen beschäftigen:

  • Clean Code
  • Unit Tests & TDD
  • Design Patterns

Weiterführende Informationen

Title Bereich Details
ABAP 7.50 Releasenotes Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-abap-7-50-releaseabhaengige-aenderungen/
Clean Code in ABAP Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-clean-code-abap/
Boost Your ABAP Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-boost-abap/
SDN Community ABAP SDN http://www.sap.com/community/topic/abap.html
SAP Press SAP Press Bücher https://www.sap-press.com/programming

ABAP Development Tools (ADT) & SAP Web IDE

ADT (=ABAP for Eclipse) ist SAP’s state-of-the-art IDE für ABAP. Obwohl das ADT nicht wirklich neu ist, entwickelt die überwiegende Mehrheit der ABAP Entwickler nach wie vor ausschließlich in der SE80.

Und das, obwohl Entwicklungen mit ADT meist einfacher und schneller umgesetzt werden können. ADT bietet in der Handhabung generell viele Vorteile, aber ein wichtiges Featureset sind die Refactoring Funktionen, welche gerade im Bereich der agilen Software Entwicklung wesentlicher Bestandteil sind.

Einzelne Entwicklungsobjekte wie z.B. die CDS Views können bisher ausschließlich mit ADT bearbeitet werden. Andere Objekte wie z.B. BOPF Objekte bieten in ADT wesentlich intuitivere Modellierungsmöglichkeiten.

Ein professioneller ABAP Entwickler sollte sowohl in der ABAP Workbench (SE80) als auch im ADT zu Hause sein, um je nach Aufgabenstellung das passende Entwicklungstool zu wählen.

Für die Erstellung von SAPUI5 bzw. Fiori Anwendungen hat SAP ergänzend zu den ABAP Development Tools die cloudbasierte SAP Web IDE zur Verfügung gestellt.

Weiterführende Informationen

Title Bereich Details
Webinar – ABAP Entwicklung in Eclipse & SAP Web IDE Einführung Cadaxo Webinar http://www.cadaxo.com/uncategorized/webinar-abap-entwicklung-eclipse-sap-web-ide-einfuehrung/
ABAP Development User Guide help.sap.com http://help.sap.com/saphelp_nw75/helpdata/en/4e/c0ca886e391014adc9fffe4e204223/frameset.htm
ABAP Development Tools Eclipse help.sap.com http://help.sap.com/saphelp_nw74/helpdata/en/a3/314a7fd9384ce8a40eff2d3b144628/frameset.htm
ABAP Development Tools Tutorials SDN Blog https://blogs.sap.com/2012/09/18/abap-development-tools-tutorials-learn-how-to-use-abap-in-eclipse/
Get Started with the ABAP Development Tools SDN Blog https://blogs.sap.com/2012/06/19/get-started-with-the-abap-development-tools-for-sap-netweaver/
What is SAP Web IDE developer.sap.com http://www.sap.com/developer/topics/sap-webide.html
ABAP to the Future SAP Press Book ISBN 978-1-4932-1411-2
ABAP-Entwicklung in Eclipse SAP Press Book ISBN 978-3-8362-3040-7

ABAP Units & Test Driven Development

Als Entwickler ist es uns natürlich ein Anliegen, fehlerfreie Software zu erstellen. Traditionell geschehen Unit Tests in SAP oft mit eigens erstellten Testprogrammen oder einer Testausführung von Klassen/Methoden bzw. Funktionsbausteinen. Also völlig unstrukturiert, undokumentiert und schwer reproduzierbar.

Mit den ABAP Units steht jedoch auch im ABAP ein Test-Framework zur automatisierten Ausführung und Analyse von Unit Tests zur Verfügung.

Der Einsatz von ABAP Unit Tests reduziert die Hemmschwelle eines Entwicklers produktives Coding zu optimieren. Eine Testausführung würde ihm sofort direktes Feedback geben ob trotz der Optimierung das Coding weiterhin einwandfrei funktioniert.

ABAP Units verfügen über eine enge Integration in andere Tools wie z.B. dem Code Inspector bzw. ATC.

Die Steigerungsform von Unit Tests wäre Test Driven Development. Vom Ansatz her ist TDD genial, in der ABAP Community wird darüber kontrovers diskutiert.

Weiterführende Informationen

Title Bereich Details
TDD mit ABAP Units Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-tdd-mit-abap-units/
ABAP Unit help.sap.com http://help.sap.com/abapdocu_750/de/index.htm?file=ABENabap_unit.htm

Business Object Processing Framework (SAP BOPF)

Aktuell (noch) relativ unbekannt ist das sogenannte SAP Business Object Processing Framework. SAP BOPF ist ein auf ABAP basierendes Framework zum Modellieren und Entwickeln von Geschäftsobjekten. Bisher gab es in SAP Systemen (Ausnahme SAP CRM mit BOL/GENIL) nichts Ähnliches, alles musste „zu Fuß“ ausprogrammiert werden.

SAP BOPF nimmt einem Entwickler zeitraubende und meist auch langweilige Implementierungsaufgaben ab und ermöglicht einem Entwickler sich auf die wesentlichen Businessanforderungen zu konzentrieren.

Die größten Vorteile von SAP BOPF wären:

  • Klare Trennung von UI und Business Logik
  • Ermöglicht verteilte Entwicklung durch mehrere Entwickler
  • Beschleunigt den Entwicklungsprozess enorm
  • Bereits viele Verwender (Gateway, FPM, BRFplus, … ) vorhanden
  • Einfache Integration in Eigentwicklungen

Weiterführende Informationen

Title Bereich Details
SAP BOPF Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-sap-bopf/
BOPF Modelling in ADT SDN Blog https://blogs.sap.com/2014/05/09/bopf-modelling-in-eclipse
ABAP to the Future SAP Press Book ISBN 978-1-4932-1411-2

Fiori/SAPUI5 & Floorplan Manager/Web Dynpro for ABAP

User Interfaces haben bei der SAP historisch einen schlechten Ruf. Lange Zeit mussten sich Anwender mit veralteten SAP Gui Anwendungen abmühen. Längst bietet SAP alternative Technologien für die Realisierung moderner User Interfaces.

SAPUI5 basiert technisch auf etablierten Webstandards (Javascript, HTML5, …) und liefert die technische Grundlage für moderne Fiori Anwendungen. SAPUI5 / Fiori ist DIE UI Strategie der SAP, sprich zukünftige Oberflächen in den SAP Systemen (OnPremise oder Cloud) werden – Stand Jänner 2017 – in Form von SAPUI5 / Fiori realisiert.

Web Dynpro for ABAP (WDA) ist (zumindest war) bereits seit vielen Jahren quasi der Standard für die Erstellung von transaktionalen Anwendungen in einem SAP System. Um die Realisierung von Web Dynpro Anwendungen zu beschleunigen und zu standardisieren wurde der darauf aufbauende Floorplan Manager (FPM) entwickelt. Web Dynpro for ABAP bzw. der Floorplan Manager richten sich eher an Power User, an interne Mitarbeiter eines Unternehmens.

Ein professioneller ABAP Entwickler sollte in jedem Fall beide Technologien kennen und einsetzen können.

Weiterführende Informationen

Title Bereich Details
What is SAPUI5 developer.sap.com http://www.sap.com/developer/topics/ui5.html
User Interface Developer developer.sap.com http://www.sap.com/developer/topics/ui-development.html
Web Dynpro ABAP and Floorplan Manager Community developer.sap.com http://www.sap.com/community/topic/web-dynpro-abap-and-floorplan-manager.html
ABAP to the Future SAP Press Book ISBN 978-1-4932-1411-2
SAPUI5 Das umfassende Handbuch SAP Press Book ISBN 978-3-8362-4456-5

SAP Gateway (OData)

Im Jahr 2011 hat SAP SAP Gateway auf den Markt gebracht. SAP Gateway öffnet ABAP Systeme um eine standardisierte und zentralisierte Schnittstelle mit der Außenwelt.

Technisch setzt SAP Gateway auf verbreitete Standards wie REST, Atom und OData wodurch die Kommunikation mit anderen Systemen die ebenfalls diese Standards nutzen denkbar einfach realisiert werden kann. SAPUI5 bzw. Fiori Anwendungen nutzen ebenfalls SAP Gateway für die Kommunikation mit den Backendsystemen.

Weiterführende Informationen

Title Bereich Details
SAP Gateway Community developer.sap.com http://www.sap.com/community/topic/gateway.html
SAP Gateway Developer Guide help.sap.com https://help.sap.com/saphelp_gateway20sp10/helpdata/en/56/d0cc05b564411e841141f68294e29f/content.htm
SAP Gateway und OData SAP Press Book ISBN 978-3-8362-4019-2

CDS Views

Die CDS Views zählen für mich zu den innovativsten ABAP Neuheiten der letzten Jahre. Durch die regelmäßigen Funktionserweiterungen handelt es sich hier nicht mehr nur um eine neue Form von Datenbank Views.

Durch Annotations können CDS Views um weitere technische und semantische Eigenschaften ergänzt werden. So können beispielsweise seit ABAP 7.50 Gateway oder BOPF Objekte generiert werden.

Ebenfalls ab 7.50 können implizite Berechtigungsprüfungen mit der sogenannten Data Control Language (DCL) abgebildet werden.

Weiterführende Informationen

Title Bereich Details
CDS Views help.sap.com http://help.sap.com/abapdocu_750/en/abencds.htm
CDS Annotations 7.50 help.sap.com http://help.sap.com/abapdocu_750/en/abencds_f1_view_entity_annotations.htm
CDS Annotations 7.51 help.sap.com http://help.sap.com/abapdocu_751/en/index.htm?file=abencds_annotations_abap.htm
CDS Views SDN Blog https://blogs.sap.com/2015/07/20/cds-one-model-two-flavors
ABAP to the Future SAP Press Book ISBN 978-1-4932-1411-2

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

ABAP® CDS Access Control mit DCL

SAP hat mit 7.50 (bzw. die Rede war auch manchmal schon mit 7.40 SP10 – kann ich aber aktuell nicht bestätigen) die CDS Views mit der DCL Data Control Language um die Möglichkeit von impliziten Berechtigungsprüfungen in einem CDS View erweitert. Klingt erstmal etwas trocken ist aber ziemlich genial, denn dadurch können nun Datenbankzugriffe auf Basis der Dateninhalte mit einem Authority-Check versehen werden.

Und das Coole ist, dass dies einfach und schnell erledigt ist!

Nehmen wir an, wir haben eine Tabelle mit ein Feld SOURCE in dem auf der Datenbank die Werte 0001, 0002 und Space vorkommen, im konkreten Fall hab ich einfach die BUT000 genommen wo wir genau solche Einträge vorfinden:

cdsdcl1

Die Idee ist nun, dass wir einen CDS View auf die 4 Felder anlegen und über eine PFCG Rolle steuern dass nur Werte mit der SOURCE 0001 gelesen werden.

CDS View

Zuerst legen wir jetzt mit Eclipse einen neuen CDS View mit der DDL (Data Definition Language) an. Mit den Feldern PARTNER, SOURCE, MC_NAME1 und MC_NAME2:

cdsdcl2

Für jene die noch nicht mit Eclipse gearbeitet haben: DDL und DCL für CDS Views können derzeit nur mit Eclipse bearbeitet werden. Ein persönlicher Tipp: Eclipse wird immer wichtiger. Die CDS Views sind der Anfang. Ohne Eclipse keine CDS Views!

ABAP® CDS Views – 6 Schritte zum Verständnis

DDL Annotations

Natürlich gibt es bei einer DDL Beschreibung viele Annotation-Möglichkeiten, im Hinblick auf eine implizite Berechtigungsprüfung ist auf nachfolgende Annotation zu achten:

@AccessControlauthorizationCheck: #CHECK

die Berechtigungsprüfung durch eine DCL Access Control ermöglicht wird. #CHECK ist der Defaultwert (sprich auch ohne Angabe wäre der Wert auf #CHECK gestellt), weiter Eingabemöglichkeiten sind #NOT_REQUIRED und #NOT_ALLOWED.

  • #CHECK – Eine implizite Berechtigungsprüfung wird vorgenommen. Wenn zu dem View keine DCL existiert, kommt es bei der Syntaxprüfung zu einer Warnung.
  • #NOT_REQUIRED – Gleich wie #CHECK, jedoch ohne Warnung bei der Syntaxprüfung
  • #NOT_ALLOWED – Es wird keine Zugriffskontrolle vorgenommen.

Weitere Informationen zu den DDL Annotations sind bitte der SAP Online Dokumentation zu entnehmen.

PFCG Berechtigungsobjekt

Nun müssen wir ein Berechtigungsobjekt wählen oder neu erstellen. Ich hab ein neues Berechtigungsobjekt ZDEMODCL mit 2 Feldern ZBU_SOURCE und ACTVT erstellt. ZBU_SOURCE steht für den 4stelligen Wert in SOURCE. ACTVT verwende ich um die Aktivität 03 (03 = lesen) abzubilden:

cdsdcl3

DCL Rolle

Als Nächstes erstellen wir mit der DCL (Data Control Language) die Berechtigungsprüfung auf den View. Dazu müssen wir wieder nach Eclipse wechseln und ein DCL Objekt anlegen:

cdsdcl4

Dadurch wird eine DCL Rolle mit dem Namen ZCDSDCLDEMO_NAME definiert. In einer CDS Rolle können eine oder mehrere CDS Entitäten mit CDS Zugriffskontrollen versehen werden. Im konkreten Beispiel wird die CDS Entität ZCDSDEMOENT verwendet. Dies geschieht durch die Angabe GRANT SELECT ON ZCDSDEMOENT.

Nach der Angabe der CDS View muss eine WHERE-Klausel mit der Zugriffsbedingung folgen. Dies kann wiederum als Literalen (z.B. SOURCE = ‘0001‘) bestehen oder wie im obigen Beispiel aus einer PFCG-Bedingung.

PFCG-Bedingung

Eine PFCG-Bedingung wird mit ASPECT PFCG_AUTH ( <authorization_object>, [ field ], [ field ], …. ) definiert. Die Felder der PFCG Bedingung können gemappte Felder aus der WHERE-Klausel oder Literale wie z.B. ‘03‘ sein.

DCL Annotations

Mit der Annotation @MappingRole: true wird die Rolle gegen alle User automatisch geprüft. Weitere Werte sind derzeit hier zum aktuellen Zeitpunkt noch nicht möglich.

Die Annotation @EndUserText.label: ‘zrole_demo‘ ist der übersetzbare Kurztext der Rolle.

Berechtigungszuordnung

Wenn wir die obigen Schritte beendet haben, jedoch noch keine Berechtigungsvergabe an einen User vorgenommen haben, wird dieser bei einem DB Zugriff auf den CDS View – wie erhofft – keinerlei Daten zurückbekommen.

Erst wenn wir dem User eine Berechtigung für das Berechtigungsobjekt Z_DCL_DEMO erteilen werden die erlaubten Daten bei SELECT-Zugriffen zurückgeliefert.

cdsdcl5

SELECT Zugriff auf CDS Entity und CDS DB View

Bei allen ABAP SELECT Zugriffen auf die CDS Entität erfolgt nun die implizite Berechtigungsprüfung. Hingegen bei der obsoleten Möglichkeit des Zugriffs auf den CDS DB View erfolgt diese implizite Prüfung nicht. Aus dem Grund sollten die CDS DB Views auch nicht mehr verwendet werden und wurden von SAP auch als obsolet gekennzeichnet.

Nachfolgend ein Auswertungsergebnis auf ein die CDS Entität (links) und den CDS DB View (rechts). Wie erwartet wurde die Ergebnismenge der CDS Entität implizit auf die SOURCE 0001 gefiltert.

cdsdcl6

Troubleshooting & Testing

Manchmal schlagen sich Änderungen in den DCL Objekten nicht „durch“. Für DCL Analysen kann die Transaktion SACMDCLS verwendet werden. Dort sieht man detaillierte Informationen zu einem DCL Objekt und kann ggf. DCL Artefakte neu generieren.

Weiters ist auch noch die Transaktion SACMSEL interessant. Mit der kann der DCL Zugriff getestet werten.

Weiterführende Informationen

Webinar – ABAP® 7.40 SP5/SP8 Releaseabhängige Änderungen – Unterlagen, Links, …

Unterlagen/Links zum Webinar ABAP 7.40 SP5 SP8 Releaseinformationen

Unsere nächsten Webinar Termine

SAP Online Dokumenation

Videos (Teched, … )

Blogs

Behind the scenes

Hier ein Bild von unserem Webinar. Man beachte, worauf wir die Webcam in der Mitte platziert haben!

20160129_111931

 

 

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.

 

Auswertungsergebnisse mit Crystal Reports im SQL Cockpit visualisieren

SQL Cockpit – Analyse mit Crystal Reports

Ab SAP NetWeaver 7.02 besteht die Möglichkeit ALV Ergebnislisten auch im Crystal Report Layout anzuzeigen. Selbstverständlich unterstützt auch die ALV Anzeige des SQL Cockpits diese weitere Darstellungsform.

Um eine SQL Cockpit Ergebnisliste als Crystal Reports anzuzeigen, muss lediglich die View-Darstellung auf Crystal Reports geändert werden. Die Funktion steht jedoch nur dann zur Verfügung, wenn in Ihrem System die Anzeige von ALV Listen im Crystal Report Layout erlaubt ist.

Screenshot - Crystal Reports in SQL Cockpit


Screenshot - Crystal Reports in SQL Cockpit

Die in Crystal Reports angezeigten Auswertungen können mit der Vollversion von Crystal Reports weiterbearbeitet werden. Beispielsweise kann mit der Vollversion von Crystal Reports die Spaltenformatierung angepasst werden, Texte können ergänzt oder geändert werden oder für eine bessere Visualisierung können Charts eingebunden werden.

Voraussetzungen

Zum Anzeigen von ALV Listen im Crystal Reports Layout müssen notwendige Komponenten lokal installiert sein. Es handelt sich dabei um den Crystal Reports Viewer und um den ALV Connector. Nähere Informationen dazu sind im SAP Hinweis 135044 zu finden.Im Implementation Guide muss die Anzeige von ALV Listen im Crystal Report Layout aktiviert werden. Die Einstellung kann auch direkt mit dem Report SALV_GZT_CUSTOMIZING vorgenommen werden.

CL_ABAP_GZIP – Komprimieren von Strings oder binären Inhalten in ABAP®

Allgemeines

Die Komprimierung von großen Dateien, die so genannte Datenkompression bzw. Datenkomprimierung, durch entsprechende Programme, ist im täglichen Gebrauch nicht mehr wegzudenken. Die Datenkomprimierung reduziert nicht nur wertvolle Speicherplätze, eine geringere Datenmenge beim Austausch zweier Systeme wirkt sich positiv auf die Übertragungszeit aus.

Komprimieren/Dekomprimieren in SAP

SAP hat mit dem Web AS 6.20 die Komprimierung innerhalb von ABAP™ verfügbar gemacht. In diesem CADAXO Development Tipp werde ich einen kurzen Überblick liefern.

Überblick CL_ABAP_GZIP / CL_ABAP_ZIP

Zwei Klassen stehen zur Verfügung. Die Klasse CL_ABAP_GZIP wird zum Komprimieren/Dekomprimieren von Texten, Strings oder binären Inhalten verwendet. Darüber hinaus gib es die Klasse CL_ABAP_ZIP mit welcher mehrere Objekte zu einem ZIP Ordner zusammengefasst werden können. Auf diese Klasse wird in diesem Development Tipp nicht weiter eingegangen.

Klasse CL_ABAP_GZIP

Zum Komprimieren von einzelnen Texten, Strings oder binären Inhalten kann die Klasse CL_ABAP_GZIP verwendet werden. Die Klasse bietet vier Methoden an:

  • COMPRESS_TEXT Komprimierung von Text in GZIP-Format
  • DECOMPRESS_TEXT Dekomprimierung von gezippten Textdaten
  • COMPRESS_BINARY Komprimierung von Binärdaten in GZIP-Format
  • DECOMPRESS_BINARY Dekomprimierung von gezippten Binärdaten

Methode COMPRESS_TEXT – Komprimierung von Texten bzw. Strings

Diese Methode wird verwendet, um einen Text/Textstring zu komprimieren. Der zu zippende Text muss in einem CSEQUENCE Typ vorliegen. Zur Erinnerung, bei CSEQUENCE handelt es sich um einen generischen, textartigen ABAP Typ wie STRING oder C.

Der Text wird durch den einzigen Pflichtparameter Parameter TEXT_IN übergeben. Als Ergebnis erhält man zwei Parameter nämlich GZIP_OUT und GZIP_OUT_LEN. Wie vermutet, wird mit GZIP_OUT der komprimierte Inhalt und in GZIP_OUT_LEN die Länge zurückgeliefert. Für GZIP_OUT ist ein XSEQUENCE Typ (X oder XSTRING) zu verwenden.

Nachfolgend ein Beispiel für eine Komprimierung eines Textes:

Die Methode bietet noch weitere optionale Eingabeparameter an:

  • TEXT_IN_LEN Wenn keine Textlänge angegeben ist, wird der gesamte übergebene Text komprimiert, ansonsten erfolgt die Komprimierung auf den Teilbereich des Textes.
  • COMPRESS_LEVEL Durch die Angabe des Komprimierungslevels kann die Größe und Geschwindigkeit der Komprimierung gesteuert werden. 1 bedeutet höchste Geschwindigkeit und 9 beste Komprimierung. Wenn keine Angabe erfolgt, wird 6 als Default-Wert gesetzt. 0 bedeutet keine Komprimierung.
  • CONVERSION Die Eingabedaten können vor der Komprimierung noch in eine andere Codepage konvertiert werden. Hier kann entweder die gewünschte Codepage, UTF-8, NONE oder DEFAULT angegeben werden. Bei DEFAULT wird in Unicode Systemen auf UTF-8 umgewandelt, in nicht Unicode Systemen erfolgt keine Konvertierung. DEFAULT ist als Default-Wert gesetzt.

Methode DECOMPRESS_TEXT – Dekomprimierung von Texten bzw. Strings

Um einen gezippten Text wieder in eine CSEQUENCE zu dekomprimieren, ist die Methode DECOMPRESS_TEXT zu verwenden. Die Methode verfügt über die gleichen Parameter wie COMPRESS_TEXT deshalb hier nur kurz die Parameter zusammengefasst:

  • GZIP_IN Hier wird der XSEQUENCE Typ mit dem gezippten Wert übergeben.
  • GZIP_IN_LEN Optionale Angabe der Länge.
  • CONVERSION Mit DEFAULT wird in einem Unicode-System auf UTF-8 umgewandelt, in nicht UNICODE-Systemen auf die Systemcodepage. Weitere mögliche Angabe NONE und eine gewünschte Codepage.
  • TEXT_OUT Liefert den dekomprimierten Text.
  • TEXT_OUT_LEN enthält die Länge des dekomprimierten Textes.

Beispiel:

Methoden COMPRESS_BINARY und DECOMPRESS_BINARY – Binärdaten

Die Komprimierung bzw. Dekomprimierung von Binärdaten unterscheidet sich nicht wesentlich von der Vorgehensweise mit Texten. Zum Komprimieren wird die Methode COMPRESS_BINARYverwendet. Die einzigen beide Unterschiede betreffen den Typ des zu komprimierenden/dekomprimierenden Feldes und das Fehlen der optionalen Parameter zur Codepage Konvertierung. Zur Dekomprimierung ist die Methode DECOMPRESS_BINARY zu verwenden.

Als Typ des zu komprimierenden/dekomprimierenden Feldes wird ein XSEQUENCE, also entweder ein Feld vom Typ X oder XSTRING, benötigt.

Anwendungsfälle

Wo ist nun eine Anwendung der Klasse denkbar und sinnvoll?

Beispielsweise werden in einer Anwendung Langtexte/Notizen erfasst oder Dokumente/Bilder hochgeladen. Komprimiert können diese wesentlich platzsparender in SAP Tabellen abgelegt werden. In Programmen verwendete XML Strings können auf diese Weise platzsparend im System abgelegt werden. Bei einer RFC Kommunikation zwischen zwei SAP Systemen bietet sich diese Technik an, um bei großen Datenmengen die Netzwerkbelastung wesentlich zu reduzieren und den Datenaustausch somit zu beschleunigen.