Funktionsbaustein in ABAP einfach erklärt

Ein Funktionsbaustein ist eines der wichtigsten ABAP-Objekte in SAP ERP bzw. SAP S/4HANA. Das SAP-System benutzt an zahlreichen Stellen Funktionsbausteine für die ordnungsgemäße Funktion des SAP-Systems. Ein Funktionsbaustein kapselt den ABAP-Code und ermöglicht somit eine Wiederverwendung an verschiedenen Stellen.

In diesem Artikel möchte ich deshalb den Begriff Funktionsbaustein näher erläutern. Zudem hinaus zeige ich Dir, wie man einfach und schnell einen Funktionsbaustein erstellt und verwendet.

Was ist ein Funktionsbaustein?

Ein Funktionsbaustein ist eine programmübergreifende wiederverwendbare Prozedur, die man in Funktionsgruppen strukturiert. Die wichtigste Transaktion für Funktionsbausteine ist die Transaktion SE37 (Function Builder). In dieser Transaktion kann man einen Funktionsbaustein anzeigen, ändern, anlegen, löschen, prüfen, aktivieren und ausführen. Die Transaktion SE37 ist sicherlich die Transaktion, wenn man Funktionsbausteine pflegen möchte.

SE37 - ABAP Funktionsbausteine

Alternativ kann man die Transaktion SE80 (Object Navigator) verwenden, um einen Funktionsbaustein zu pflegen.

Ein Funktionsbaustein kapselt einen ABAP-Code. Die Datenübergabe erfolgt über eine definierte Schnittstelle, die aus verschiedenen Parameter besteht. Folgende Parameterarten stehen dabei zur Verfügung:

  • Import
  • Export
  • Changing
  • Tabellen
  • Ausnahmen

Import-Parameter dienen dazu, beim Aufruf des Funktionsbausteins Werte bzw. Variablen an den Funktionsbaustein zu übergeben. Import-Parameter werden beim Aufruf mit dem Schlüsselwort EXPORTING übergeben. Man „exportiert“ sozusagen Werte an den Funktionsbaustein. Der Funktionsbaustein „importiert“ diese. Sie können als optional gekennzeichnet werden, damit sie beim Aufruf nicht mehr zwingen versorgt werden müssen.

Export-Parameter sind immer optional. Dadurch werden Werte des Funktionsbausteins an das aufrufende Programm zurückgegeben. Export-Parameter nimmt man mit dem Schlüsselwort IMPORTING entgegen. Das aufrufende Programm „importiert“ somit den Wert.

Changing-Parameter sind Import- und Export-Parameter zugleich. Dabei handelt es sich um Variablen, die an den Funktionsbaustein übergeben werden, im Funktionsbaustein verändert werden und an das aufrufende Programm wieder zurückgegeben werden. Durch das Schlüsselwort CHANGING kann man Changing-Parameter beim Aufruf verwenden.

Tabellen sind veraltete Parameter und sollten nicht mehr verwendet werden.

Ausnahmen treten auf, wenn im Funktionsbaustein ein Fehler auftritt und dieser an das aufrufende Programm zurückgegeben wird. Somit kann man dort auf den Fehler entsprechend reagieren. Durch das Schlüsselwort EXCEPTIONS kann man im aufrufenden Programm die Ausnahmen entgegennehmen.

Der Name eines Funktionsbausteins muss systemseitig eindeutig sein. Es gibt remotefähige Funktionsbausteine, die per Web Service aufgerufen werden können und BAPIs (Business Application Programming Interfaces), die betriebswirtschaftliche Kriterien kapseln. Über die Transaktion BAPI erhält man eine Übersicht über alle verfügbaren BAPIs.

Beim Aufruf gilt:

<Formalparameter> = <Aktualparameter>

Wie erstelle ich einen Funktionsbaustein?

Ein Funktionsbaustein erstellt man über die Transaktion SE37 oder SE80. Ein Funktionsbaustein ist einer Funktionsgruppe zugeordnet. Deshalb muss man als Erstes eine Funktionsgruppe erstellen, wenn diese noch nicht existiert. Ansonsten kann man diesen Schritt überspringen und bei der Erstellung eines Funktionsbausteins die Funktionsgruppe angeben.

Funktionsgruppe erstellen

Entweder kann man in der Transaktion SE37 oder SE80 eine Funktionsgruppe erstellen. In der Transaktion SE37 wählt man hierfür die Menüfunktion „Springen > FGruppenverwaltung > Gruppe anlegen“.

Funktionsgruppe anlegen - SE37

Daraufhin erscheint ein Fenster, in dem man den Namen der Funktionsgruppe, den Kurztext und den Verantwortlichen angibt. Nachdem man auf den Button „Sichern“ geklickt hat, wird die Funktionsgruppe angelegt und kann verwendet werden.

Funktionsgruppe hinzufügen

Funktionsbaustein erstellen

Nachdem man eine Funktionsgruppe erstellt hat oder eine existierende kennt, kann man einen Funktionsbaustein erstellen. Hierzu ruft man die Transaktion SE37 auf, gibt den Namen des Funktionsbausteins ein und klickt auf den Button „Anlegen“.

Funktionsbaustein anlegen - SE37

