ABAP - Regeln für Datendefinitionen
Für die Inline Deklaration von Variablen gibt es noch spezielle Regeln, auf die man achten sollte. Dies wollen wir dir in diesem Artikel etwas näher bringen.
Inhaltsverzeichnis
Wie im letzten Artikel beschrieben ist die Definition von Datentypen und Variablen nun etwas einfacher und übersichtlicher geworden. Für die einfachen Zuweisungen funktioniert dies auch in allen Fällen, vor allem dann, wenn es einen Returning Parameter gibt.
Ein Returning Parameter gibt immer eine Variable, Struktur oder Tabelle zurück und ist eindeutig definiert. Deshalb kann man das Ergebnis der Rückgabe direkt in einer neu definierten Variable speichern.
" Erzeugung für Returning Parameter
DATA(ld_erg) = lo_obj->get_data( ).
" Erzeugung Funktion
DATA(ld_cnt) = LINES( lt_t001 ).
Zur Erklärung:
- Im ersten Beispiel wird die Methode get_data des Objekts lo_obj aufgerufen, die ein Ergebnis als Returning Parameter zurückgibt.
- Im zweiten Beispiel wird die Anzahl der Zeilen der Tabelle lt_t001 ermittelt und als Variable im Programm verfügbar gemacht.
Hinweis: Als eindeutig definiert gilt auch ein Returning Parameter vom Typ REF TO DATA, was für generische Rückgaben sehr gut geignet ist.
Methoden
Neben den Returning Parametern können auch Exportparameter von Methoden zur Laufzeit im Programm definiert werden. Sollte eine Methode sehr viele Exportparameter zur Verfügung stellen, dann können diese schnell zur Laufzeit beim Aufruf der Methode erzeugt werden, was viel Übersicht schafft.
" Methodenaufruf
lo_obj->get_parameter(
EXPORTING
id_key = ld_key
id_name = 'Beispiel Text'
IMPORTING
et_data = DATA(lt_data)
et_address = DATA(lt_address)
et_num = DATA(lt_num)
es_header = DATA(ls_head)
ed_count = DATA(ld_cnt)
).
Normalerweise müssten in diesem Fall nun 5 Variablen im Kopf der Methode oder des Forms angelegt werden, die die Werte dann aufnehmen, dies fällt aber nun weg.
Funktionsbausteine
Bei Funktionsbausteinen funktioniert diese "schnelle" Funktion leider nicht. Returning Parameter gibt es bei Funktionsbausteinen nicht, mit Changing Parameter klappt es nicht und Exporting Parameter müssen im aufrufenden Programm definiert werden. Auch für die Parameter die einen eindeutigen Typ haben, klappt die Inline Deklaration nicht.
Dies hat zwei Gründe:
- Der Compiler würde sich beschweren, wenn nicht eindeutig typisierte Datentypen in der Schnittstelle vorhanden sind
- RFC-Bausteine müssen im System nicht unbedingt bekannt sein, dadurch sind auch die verwendeten Datentypen nicht bekannt
Trick 17
Damit die Logik aber dennoch für BAPIs bzw. Funktionsbausteine funktioniert, kann man diese auch in einer Methode einbetten, vor allem wenn man diesen BAPI-Baustein dann öfter braucht. Damit ist auch eine Inline Deklaration der Variablen möglich, vor allem da BAPIs meist recht umfangreiche Rückgabestrukturen besitzen.
Du merkst also, auch für dieses Problem gibt es eine Lösung, auch wenn sie nicht in jedem Fall eingesetzte werden sollte, sondern nur dann, wenn es sich auch lohnt.
Zusammenfassung
Du hast also gelernt das es noch zusätzliche spezielle Regeln gibt bei der Verwendung von Funktionsbausteinen und Methoden, diese aber nicht so kompliziert und leicht umzusetzen sind.