ABAP Tutorial Teil 4: Grundlagen zu Funktionsbausteinen

Ein Funktionsbaustein ist rückblickend betrachtet ein altes Relikt aus einer Zeit in der prozedurale Programmierung die einzige praktische Variante war welche programmatisch umgesetzt werden konnte. Objektorientierte Programmierung existierte fast nur in der Theorie, dies war zu damaligen Zeiten allerdings auch in Ordnung denn das Vorhalten von Objekten im Speicher ist unter Umständen Ressourcenlastiger ausgefallen als letztlich gewohnt und von der Hardware gefordert. Und teuer war dies ja ebenfalls.

Also kamen speziell im SAP-Umfeld erstmals die Funktionsbausteine zum Einsatz. Der Vorteil: Objekte musste nicht explizit erstellt werden sondern man konnte aus den Strukturen des Data Dictionary schon vorhandene Variablen und Konstellationen aus diversen Daten übergeben. Gewissermaßen Objekte also. Allerdings ohne Vererbung, Polyphormie oder ähnliche Funktionen aus der Objektorientierung. Jedoch war es dadurch möglich zumindest einigermaßen wiederverwendbare Unterprogramme zu erstellen welche mit ziemlich vielen Situationen umgehen können und konnten.

Da Funktionsbausteine oder Function Modules jedoch keineswegs mit ABAP Objects interagieren können (und wenn dann nur eingeschränkt) ist es wichtig zu wissen, dass Funktionsbausteine mit bspw. WebDynpro for ABAP nicht laufen werden und auch nicht laufen können, zumindest nicht direkt.

Soviel zur Geschichte und der grundlegenden Funktionsweise von Funktionsbausteinen. Aber es geht natürlich noch weiter. Ein Funktionsbaustein wurde klassisch über die Transaktion SE37 erstellt. Ich vermute im Anschluss daran wurde das Packaging System eingeführt und daraufhin war es möglich in der Transaktion SE80 (welche nur eine geschickte Zusammenführung von Views ist) unter den Aspekten der Paketierung und besseren Verwaltbarkeit von Code zu einem Thema oder einer Aufgabenstellung zusammenzufassen. So bleibt zum Anfang des Tutorials die Wahl wie man denn seinen Funktionsbaustein erstellen möchte. Ich würde die SE80 empfehlen. Auch unter dem Gesichtspunkt dass man hier ohnehin ständig zwischen allen möglichen ABAP Klassen, Funktionen, Views, WebDynpro Components und Applikationen, Tabellen und Elementen aus dem Data Dictionary recht unproblematisch wechseln und arbeiten kann.

Ein Rechtsklick auf die Paketstruktur tut es also schon: „Erstellen ->Funktionsgruppen -> Funktionsbaustein“. Im Verlaufe des nun folgenden Assistenten vergeben wir einen Namen aus dem Kundennamensraum (also Zetwas oder Yetwas), fügen eine passende Beschreibung hinzu und geben zusätzlich Transportauftrag an und eventuell noch den Entwicklerschlüssel (falls dies noch nicht geschehen ist, kontaktiert Euren Basis-Administrator).

Das Einstiegsbild welches nun folgt sollte der Quellcode-Reiter sein. Wenn dies nicht der Fall ist, ist es nicht unbedingt schlimm, denn wir möchten für den Anfang ohnehin an anderer Stelle unter kommen, nämlich bei den Parameterübergaben, also den Export, Import, Change und Tables Parametern.

Zum Verständnis: Der Funktionsbaustein gibt Export und Import von sich selbst ausgesehen an. Export nimmt also Parameter auf welche IN den Funktionsbaustein gehen und Import gibt Parameter an welche AUS dem Funktionsbaustein gehen. Man hat also die Richtungen invertiert, am einfachsten merkt man sich diese Essenz durch „Import = Export“, welches den Umstand auch am besten beschreibt um die grundlegende Funktionalität eines Funktionsbausteins zu verstehen.

Somit geben wir für unser Beispiel also im Export-Reiter zwei Typisierte INT4 Variablen an (iv_zahl und iv_zahl2)  und als Import eine weitere INT4 Variable (ev_ergebnis). Um mit dem Funktionsbaustein auch etwas machen zu können geben wir im Quellcode des Bausteins nun folgendes an:

Ev_ergebnis = iv_zahl + iv_zahl2.

Nach Speichern und Aktivieren des Bausteins wollen wir selbstverständlich die Funktionalität auch Testen. Keine Angst wir brauchen hier keine Daten zu deklarieren. Alle Daten die wir hätten deklarieren müssen sind dem Funktionsbaustein schon bekannt durch die Angabe der Importing und Exporting-Parameter. Dies könnte man entweder im Debugger bewerkstelligen oder direkt per Ausführen des Funktionsbausteins. Der Debugger bekommt jedoch noch sein eigenen Kapitel, darum entscheiden wir uns für das Ausführen des Funktionsbausteins und geben im nächsten Dynpro-Bildschirm zwei beliebige Zahlen ein und klicken auf Ausführen um das Ergebnis entgegen zu nehmen.

Wenn nun die Summe beider Zahlen erscheint haben wir es geschafft, der erste Funktionsbaustein ist gebaut. Um den Funktionsbaustein nun auch in einem Report oder anderen Function Modules oder sonstigen ABAP Code fähigen Transaktionen zu nutzen reicht es nun für folgenden Code (oder man verwendet einen Assistenten):

CALL FUNCTION Z_FIRST_FUBA
      Exporting
               iv_zahl = 9
               iv_zahl2 = 17
      Importing
              ev_ergebnis = lv_ergebnisvar.

Was ist beim aufrufen also zu beachten? Die Parameter müssen typgerecht versorgt werden, andernfalls gibt es einen Syntaxfehler. Sprich die Daten die ein und aus dem Funktionsbaustein gehen, müssen den entsprechenden Datentyp aufweisen und im günstigsten Falle befüllt werden, weil wir sonst mit NULL-Pointern zu kämpfen haben.

Weiter geht es in der nächsten Woche mit einem weiteren Kapitel aus der Welt der internen Tabellen.

Veröffentlicht in: ABAP Schlagworte: , , , , , , , , ,

Hinterlasse eine Antwort

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

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>