Daraufhin erscheint ein Fenster, in dem man den Namen, die zugeordnete Funktionsgruppe und den Kurztext angibt.

Funktionsbaustein anlegen - Beschreibung

Nachdem man auf den Sichern-Button klickt, wird der Funktionsbaustein angelegt und man gelangt in den Function Builder und landet im Tab „Import“. Nun kann man in den einzelnen Tabs die Eigenschaften, Import-, Export-, Changing-Parameter, Tabellen und Ausnahmen angeben. Zudem hinaus schreibt man im Tab „Quelltext“ den gewünschten Programmcode.

Praktisch ist, dass man die einzelnen Parameter als Kommentare in dem oberen Teil des Funktionsbausteins angezeigt bekommt. Dadurch weiß man sofort, wie die einzelnen Felder heißen und welche Typisierung sie besitzen.

In diesem Beispiel werden die wichtigsten Parameter verwendet. Es wird der Sachbearbeiter einer Bestellung ermittelt und eine Ausnahme geworfen, wenn zu der übergebenen Bestellnummer keine Bestellung im System existiert. Zudem hinaus wird die Variable c_value um „ERP_UP_“ erweitert.

FUNCTION z_test.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(IM_EBELN) TYPE  EBELN
*"  EXPORTING
*"     REFERENCE(E_ERNAM) TYPE  ERNAM
*"  CHANGING
*"     REFERENCE(C_VALUE) TYPE  CHAR_50
*"  EXCEPTIONS
*"      NO_ENTRY
*"----------------------------------------------------------------------

  SELECT SINGLE ernam FROM ekko INTO e_ernam
    WHERE ebeln = im_ebeln.

  IF sy-subrc NE 0.
    " Keinen Eintrag gefunden
    RAISE no_entry.
  ENDIF.

  CONCATENATE 'ERP_UP_' c_value INTO c_value.


ENDFUNCTION.

Funktionsbaustein ausführen

Bei der Ausführung muss man generell zwischen dem Formalparameter und dem Aktualparameter unterscheiden. Der Formalparameter ist der Parameter des Funktionsbausteins. Diese stehen beim Aufruf auf der linken Seite. Dabei handelt es sich um die angegebenen Import-, Export-, Changing-Parameter, usw. Der Aktualparameter hingegen ist der Parameter, der die Variable des ausführenden Programms darstellt. Bei einem Import-Parameter wird somit der Wert oder die Variable an den Funktionsbaustein übergeben. Das wird durch die Anweisung „EXPORTING“ ausgedrückt. Bei einem Export-Parameter genau andersherum.

<Formalparameter> = <Aktualparameter>

In einem ausführenden Programm gibt es drei Möglichkeiten, wie Du einen Funktionsbaustein einbindest bzw. aufrufst:

  • Manuell
  • Muster
  • Drag&Drop

Die aufwändigste Variante ist die manuelle Ausführung. Hier schreibst Du den Aufruf komplett selber. Alle notwendigen Schlüsselwörter „CALL FUNCTION“, „EXPORTING“, „IMPORTING“, etc. werden von Dir eigenständig angegeben.

Die deutlich schnellere und weniger fehleranfällige Möglichkeit ist die Benutzung der Muster-Funktion. Hierzu klickst Du auf den Button „Muster“ und gibst bei der Anwendung „CALL FUNCTION“ den Namen des Funktionsbausteins ein. Du kannst hierbei die F4-Hilfe nutzen, um nach dem gewünschten Funktionsbaustein zu suchen.

Daraufhin wird der Rahmen der ABAP-Anweisung des Funktionsbausteins automatisch eingefügt. Du musst nur noch die Aktualparameter, also lokalen Variablen, angeben und bei Bedarf optionale Parameter einkommentieren.

Ähnlich zum Muster kannst Du im Object Navigator (Transaktion SE80) per Drag&Drop den Rahmen des Funktionsbausteins einfügen. Klicke hierzu in der Objektliste auf der linken Seite auf den gewünschten Funktionsbaustein, ziehe ihn in die gewünschte Stelle des aufrufenden Programms und lasse die Maustaste los. Daraufhin wird der Rahmen genau wie beim Muster eingefügt.

CALL FUNCTION 'Z_TEST'
  EXPORTING
    im_ebeln = lv_ebeln
  IMPORTING
    e_ernam  = lv_ernam
  CHANGING
    c_value  = lv_value
  EXCEPTIONS
    no_entry = 1
    OTHERS   = 2.

IF sy-subrc = 1.
  WRITE: / 'Kein Eintrag gefunden'.
ENDIF.

Unterschied zwischen Funktionsbaustein und Klasse

FunktionsbausteinKlasse
prozeduralobjektorientiert
Transaktion SE37Transaktion SE24
Remote aufrufbarNicht remote aufrufbar
ÖffentlichÖffentlich, geschützt oder privat
Keine VererbungVererbung möglich
Erstellung von Bildschirmen möglichErstellung von Bildschirmen nur möglich, wenn die Klasse ein anderes Programm aufruft
ZustandslosEnthalten Zustand und Attribute

Über den Autor

Andreas Geiger

Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.

Mehr zu ERP UP

ERP UP unterstützen

Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.

Schreibe einen Kommentar