News in ABAP, Teil 2

Feature | 13. Februar 2008 von Andreas Blumenthal, Horst Keller, Chris Swanepoel 0

SAP hat mit SAP NetWeaver 7.1 neue und innovative Technologien ausgeliefert und hierbei auch Anregungen und Anforderungen von ABAP-Entwicklern umgesetzt, um vorhandene und bewährte Funktionalität zu verbessern.

Interne Tabellen mit Sekundärschlüsseln

In ABAP erfüllen interne Tabellen die Funktion von Arrays. Sie werden häufig dazu verwendet, aus der Datenbank bereitgestellte Daten im Hauptspeicher des Applikationsservers zu verarbeiten. Jede interne Tabelle hat einen festen Typ, der die Tabellenart – STANDARD, SORTED oder HASHED – und einen Tabellenschlüssel umfasst.

Bisher konnten Entwickler als Tabellenschlüssel nur einen einzigen Primärschlüssel (UNIQUE oder NON-UNIQUE) definieren, um den Tabellenzugriff zu optimieren. Diese Einschränkung war performancebewussten Entwicklern schon lange ein Dorn im Auge. Denn wenn der Zugriff auf die Daten über Informationen erfolgen muss, die nicht Bestandteil des Primärschlüssels sind, ermöglicht der Primärschlüssel keinen effizienten Zugriff.

Die Frage, wie sich am besten auf vorhandene Daten zugreifen lässt, beschäftigt die Informatiker seit langem. Datenbankmanagementsysteme beispielsweise lösen die Fragestellung längst mit Hilfe von Sekundärindizes. Vereinfacht ausgedrückt stellt ein solcher Index einen Weg dar, andere Informationen als die des Primärschlüssels für den effizienten Zugriff auf die Daten zu verwenden.

Dementsprechend steht ein solches Hilfsmittel auch schon lange für interne Tabellen auf der Wunschliste der ABAP-Entwickler. Kein Wunder also, dass kreative Köpfe hier teils schon selbst komplizierte Konstrukte implementiert haben, um Sekundärindizes für interne Tabellen zu simulieren. Ab sofort unterstützt ABAP Sekundärindizes für interne Tabellen auch direkt. Sie werden als Sekundärschlüssel bezeichnet.

Neben dem Primärschlüssel können bis zu 15 Sekundärschlüssel für alle Arten von internen Tabellen definiert werden. Sekundärschlüssel können den Typ SORTED oder HASHED haben. Sortierte Sekundärschlüssel können UNIQUE oder NON-UNIQUE sein, Hash-Sekundärschlüssel sind immer UNIQUE. Werden doppelte oder in Konflikt stehende Sekundärschlüssel zu einer Tabelle definiert, erfolgt eine Syntaxwarnung.

Beim Zugriff auf die Tabellendaten muss der zu verwendende Sekundärschlüssel explizit angegeben werden, entweder statisch oder dynamisch. Anderenfalls wird der Primärschlüssel verwendet. Das ist ein wichtiger Unterschied im Vergleich zu Sekundärindizes von Datenbanktabellen: Beim Zugriff auf die Datensätze gibt es dort keine garantierte Reihenfolge, solange nicht ORDER BY verwendet wird. Ein Datenbank-Optimizer wählt denjenigen Sekundärindex aus, der am besten für den Zugriff geeignet ist.

Diese Vorgehensweise ist bei internen Tabellen nicht möglich: In ABAP würde die automatische Auswahl des am besten geeigneten Sekundärschlüssels die Reihenfolge ändern, in der die Daten abgerufen werden. Das würde die Semantik von Sekundärschlüsseln unvorhersehbar machen und hätte unerwünschte Nebenwirkungen auf ABAP-Anwendungen.

Daher gibt es in der Sprache ABAP keinen Optimizer für Sekundärschlüssel. Um den Entwicklern dennoch eine Hilfe zu bieten, erhalten sie bei der Kompilierung eine Syntaxwarnung, wenn ein besser geeigneter Schlüssel identifiziert wurde.

