ABAP - New, Cast, Conv
Bei vielen der neuen Ausdrücke handelt es sich um sogenannte Konstruktor-Ausdrücke. Was das genau für dich heißt und was es dir bringt erfährst du hier in unserem Artikel.
Inhaltsverzeichnis
Konstruktor-Ausdrücke oder auch Inline Funktionen sind Funktionen die in einer Zeile verwendet werden können und auch ein Ergebnis, einen Wert oder ein Objekt zurückgeben. Sie sind das Gegenteil zu den Ein-Zeilen-Ausdrücken aus den Cobol Zeiten, die es noch sehr viele im System gibt.
Nehmen wir als Beispiel eine einfach Datenzuweisung. Diese wurde per Move durchgeführt, war sehr leicht lesbar für jeden. Mit der direkten Zuweisung mit "=" kann man dies aber nun in einer einzigen Zeile ausdrücken, spart viel Tippaufwand und ist ebenso leicht lesbar:
DATA:
ld_one TYPE c LENGTH 10,
ld_two TYPE c LENGTH 10.
" alte Zuweisung
MOVE 'COUNT' TO ld_one.
MOVE ld_one TO ld_two.
" neue Zuweisung
ld_two = ld_one = 'COUNT'.
Inline Funktionen können nun beliebig ineinander geschachtelt werden, natürlich nur da wo es auch Sinn macht, und sind sehr flexibel einsetzbar. Die ersten drei Ausdrücke wollen wir dir heute vorstellen.
New
Der Befehl erzeugt ein Objekt einer Klasse und löst das alte "Create Object" ab. Der Typ der Klasse wird implizit über den Datentyp der Zielvariable abgeleitet oder er wird explizit als Typ bei der Nutzung angegeben. Die zweite Form der Definition spart natürlich noch eine Zeile und zeigt den Vorteil der verknüpften Funktionen.
" implizite Erzeugung
DATA lo_alv TYPE REF TO cl_gui_alv_grid.
lo_alv = NEW #( ... ).
" explizite Erzeugung
DATA(lo_alv) = NEW cl_gui_alv_grid( ... ).
Cast
Die Cast Funktion dient zum Up-/Downcast von Objekten. Bisher wurde es mit einer einfachen Zuweisung über "=" oder der Zuweisung "?=" durchgeführt. Diese Form der Zuweisung war aber nicht immer klar und für einige Entwickler etwas verwirrend. Dafür wurde diese Funktion implementiert, die immer verwendet werden kann und anzeigt, was an dieser Stelle des Codings passiert. Dazu wieder beide Formen der Erzeugung im Vergleich:
DATA:
lo_dock TYPE REF TO cl_gui_docking_container,
lo_cont TYPE REF TO cl_gui_container.
" implizite Erzeugung
lo_cont = CAST #( lo_dock ).
" explizite Erzeugung
DATA(lo_cont) = CAST cl_gui_container( lo_dock ).
Beim zweiten Fall brauchst du die vorherige Definition von lo_cont nicht, da du sie zur Laufzeit erzeugst. Durch den Cast Befehl wird die Anweisung auf den ersten Blick gesehen und der Entwickler weiß, dass hier der Typ des Objekt angepasst wurde.
Conv
Der neue Ausdruck konvertiert einen Quellwert in einen neuen Zielwert mit einem neuen Typen und kann, wie alle anderen neuen Ausdrück, auch verkettet verwendet werden.
Am Nützlichsten ist die Funktion bei der Versorgung von Übergabeparametern, wenn diese einen strikteren Typ verlangen. Dann kannst du die Variable auf den entsprechenden Zieltyp mappen und sparst dir die Anlage einer Zwischenvariable und die Befüllung dieser.
" Konvertierung 12 -> 0012
DATA(ld_num) = CONV numc4( 12 ).
" Verwendung als Parameter
DATA:
ld_name TYPE string VALUE 'ZTEST_JOBNAME',
lt_log TYPE STANDARD TABLE OF tbtc5.
CALL FUNCTION 'BP_JOBLOG_READ'
EXPORTING
jobname = CONV btcjob( ld_name )
TABLES
joblogtbl = lt_log.
Im zweiten Beispiel lesen wir ein Joblog aus dem System aus, haben den Namen des Jobs aber nur in einem String zur Verfügung. Bei einem Aufruf mit diesem Parameter würde das System aber einen Dump erzeugen, da der Übergabeparameter einen anderen Datentyp hat. Mit der Konvertierung auf den richtigen Datentyp, sparen wir uns aber die Anlage einer Zwischenvariable.
Fazit
Mit den ersten neuen Funktionen bekommst du viele kleine Helferlein an die Hand, die dein Entwicklerleben in vielen Punkten unterstützen und schneller machen. Die direkte Erzeugung von neuen Variablen zur Laufzeit spart auch einiges an Code und macht dein Coding viel übersichtlicher.
Quelle:
SAP Dokumentation New
SAP Dokumentation Cast
SAP Dokumentation Conv