ABAP Funktionsbausteine

ABAP Funktionsbausteine bauen
ABAP Funktionsbausteine
4.2 Sterne
10 Bewertungen


Dieser Beitrag ist Teil des Kurses ABAP Grundlagen.

In diesem Beitrag stelle ich die Funktionsmodule, oder so genannte Funktionsbausteine, vor. Funktionsbausteine kapseln Funktionalität. Eine bestimmte Funktion kann mehrmals benutzt werden und vom beliebigen Programm aufgerufen werden. Dabei muss eine wiederkehrende Aufgabe nicht immer neu programmiert werden.

Funktionsbausteine finden auch bei der Programmierung von Customer Exit Variablen (kundeneigene Erweiterungen) Verwendung.

Funktionsbausteine werden in Funktionsgruppen abgelegt. Diese dienen als Behälter oder Container für Funktionsbausteine. In der Funktionsgruppe können globale Daten für die Funktionsmodule und Ereignisse definiert werden. Um eine Funktionsgruppe anzulegen, können Sie den Namen der Gruppe im Repository Browser (Transaktion SE80) eingeben und mit ENTER bestätigen.

Funktionsgruppe wird im Repository Browser angelegt

Funktionsgruppe anlegen

Sie werden gefragt ob das Objekt angelegt werden soll. Bestätigen Sie mit Ja und vergeben Sie anschließend einen Namen für die Funktionsgruppe.

Neue Funktionsgruppe wird erstellt

Objekt anlegen

Innerhalb der Funktionsgruppe wollen wir einen Funktionsbaustein anlegen, welches die Detailinformationen zu einem bestimmten Handymodell auslesen soll. Die Details sind in einer Tabelle gespeichert die die folgende Struktur hat.

Datenbanktabelle

Datenbank mit Details

Neben dem Preis des Modells sind auch technische Informationen wie Prozessor, Akku-Laufzeit und Display gespeichert. Die Tabelle hat den folgenden Inhalt.

Einträge auf der Datenbank

Inhalt der Tabelle

Unser Funktionsbaustein soll alle Details zu einem bestimmten Modell (ID) von der Datenbank lesen. Um einen Funktionsbaustein anzulegen, können Sie das Kontextmenü (Rechtsklick) der Funktionsgruppe benutzen.

Funktionsmodul über Funktionsgruppe anlegen

Funkstionsbaustein anlegen

Vergeben Sie anschließend einen Namen und sichern Sie.

Technischen Namen und Beschreibung vergeben

Namen vergeben

Funktionsbausteine besitzen eine Schnittstelle, welche aus Parametern besteht. In den Schnittstellendefinitionen können verschiedene Arten von Parametern angelegt werden.

  • Import – diese Parameter übernehmen Werte für die Weiterverarbeitung in den Funktionsbaustein.
  • Export – damit liefert der Funktionsbaustein Ergebnisse nach außen. Der Empfänger kann, aber muss nicht, die Daten übernehmen.
  • Changing – ist eine Mischung aus Import und Export. Der Funktionsbaustein kann den Inhalt solchen Parameters ändern und an das aufrufende Programm zurückgeben.
  • Tabellen – diese Parameter sind veraltet und sollten nicht mehr verwendet werden, seit es Tabellentypen gibt.
  • Ausnahmen – falls im Funktionsbaustein Situationen eintreten, die so nicht geplant waren, kann eine Ausnahme ausgelöst und über die Schnittstelle nach außen gereicht werden. Die Behandlung der Ausnahme findet nicht im Funktionsbaustein selbst statt, sondern beim Aufrufer.

Parameter können auch als optional gekennzeichnet werden. Das heißt muss nicht, aber kann, beim Aufruf Werte übergeben. Die Einstellung Wertübergabe steuert, ob ein Wert beim Aufruf physisch in den Parameter kopiert wird. Wenn das Häckchen nicht gesetzt ist, wird der Wert nicht kopiert, sondern nur die Hauptspeicheradresse wird beim Aufruf übergeben. Dies ist besonders bei großen Tabellen mit vielen Einträgen sinnvoll.

Nun legen wir Importparameter fest. Wir wollen dem Funktionsmodul eine Modellnummer übergeben.

Beim Importparameter können auch Vorschlagswerte definiert werden

Importparameter definieren

Das Modul soll die Details zu diesem Modell zurückgeben. Also definieren wir einen Exportparameter vom Typ der Datenbanktabelle, die die Details beinhaltet.

Tabelle wird zurückgegeben

Expoprtparameter

