ABAP Inline-Deklarationen

Aus SAP-Wiki
Zur Navigation springenZur Suche springen


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

Inlinedeklaration3.JPG

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.

Inlinedeklaration1.JPG

Web-Links

Literatur