Sekundärschlüssel sollen die Performance bei der Verarbeitung interner Tabellen verbessern. Allerdings ist Vorsicht geboten: Falsche Verwendung kann zu einem erheblich gesteigerten Speicherbedarf führen. Häufige Updates der Sekundärschlüssel können sich sogar negativ auf die Laufzeit-Performance auswirken. Eindeutige Sekundärschlüssel werden über einen so genannten “Direct Update” immer sofort angelegt beziehungsweise aktualisiert. Nicht eindeutige Sekundärschlüssel hingegen werden mit einem so genannten “Lazy Update” nur dann erstellt oder aktualisiert, wenn der Schlüssel verwendet wird.

Optimal lassen sich Sekundärschlüssel bei großen, internen Tabellen verwenden, die nur einmal angelegt und selten verändert werden. Nicht eindeutige Sekundärschlüssel sind die beste Wahl, wenn es in erster Linie auf den schnellen Lesezugriff ankommt. Eindeutige Sekundärschlüssel dienen häufig dazu, die Eindeutigkeit von Zeileninhalten als semantische Integritätsbedingung automatisch zu erzwingen.

Zeichenkettenverarbeitung

Zeichenkettenverarbeitung und Zeichenkettenerzeugung werden auch für Unternehmensanwendungen immer wichtiger, etwa im Zusammenhang mit der Generierung von Quelltext oder XML-Dokumenten.

ABAP hat auch schon vor SAP NetWeaver 7.1 Sprachelemente für die Zeichenkettenverarbeitung zur Verfügung gestellt: einige spezielle Zeichenkettenanweisungen, einige spezielle Zeichenkettenoperatoren (als Bestandteil logischer Ausdrücke) sowie reguläre Ausdrücke. Allerdings war es immer etwas mühsam, Zeichenketten damit zu verarbeiten – vergleichbar mit der Verwendung der Anweisung ADD anstelle von arithmetischen Ausdrücken in Berechnungen.

Vielfach fehlte – schmerzlich vermisst – sogar jegliche Unterstützung für die Arbeit mit dem Datentyp STRING. Insbesondere konnte die Anweisung WRITE TO nicht für Zielfelder vom Datentyp STRING verwendet werden. WRITE TO ist historisch aus der WRITE-Anweisung der klassischen Listverarbeitung entstanden und dient dazu, Inhalte beliebigen Datentyps in eine Zeichenkette zu konvertieren.

Mit SAP NetWeaver 7.1 hat sich das grundlegend geändert. Die neu eingeführten Zeichenkettenausdrücke und eine große Menge von Zeichenkettenfunktionen haben die Zeichenkettenverarbeitung in ABAP revolutioniert.

Zeichenkettenausdrücke bestehen aus:
•Zeichenkettenoperatoren, insbesondere dem neuen Verkettungsoperator &&,
•Zeichenketten-Templates, die literalen Text und mit Formatierungsoptionen versehene eingebettete Ausdrücke in einen String umwandeln.

Übergabe eines Strings an eine Methode

Die Abbildung oben zeigt ein Beispiel für die Verwendung von Zeichenkettenausdrücken: Die Verknüpfung des Textsymbols TEXT-SYM mit zwei Zeichenketten-Templates bildet die Eingabe eines Methodenaufrufs. Die Zeichenketten-Templates, eingeschlossen in senkrechte Striche, bestehen aus beliebigem literalen Text und eingebetteten Ausdrücken, die zwischen geschweiften Klammern definiert sind. Die eingebetteten Ausdrücke setzen sich aus regulärer ABAP-Syntax und Formatierungs-Optionen zusammen.

Im ersten Zeichenketten-Template wird die Summe zweier numerischer Rückgabeparameter als Geldbetrag formatiert. Wenn das Textsymbol TEXT-SYM auf den Text “amount” verweist, die Variable CUR den Wert “USD” enthält, die Methode GET_AMOUNT den Wert -100 zurückliefert und die Methode GET_TAX den Wert -16, dann hat der Parameter, der an die Ausgabemethode LIST->OUTPUT übergeben wird, den Wert “amount: -116.00 USD“. Jedem ABAP-Entwickler dürfte klar sein, welcher Programmieraufwand früher nötig war, um Derartiges zu bewirken.

Zeichenkettenfunktionen

Neben Zeichenkettenausdrücken bietet ABAP in SAP NetWeaver 7.1 auch zahlreiche neue Zeichenkettenfunktionen. Sie ersetzen im Allgemeinen die älteren Anweisungen für die Zeichenkettenverarbeitung. Zeichenkettenfunktionen lassen sich an verschiedenen Operandenpositionen verwenden, insbesondere auch in Verbindung mit Zeichenkettenausdrücken.

