ABAP Syntax und Statements für SAP NW 7.40

Thumbnail - Neue ABAP Syntax für SAP NW 7.40

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. So 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

Dieser Blog ist dabei als Übersicht zu verstehen und keinesfalls als vollständiges Nachschlagewerk. Zudem kann er in Zukunft erweitert werden.

Der Blog wird zudem einige Codebeispiele bringen, welche die Nutzung von neuen Konventionen aus SAP NW 7.40 verdeutlichen soll.

Der in diesem Blog benutzte 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 werden hier nicht immer beachtet.

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
(Steht für Variablen/Objektname)  

Typ            à    {info}_obj_type
(Steht für entsprechenden Typen des zugehörigen Objekts)

Zuweisung        à    {info}_obj_value
(Steht für eine der entsprechenden Variablen zugewiesener Wert)

Inhaltsübersicht des Blogs

  • Daten deklarieren
  • Feld Symbole
  • Objekte erstellen
  • Value Operator
  • Konstruktoren mit bedingter Zuweisung mit den COND und SWITCH Operatoren
  1. COND funktioniert dabei wie eine IF Bedingung mit verschiedenen Bedingungsvariablen.
  2. SWITCH funktioniert wie eine CASE Bedingung über eine Bedingungsvariable.
  • Konvertierung von Daten
  1. CONV Operator
  2. CAST Operator
  • Neue String Operationen
  1. Templates
  2. Chaining Operator
  • Neue eingebaute String Funktionen
  1. to_mixed
  2. from_mixed
  3. reverse
  4. distance
  5. Concatenate
  • Quellen und weitere Informationen

Daten deklarieren

Die neuen Möglichkeiten der Datendeklaration wurden weitgehend überarbeitet, um mehr bekannteren Programmiersprachen zu entsprechen. Programmierer, die schon Erfahrung in Programmiersprachen wie C, C# oder Java haben, dürften sich schnell in die neue Syntax einfinden.

Da dabei eine direkte Instanziierung möglich ist, muss kein Datentyp explizit angegeben werden. Dieser kann automatisch aus dem angegebenen Inhalt ermittelt werden.

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 wie mit einer Variablen gearbeitet werden und ihnen Werte zugewiesen werden. Anders als echte Variablen, sind sie jedoch nur wenn ihnen ein Wert oder eine Variable zugewiesen werden aktiv. 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 wird.

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, die es den Programmierer wesentlich vereinfachen, ü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

(da 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, was vor allem zum Referenzieren verschiedener Datentypen wertvoll ist. Ein Cast zu einem größeren Datentyp (Upcast) stellt dabei kein Problem dar. Beim Cast zu einem kleineren Datentyp (Downcast), kann es jedoch zu Problemen kommen, da so Daten verloren gehen. Der Cast wird dabei 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 das Umgehen 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

Cocatenate 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

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

Kategorie:

Tags:

Keine Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.