ABAP Inline-Deklarationen
Siehe Kategorie:Neues ABAP.
Siehe ABAP.
Siehe Neues ABAP (ab Release 7.40).
Die Inline-Deklarationen sind in ABAP möglich seit der ABAP-Version 7.40 SP2.
Eine Variable muss nicht mehr mit "Data" deklariert werden vor dem Füllen, sondern kann sich während der Laufzeit ergeben durch die Zuweisung der Quellvariable zur Zielvariablen.
Die Syntax der Variablen ergibt sich durch die Zuweisung aus der Quellvariablen.
Data(variable) = ...
Abwägung Verwendung Inline-Deklarationen
Vorteile Inline-Deklarationen
- Man muss die Variable nicht mehr explizit deklarieren und man spart sich so eine Codingzeile.
- Der Typ der Zielvariable muss nicht bekannt sein.
- Man kann zusätzliche Felder in den Select aufnehmen und die Zielvariable/Struktur passt sich automatisch den Quellfeldern an.
- Durch die Inline-Deklaration sieht man explizit, wo die Variable das erste mal im Code verwendet wird. Andernfalls gibt es einen Syntaxerror, falls die Variable vor dem Füllen angesprochen wird. Die inline deklarierte Variable muss auch nicht zwingend während der Laufzeit durchlaufen werden, wenn z. B. das Coding von einer If-Bedingung abhängt.
- Ein Doppelklick auf die inline deklarierte Variable zeigt gleich die Verwendung an.
Nachteile Inline-Deklaration
- Die Variablen in einer Programmeinheit stehen nicht gesammelt zusammen am Anfang der Programmeinheit. Das kann den Gesamtüberblick über die gefüllten Variablen erschweren.
- Einige ABAP-Entwickler, die keine Erfahrung mit Inline-Deklarationen haben, werden Probleme beim Verständnis von inline deklarierten Variblen haben.
- Manchmal kann man den Typ einer inline deklarierten Variablen nicht sofort im Coding sehen, da z. B. der Typ sich vom einem Returningparameter einer Methode abgeleitet hat. Man muss dann in die Methode reingehen, um dort dort den Typ nachzuschauen.
Fazit
- In aller Regel sollte man Inline deklarierte Variablen verwenden.
- Man spart sich eine Codingzeile durch die Verwendung einer Inline-Deklaration.
- Es wird durch die Stelle der Inline-Deklaration ersichtlich, wo eine Variable das erste mal verwendet wird.
- Verwendet man selber Inline-Deklarationen, fällt es leichter das Coding zu verstehen, was mit Inline-Deklarationen geschrieben wurde.
- Wenn eine Inline deklarierte Variable sich erst aus dem Typ eines Parameters einer aufgerufen Methode ergibt, empfinde ich es als störend. Es sei denn der Parameter ist für jeden SAP-Entwickler sofort erkennbar wie KUNNR oder MATNR.
Anwendungen
Variable deklarieren
Data(lv_variable) = 'Test'.
oder gleich mit Übertragung von einer anderen Variablen.
Data(lt_itab) = ct_itab.
Select
Für ABAP ist es in den den meisten Fällen nicht relevant, ob der "INTO" vor dem "FROM" steht, vor dem "WHERE" oder nach dem "WHERE".
Diese Reihenfolge geht immer:
Select .. from .. into .. where ..
Select into table
Die Select-Felder müssen mit einem Komma getrennt werden. Die Inline-Deklaration wird mit "@data(<itab>)" durchgeführt.
SELECT
vbak~vbeln,
vbak~erdat
INTO TABLE @data(lt_vbak)
FROM vbak
INNER JOIN vbap
ON vbap~vbeln = vbak~vbeln.
Select into Felder
Ein anderes Beispiel. Die anderen Where-Felder als Variablen müssen mit einem @ vorangestellt abgefragt werden.
SELECT SINGLE fsh_season_year, fsh_season INTO (@DATA(lv_season_year), @DATA(lv_season)) FROM ekpo WHERE ebeln = @ls_lips-vgbel.
oder
Select single mara~mstae, mara~mstav from vbak inner join vbap on vbap~vbeln = vbak~vbeln inner join mara on mara~matnr = vbap~matnr into (@data(lv_mstae), @data(lv_mstav)) where vbak~vbeln = @ls_nast-objky and ( mara~mstae <> @space or mara~mstav <> @space ).
Loop in Struktur/Workingarea
LOOP AT itab INTO DATA(wa).
...
ENDLOOP.
Empfangende Referenzvariablen
DATA(ixml) = cl_ixml=>create( ).
Field-Symbols
Elegant ist auch die Arbeit mit Field-Symbolen.
ASSIGNING … TO FIELD-SYMBOL(<fs>).
LOOP AT itab ASSIGNING FIELD-SYMBOL(<line>).
…
ENDLOOP.
READ TABLE itab ASSIGNING FIELD-SYMBOL(<line>) …
Methode
Dieses Vorgehen die Typisierung von der Methode zu übernehmen hat jedoch den Nachteil, dass man die Typisierung der Variablen erst in der Methode findet und daher aus meiner Sicht dann das Coding etwas schwer zu lesen ist als nötig.
Zumindest sollte man dann den Typ als Kommentar in der Zeile einfügen.
CALL METHOD klasse=>methode
EXPORTING
iv_importvar = lv_importvar
IMPORTING
es_exportvar = data(ls_export).
oder
objekt->methode( importing var1 = Data(lv_var1) importing var2 = Data(lv_var2) ).
oder in einem Projektbeispiel wird der Tabellentyp TDT_MSR_RFC_RO_PARTY_COMV vom Returnparameter übernommen.
DATA(lt_partn) = fill_ro_partner( ). "type TDT_MSR_RFC_RO_PARTY_COMV
Instanz Klasse (Objekt)
Klassisch würde man eine Instanz einer Klasse erzeugen.
Data: lo_purchase_order TYPE REF TO /ttg/cl_mm_purchase_order. CREATE OBJECT lo_purchase_order.
Über den Befehl "new" kann man in einem Schritt eine Klasse instanziieren. In diesem Fall ist der Klassenname "z_cl_mm_purchase_order".
Data(lo_purchase_order) = new z_cl_mm_purchase_order( ).
Siehe http://zevolving.com/2014/08/abap-740-new-operator-instantiate-objects/.
Keine Anwendung Inline-Deklaration bei Funktionsbausteinen und Form-Routinen
Die Inline-Deklarationen können nicht verwendet werden bei Form-Routinen und Funktionsbausteinen.
Es wäre denkbar Coding in der Form zu haben
CALL FUNCTION 'SD_ADV_RETURNS_CREATE EXPORTING ... IMPORTING ev_salesdocument = data(lv_vbeln) et_return = data(lt_return).
aber dann wird ein Syntaxfehler ausgeworfen "Eine Inline-Deklaration "DATA(LV_VBELN)" ist an dieser Stelle nicht möglich.".
Verwendungsnachweis
- Man kann genauso auf die Zielvariable doppelt klicken, um einen Verwendungsnachweis auszulösen.
Web-Links
- SAP-Hilfe: Inline-Deklaration
- Blog Horst Keller: Inline-Declarations (EN)
- http://zevolving.com/2014/08/abap-740-new-operator-instantiate-objects/
Literatur
- ABAP Objects: Das neue umfassende Handbuch zu Konzepten, Sprachelementen und Werkzeugen in ABAP OO, 2016, von Felix Roth, Kap. 7.5