Die Funktion TO_UPPER beispielsweise konvertiert Kleinbuchstaben in Großbuchstaben. Im Beispiel wird das Ergebnis dann in einem logischen Ausdruck verwendet, in dem die konvertierte Zeichenkette mit einer Konstante verglichen wird.

Die Zeichenkettenfunktion MATCHES wiederum ist eine Prädikatfunktion, die einen Wahrheitswert zurückliefert. Prädikatfunktionen lassen sich direkt als logische Ausdrücke verwenden. Als weitere Neuerung akzeptiert die eingebaute Zeichenkettenfunktion MATCHES mehr als ein Argument. Sie prüft, ob die Zeichenkette, die im ersten Argument übergeben wird, zu dem regulären Ausdruck passt, der an den Formalparameter REGEX übergeben wird.

Die neuen Zeichenkettenausdrücke und die vielen neuen Zeichenkettenfunktionen, von denen hier nur einige wenige vorgestellt wurden, vereinfachen künftig die Zeichenkettenverarbeitung in ABAP-Programmen. Sie machen diese stabiler, leichter lesbar und einfacher zu warten.

ABAP Debugger

Mit Sicherheit hat jeder Entwickler schon einmal davon geträumt, ABAP-Software automatisch zu debuggen oder die Ausführung eines ABAP-Programms schrittweise zu durchlaufen, während der Debugger den irrelevanten Code ausblendet. Diese und weitere Funktionalität bietet nun der ABAP Debugger in SAP NetWeaver 7.1.

Die neue Scripting-Engine im ABAP Debugger ermöglicht es Entwicklern, den Debugger mit einem Skript zu steuern, das während der Ausführung einer Anwendung angestoßen wird. Solche Debugger-Skripte lassen sich entweder manuell starten oder aber automatisch bei jedem Einzelschritt des Debuggers oder wenn gewisse Break- oder Watchpoints erreicht sind. Um den Debugger zu steuern, müssen die Entwickler nicht einmal eine neue Programmiersprache lernen: Debugger-Skripte werden einfach in ABAP geschrieben und können mit Hilfe der Debugger-API auf dieselben Informationen über das zu analysierende Programm (Debuggee) zugreifen wie der Debugger selbst.

Mit den Skripten können Programmdaten geändert, der Programmablauf beeinflusst, der Speicherverbrauch untersucht, Breakpoints gesetzt oder Informationen in eine Trace-Datei geschrieben werden. Da die Scripting-Engine in die ABAP Workbench integriert ist, lassen sich Debugger-Skripte und die zugehörigen Trigger genauso transportieren wie andere Repository-Objekte.

Mit der neuen Funktion des MyZone-Debugging legen Entwickler ihren “Interessenbereich” fest, indem sie Software-Schichten definieren. Wenn sie ein Programm durchgehen, können sie dann von Schicht zu Schicht springen. So müssen sie nicht mehr den gesamten Quelltext in Einzelschritten durchlaufen, bis sie diejenige Zeile erreichen, die sie interessiert. Die Schichten lassen sich auf der Basis von Paketen, Programmen, Klassen oder Funktionsbausteinen definieren.

Entwickler können den Debugger auch so einstellen, dass das Programm anhält, wenn eine bestimmte Schicht erreicht oder verlassen wird. Schichten lassen sich auch gänzlich ausblenden – der Debugger hält das Programm dann nur in den sichtbaren Bereichen an. Sowohl Debugger-Scripting als auch MyZone-Debugging sind somit neue Errungenschaften, welche die Produktivität von ABAP-Entwicklern erheblich steigern werden.

ABAP hieß einst ABAP/4. Diese Namensgebung wies ABAP explizit als Programmiersprache der vierten Generation aus, die Konzepte für eine spezielle Aufgabenstellung bereitstellt – im Falle von SAP die Entwicklung von Geschäftsanwendungen. Die Kennzeichnung “/4” ist aus dem Namen verschwunden. Das Ziel von ABAP ist jedoch geblieben: Kunden eine geeignete Plattform zu bieten, um robuste und leistungsfähige Geschäftsanwendungen auf einfache Weise zu erstellen.

Leave a Reply