Anschließend erfolgt die Umsetzung im Quelltext. Dabei werden die Details zu dem Modell i_id von der Datenbank in die Exportstruktur e_detail gelesen.

 
FUNCTION Z_GET_DETAILS.
*"------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(I_ID) TYPE  ZHANDYLIST-TID
*"  EXPORTING
*"     REFERENCE(E_DETAIL) TYPE  ZHANDYLIST
*"------------------------------------------

*Details zu der I_ID von der DB lesen
  SELECT SINGLE * FROM zhandylist INTO e_detail
    WHERE tid = i_id.

ENDFUNCTION.
Quelltext des Funktionsmoduls

Quelltext

Anschließend können wir den Funktionsbaustein aufrufen, zum Beispiel in einem Programm. Der Aufruf kann auf drei Arten erfolgen:

  • Manuell – sie tippen den Code selbst ein.
  • Drag & Drop aus der Objektliste – im Repository Browser (Transaktion SE80)
  • Muster (STRG+F6) – dabei erscheint ein Pop-up, in das man den Namen des Funktionsbausteins eingeben und den Aufruf produzieren lassen kann.
CALL FUNCTION Aufruf generieren

Muster einfügen

REPORT  zhandylist.

DATA: ls_details TYPE zhandylist.

CALL FUNCTION 'Z_GET_DETAILS'
  EXPORTING
    i_id     = '002'
  IMPORTING
    e_detail = ls_details.
Aufruf des Funktionsbausteins mit Parametern

Import / Export Parameter

Was bei der Parameterdefiniton im Funktionsbaustein ein Import ist, ist beim Aufruf ein Export. Und umgekehrt.

Anschließend kann das Ergebnis in dem Programm verarbeitet werden. So sollen zum Beispiel die Details auf dem Bildschirm präsentiert werden.

REPORT  zhandylist.

DATA: ls_details TYPE zhandylist.

CALL FUNCTION 'Z_GET_DETAILS'
  EXPORTING
    i_id     = '002'
  IMPORTING
    e_detail = ls_details.

WRITE: / 'Modell: ', ls_details-tid.
WRITE: / 'Preis: ', ls_details-tpreis, ls_details-tcurr.
WRITE: / 'Prozessor: ', ls_details-tproz.
WRITE: / 'Akku-Laufzeit (Std.): ', ls_details-takku.
WRITE: / 'Gewicht (g): ', ls_details-tweight.
WRITE: / 'Display: ', ls_details-tdisp.
WRITE: / 'Diagonale (Zoll): ', ls_details-tdiag.
ULINE.

Das Ergebnis sieht wie folgt aus.

Inhalt der Datenbanktabelle

Details werden ausgelesen

Übrigens, unsere Funktionsgruppe ist selbst ein Programm, welches Includes einbindet. Diese beinhalten Datendeklarationen, Unterprogramme, Ereignisse und die jeweiligen Funktionsbausteine. Die Wirkung der INCLUDE Anweisung ist die gleiche, als wenn man den Quellcode des Include-Programms anstelle der Anweisung kopiert hätte.

Wenn Sie auf die Funktionsgruppe doppelklicken und anschließend Rahmenprogramm (F5) auswählen. Können Sie die einzelnen Includes einsehen. Dabei gibt es unterschiedliche Includes für die einzelnen Teilobjekte:

  • TOP steht für globale Daten, Typen und Konstanten
  • UXX steht für die Funktionsbausteine
  • F<..> steht für Unterprogramme
  • E<..> steht für Ereignisse

Quellen und weiterführende Literatur:
Karl-Heinz Kühnhauser, Thorsten Franz (2011): Discover ABAP, 3. Auflage, Bonn

Diese ABAP Tricks machen Ihr Leben leichter!

  • In meinem Newsletter gebe ich eine Menge Tipps und Kniffe rund um ABAP.
  • Die Mini-Tutorials unterstützen Sie dabei, Software in ABAP effizienter zu entwickeln.
  • Praktische Anleitungen ermöglichen Ihnen schnelle Erfolge bei der Optimierung Ihrer Arbeit.
  • Bei der Anmeldung zu meinem Newsletter erhalten Sie das Buch „ABAP Tipps und Tricks“ als Willkommensgeschenk.
ABAP Tipps und Tricks

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. Ich hasse Spam genau so wie du.

Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.

Denis Reis ist Business Intelligence Consultant und gibt als Buchautor sein Wissen rund um den SAP Projektalltag weiter. Wenn Sie tatkräftige Unterstützung bei Ihren SAP BI Projekten benötigen, können Sie ihn über Xing, LinkedIn oder Facebook kontaktieren.
Des Weiteren unterrichtet er Projektmanagement und Controlling an der Wiesbaden Business School. Der aus Düsseldorf stammende Familienmensch zählt zu denjenigen, die auf komplizierte Darstellungen verzichten und das Ganze auf den Punkt bringen.

0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Kommentar verfassen