Seit SAP NetWeaver 7.40 (kurz: SAP NW 7.40) wurde mit ABAP Version 7.02 eine Vielzahl neuer Konventionen eingefügt, um nicht nur die Programmiersprache leistungsfähiger zu machen, sondern auch an andere bekannte Programmiersprachen wie Java anzupassen. Vor allem wurden die neuen Funktionalitäten zur Unterstützung von HANA 2012 eingeführt.
Das erste Kapitel dieses Blogs beschäftigt sich dabei mit den neuen Konventionen bei den Datentypen.
Viele der Neuerungen vereinfachen die objektorientierte Programmierung. Beispielsweise fällt es ab SAP ABAP 7.40 wesentlich einfacher, einen objektorientierten Programmierstyle zu nutzen.
Teil 1: Umgang mit Datentypen seit SAP NW 7.40
Zuvor möchte ich anmerken, dass dieser ich diesen Blogartikel dabei als grobe Übersicht erstellt habe und keinesfalls als vollständiges Nachschlagewerk. Darüber hinaus ist es jedoch möglich, dass ich ihn in Zukunft noch erweitern werde.
Des weiteren wird dieser Artikel einige Codebeispiele nennen, die die Nutzung von neuen Konventionen aus SAP NW 7.40 verdeutlichen sollen.
Der in diesem Blogartikel genannte Code ist nur als Beispiel gedacht und nutzt entsprechend vereinfachte und unvollständige Syntax. Er ist daher nicht zum Ausführen geeignet. Optionale Ausdrücke, sowie Datenzuweisungen finden hier nicht immer Beachtung.
Für weiterführende Informationen bietet sich die SAP Schlüsselwort Dokumentation an:
https://help.sap.com/doc/abapdocu_740_index_htm/7.40/de-DE/index.htm?file=abaplet.htm
Definition: Objekt / Variable à ‚prä’_{info}_obj Typ à {info}_obj_type Zuweisung à {info}_obj_value |
Inhaltsübersicht des Blogs
- Daten deklarieren
- Feld Symbole
- Objekte erstellen
- Value Operator
- Konstruktoren mit bedingter Zuweisung mit den COND und SWITCH Operatoren
- COND funktioniert dabei wie eine IF Bedingung mit verschiedenen Bedingungsvariablen.
- SWITCH funktioniert wie eine CASE Bedingung über eine Bedingungsvariable.
- Konvertierung von Daten
- CONV Operator
- CAST Operator
- Neue String Operationen
- Templates
- Chaining Operator
- Neue eingebaute String Funktionen
- to_mixed
- from_mixed
- reverse
- distance
- Concatenate
- Quellen und weitere Informationen
Daten deklarieren
Die neuen Möglichkeiten der Datendeklaration wurden weitgehend überarbeitet, um mehr bekannteren Programmiersprachen zu entsprechen. Folglich dürften sich Programmierende, die schon Erfahrung in Programmiersprachen wie C, C# oder Java haben, schnell in die neue Syntax einfinden können.
Da dabei eine direkte Instanziierung möglich ist, muss kein Datentyp explizit angegeben werden. Dieser lässt sich automatisch aus dem angegebenen Inhalt ermitteln.
Codebeispiel:
Standard Schreibweise:
DATA lv_var TYPE var_typ.
lv_var = var_value.
Mit direkter Zuweisung:
DATA lv_var TYPE var_typ VALUE var_value.
Neue Schreibweise mit impliziter Typermittlung:
DATA(lv_var) = var_value.
Feld Symbole
Feldsymbole wurden in ABAP eingeführt, um als abstraktes Objekt anstelle einer Variablen genutzt werden zu können. Mit ihnen kann man wie mit einer Variablen arbeiten und ihnen Werte zuweisen. Anders als echte Variablen, sind sie jedoch nur dann aktiv, wenn ihnen ein Wert oder eine Variable zugewiesen wird. Dabei können sie auch als Strukturtyp verwendet werden.
Feldsymbole sind zur Laufzeit generierte Objekte, welche anstelle einer Variablen genutzt werden können. Dabei können ihnen Variablen, oder direkt Werte zugewiesen werden. Sie können und werden auch häufig als Strukturtyp verwendet.
Codebeispiel:
Direkte Zuweisung:
FIELD-SYMBOLS <fieldsymbol> TYPE fieldsymbol_type.
Zuweisung einer Variablen:
ASSIGN lv_var TO <fieldsymbol>.
Das Feldsymbol kann nach der Nutzung auch direkt wieder aufgelöst werden, damit es keinen weiteren Speicher mehr belegt:
UNASSIGN <fieldsymbol>.
Objekte erstellen
Für die Erstellung von Objekten wurde stark an den Standard von anderen Programmiersprachen wie Java und C# angepasst. So ist es möglich, mit dem New Operator neue Objekte zu erstellen.
Codebeispiel (für reference_obj_type muss noch ein Datentyp definiert oder ein vorhandener verwendet werden):
Alte Schreibweise:
FIELD-SYMBOLS <fieldsymbol> TYPE data.
DATA lr_reference_obj TYPE REF TO data.
CREATE DATA lr_reference_obj TYPE reference_obj_type.
ASSIGN lr_reference_obj->* TO <fieldsymbol>.
<fieldsymbol> = reference_obj_value.
Neue Schreibweise:
DATA lr_reference_obj TYPE REF TO data.
lr_reference_obj = NEW reference_obj_type(reference_obj_value).
Value Operator
Der Value Operator ist ein Constructor, der es ermöglicht, die Werte einer Struktur mit einer Zuweisung zu befüllen. Dabei ist es auch möglich, mehrere Value Zuweisungen zu schachteln. Mit # wird der Typ automatisch bestimmt. Andernfalls kann er explizit angegeben werden.
Codebeispiel:
DATA(ls_obj) = VALUE { obj_type / # }(
lv_1 = value_1
lv_2 = value_2
ls_3 = VALUE obj_type( lv_4 = value_4
lv_5 = value_5 ) ).
Konstruktoren mit bedingter Zuweisung mit den COND und SWITCH Operatoren in SAP NW 7.40
Bei den COND und SWITCH Operatoren handelt es sich um Konstruktoren, welche zur Laufzeit nach einer Bedingung bestimmte Werte einem Objekt zuweisen können.
Die ELSE Bedingung kann für eine Fehlermeldung wie THROW CATCH verwendet werden.
COND
COND funktioniert dabei wie eine IF Bedingung mit verschiedenen Bedingungsvariablen.
Codebeispiel für COND (IF):
DATA(lo_obj) = COND obj_type(
WHEN lv_condition1_var = condition_value THEN
obj_value_1
WHEN condition2_var = condition_value THEN
obj_value_2
ELSE
obj_value_3 ).
SWITCH
Switch funktioniert wie eine CASE Bedingung über eine Bedingungsvariable.
Codebeispiel für SWITCH (CASE):
DATA(lo_obj) = SWITCH obj_type(
lv_condition_obj
WHEN lv_value_int THEN
obj_value_1
WHEN lv_value_int THEN
obj_value_2
ELSE
obj_value_3 ).
Konvertierung von Daten in SAP NW 7.40
Für die Konvertierung von Daten stehen verschiedene neue Constructor Operatoren zur Verfügung. Diese vereinfachen es den Programmierenden wesentlich, übersichtlichen und kompakten Code zu erzeugen, der zudem einfacher zu erstellen und zu warten ist. Hier werden die Operatoren ( CONV, CAST) kurz vorgestellt.
CONV Operator
Zur Konvertierung von Datentypen, steht der CONV Operator zur Verfügung. Er ermöglicht es, Datentypen direkt zu konvertieren, ohne dabei auf komplizierte Hilfsobjekte zugreifen zu müssen.
Alte Schreibweise (Beispiel ist relative abstract):
DATA lv_source_var TYPE source_var_type LENGTH source_var_length.
DATA lv_help_var TYPE help_var_type.
DATA lv_target_var TYPE target_var_type.
…
lv_help_var = lv_source_var.
lv_target_var = cl_abap_codepage=>convert_to( source = lv_help_var ).
Neue Schreibweise:
DATA lv_source_var TYPE source_var_type.
DATA lv_target_var TYPE target_var_type.
…
lv_target_var = CONV { var_type / # } ( lv_source_var ).
Zudem eignet sich der Operator auch zum Konvertieren von zugewiesenen Variablen, wie bei mathematischen Operationen:
( int_value_smaller / int_value_larger ) à 0
(Ea es sich um ein Integer handelt, wird der Ausdruck zu 0 abgerundet)
CONV decfloat34( int_value_smaller / int_value_larger )à > 0
(Ausdruck wird zum korrekten Berechnen in ein Float konvertiert)
CAST Operator
Der Cast Operator ermöglicht es, Typen in einen kleineren und größeren Datentyp umzuwandeln. Ebendies ist vor allem zum Referenzieren verschiedener Datentypen wertvoll. Zudem stellt ein Cast zu einem größeren Datentyp (Upcast) dabei kein Problem dar. Jedoch kann es beim Cast zu einem kleineren Datentyp (Downcast), zu Problemen kommen, da so Daten verloren gehen. Dabei wird der Cast mit dem Cast Operator ?= durchgeführt. Er wird dafür anstelle eines = Operators verwendet, muss aber zusätzlich typensicher gemacht werden, da es unter Umständen zu Konvertierungsfehlern kommen kann.
Codebeispiel:
Neue Schreibweise:
DATA lv_source_var TYPE source_var_type.
DATA lv_target_var TYPE target_var_type.
…
TRY.
lv_target_var ?= CAST { var_type / # } ( lv_source_var ).
CATCH.
*Konvertierungsfehler*
ENDTRY.
Neue String Operationen
Dank der neuen String Operationen, ist der Umgang mit Strings wesentlich einfacher und übersichtlicher geworden.
Templates
Bei Templates handelt es sich um eine neue Form Strings dynamisch zuzuweisen. Dabei ist es möglich, per Operator Datenelemente und Text direkt einem String Element zu übergeben. Der | Operator ermöglicht es dabei, einfache Datenelemente zuzuweisen. Mit ‚ lässt sich hingegen ein Text zuweisen.
Codebeispiele:
Template Operator (|) für String kompatible Variablen:
DATA(lv_datenelement_string) = | lv_einfaches_datenelement_obj |.
Veranschaulichendes Beispiel für Template Operator (|):
DATA(lv_ergebnis_string) = | Heute ist der { sy-datum } ! |.
Apostroph Operator (‚) für Text:
DATA(lv_text_string) = ‚Diokles String Text.‘.
Chaining Operator
Mit dem Chaining Operator && können 2 oder mehrere Strings zu einem größeren String zusammengefügt werden.
Codebeispiel:
DATA(lv_string) = ‚String Text 1‘ && ‚String Text 2‘ && ‚String Text 3‘.
Mit Variablen:
DATA(lv_target_string) = lv_string_1 && lv_string_2 && lv_string_3.
Neue eingebaute String Funktionen in SAP NW 7.40
Neue eingebaute String Funktionen wurden für neue Operationen eingefügt, um mit Strings komplexere Operationen durchzuführen.
to_mixed
Diese Funktion dient dazu, um einen String von einem Underscore (SAP kompatible Schreibweise), in einen für andere Programmiersprachen wie Java kompatiblen lowerCamelCase zu konvertieren.
Codebeispiel:
DATA(lv_mixed_string) = to_mixed(‚mixed_string_test‘).
WRITE: lv_mixed_string. à mixedStringTest
from_mixed
Mit dieser Funktion kann ein lowerCamelCase in ein Underscore String transformiert werden.
Codebeispiel:
DATA(lv_mixed_string) = from_mixed(‚mixedStringTest‘).
WRITE: lv_mixed_string. à mixed_string_test
reverse
Ermöglicht es, die Zeichenreihenfolge eines Strings zu invertieren.
Codebeispiel:
DATA(lv_reverse_string) = reverse(‚ReverseStringTest‘).
WRITE: lv_reverse_string. à tseTgnirtSesreveR
distance
Gibt die Editierabstand (Levenshtein-Distanz) 2er Strings aus (wie viele Charaktere verändert, hinzugefügt oder gelöscht werden müssen, damit der 1te String dem 2ten entspricht).
Codebeispiel:
DATA(lv_distance_int) = distance( val1 = ‚ungeänderter Text‘ val2 = ‚geänderter Text‘ ).
WRITE: lv_distance_int.
concatenate
Concatenate ermöglicht es Strings zusammenzufügen, dabei jedoch bestimmte Sonderzeichen einzufügen, welche zwischen den einzelnen Strings eingebaut werden.
Codebeispiel:
CONCATENATE lv_string_1 lv_string_2 lv_string_3 INTO lv_target_string SEPARATED BY lv_seperate_string.
Quellen und weitere Informationen
Ähnliche Blogartikel:
Auslesen von Datenbanktabellen in ABAP – Diokles
Informationen über neue Konventionen:
https://www.berater-wiki.de/Neues_ABAP_(ab_Release_7.40)
Informationen über neue Konvention (auf Englisch):
https://blogs.sap.com/2016/03/02/old-and-new-abap-syntax-overview-sheet/
SAP Schlüsselwort Dokumentation: https://help.sap.com/doc/abapdocu_740_index_htm/7.40/de-DE/index.htm?file=abaplet.htm
Keine Kommentare