Show TOC

Funktionsbausteine aufrufenLocate this document in the navigation structure

Dieser Abschnitt beschreibt den Aufruf von Funktionsbausteinen aus der Funktionsbilbliothek.

Funktionsbausteine suchen

Bevor man neue Funktionalität in programmiert oder eigene Funktionsbausteine anlegt, kann es sich unter Umständen lohnen, nach vorhandenen Funktionsbausteinen zu suchen, die die gewünschte Funktionalität enthalten und diese im Programm aufzurufen.

Die Dokumentation Funktionsbausteine suchen der ABAP Workbench enthält nähere Informationen zum Suchen von Funktionsbausteinen im Function Builder. Beispielsweise kann man versuchen, über das Suchkriterium*STRING* im Repository-Infosystem eine Liste sämtlicher Funktionsbausteine anzeigen zu lassen, die mit Stringverarbeitung zu tun haben. Hier ein Ausschnitt aus der gefundenen Liste:

Der Titel CSTR  bezeichnet die Funktionsgruppe. Es gibt also eine Funktionsgruppe SAPLCSTR  , die diese Funktionsbausteine enthält. Durch Auswahl eines Funktionsbausteins kann man sich im Function Builder sämtliche Attribute des gefundenen Bausteins anzeigen lassen.
  • Dokumentation

    Die Dokumentation beschreibt die Aufgabe des Funktionsbausteins und listet die Schnittstellenparameter sowie die Ausnahmen auf. Hier erkennt man, welche Ein- und Ausgabeparameter der Funktionsbaustein hat und welche Fehlersituationen im Funktionsbaustein behandelt werden.

  • Schnittstellenparameter und Ausnahmen

    Die Anzeige der einzelnen Schnittstellenparameter und Ausnahmen liefert nähere Informationen darüber, wie der Funktionsbaustein zu behandeln ist. Die Dokumentation Informationen über Schnittstellenparameter anzeigen der ABAP Workbench enthält hierzu nähere Informationen. Funktionsbausteine können folgende Schnittstellenparameter haben:

IMPORT -Parameter müssen, falls nicht als optional gekennzeichnet, beim Aufruf mit Daten versorgt werden. Sie können im Funktionsbaustein nicht geändert werden.

EXPORTEXPORT -Parameter übergeben Daten vom Funktionsbaustein zurück zum aufrufenden Programm. -Parameter sind immer optional, müssen also nicht übernommen werden.

CHANGING -Parameter müssen, falls nicht als optional gekennzeichnet, beim Aufruf mit Daten versorgt werden. Sie können im Funktionsbaustein geändert werden und der geänderte Wert wird zurückgegeben.

Tabellen-Parameter dienen nur der Übergabe interner Tabellen. Sie werden wieCHANGING -Parameter behandelt. Interne Tabellen können aber auch bei entsprechender Typisierung mit den anderen Parametern übergeben werden.

Die Schnittstellenparameter können typisiert sein. Dabei ist der Bezug auf sämtliche Datentypen im ABAP Dictionary und auf elementare ABAP-Datentypen möglich. Beim Aufruf eines Funktionsbausteins ist darauf zu achten, dass die Aktualparameter kompatibel zu den Schnittstellenparametern sind.

Die Schnittstellenparameter werden standardmäßig per Wert, oder falls angekreuzt per Referenz übergeben. Tabellen-Parameter werden nur als Referenz übergeben. Optionale Import- undCHANGING -Parameter können mit Vorschlagswerten versehen sein. Falls der Aufrufer einen optionalen Parameter nicht übergibt, bleibt der Parameter entweder initial oder wird auf den eventuellen Vorschlagswert gesetzt.

Ausnahmen dienen zur Behandlung von Fehlersituationen, die in Funktionsbausteinen auftreten können. Das aufrufende Programm fragt über die Ausnahmen ab, ob Fehler aufgetreten sind und kann danach geeignet verfahren.

Funktionsbausteine testen

Vor dem Einbau in ein Programm kann ein Funktionsbaustein eigenständig getestet werden.

Die Dokumentation Funktionsbausteine testen der ABAP Workbench enthält nähere Informationen zum Testen von Funktionsbausteinen im Function Builder.

Funktionsbausteinaufruf in ABAP

Dei AnweisungCALL FUNCTION ruft einen Funktionsbaustein auf:

CALL FUNCTION baustein
      [EXPORTING  f1 = a1 ... fn = an] 
      [IMPORTING  f1 = a1 ... fn = an]
      [CHANGING   f1 = a1 ... fn = an]
      [TABLES     f1 = a1 ... fn = an]
      [EXCEPTIONS e1 = r1 ... en = rn [ERROR_MESSAGE = rE] 
                                   [OTHERS = ro]]. 

Der Name des Funktionsbausteins baustein  wird als Literal oder als Variable angegeben. Jedem verwendeten Schnittstellenparameter f1f2  … wird explizit ein Aktualparameter a1a2  … zugeordnet. Jeder Ausnahme e1e2  …  kann eine Rückgabewert r1r2  …  zugeordnet werden. Die Zuordnungen haben immer die Form Schnittstellenparameter = Aktualparameter. Das Gleichheitszeichen (= ) ist hier kein Zuweisungsoperator.

  • HinterEXPORTING müssen alle nicht-optionalen Import-Parameter des Funktionsbausteins typgerecht versorgt werden. Die optionalen Import-Parameter können versorgt werden.
  • HinterIMPORTING können die Export-Parameter des Funktionsbausteins von typgerechten Aktualparametern übernommen werden.
  • Hinter CHANGING  oder TABLES  müssen alle nicht-optionalen CHANGING - bzw. Tabellen Parameter des Funktionsbausteins typgerecht versorgt werden und werden nach Beendigung des Funktionsbausteins wieder von den Aktualparametern übernommen. Die optionalen  CHANGING - bzw. Tabellen Parameter können versorgt werden.

Mit der Option EXCEPTIONS  können die Ausnahmen des Funktionsbausteins behandelt werden. Wird während der Funktionsbausteinausführung eine Ausnahme e1e2  …  ausgelöst, unterbricht das System die Abarbeitung des Funktionsbausteins und gibt keine Werte vom Funktionsbaustein an das Programm weiter außer denen, die als Referenz übertragen werden. Wenn  e1e2  …  hinter der Option  EXCEPTION angegeben ist, behandelt das aufrufende Programm die Ausnahme, indem es sy-subrc  den Wert r1r2 …  zuweist. r1r2  …   muss als Zahlenliteral angegeben werden.

Durch die Angabe von ERROR_MESSAGE  in der  EXCEPTION -Liste kann man die Nachrichtenbehandlung in Funktionsbausteinen beeinflussen. Normalerweise sollten Nachrichten in Funktionsbausteinen nur über die Anweisung MESSAGE....RAISING  aufgerufen werden. Mit ERROR_MESSAGE  wird bewirkt, dass Nachrichten, die im Funktionsbaustein ausnahmsweise ohne den RAISING -Zusatz aufgerufen werden, wie folgt behandelt werden:

  • Nachrichten der Klassen S, I, und W werden ignoriert (bei Hintergrundverarbeitung aber im Protokoll vermerkt).
  •   Nachrichten der Klassen E und A beenden den Funktionsbaustein als ob die Ausnahme ERROR_MESSAGE  ausgelöst wurde und sy-subrc wird auf E gesetzt.

Mit der Angabe von OTHERS  hinter EXCEPTIONS  werden sämtliche Ausnahmen, die nicht explizit in der Liste aufgeführt werden, einem einzigen Rückgabewert zugewiesen.

Der gleiche Rückgabewert r 1 , r 2 …   ist für mehrere Ausnahmen zulässig.

Tipp
Die empfohlene und gleichzeitig bequemste Vorgehensweise für den statischen Aufruf eines Funktionsbausteins ist das Einfügen eines Anweisungsmusters im ABAP Editor. Durch Markieren von Call Function und Angabe des Namens des gewünschten Funktionsbausteins, wobei auch die Wertehilfe verwendet werden kann, wird eine
CALL FUNCTION
-Anweisung mit allen zulässigen Optionen des Funktionsbausteins in den Quelltext eingefügt.

Die optionalen Angaben werden als Kommentar eingefügt. Im obigen Fall müssen die Import-Parameter STRING  und POS  des Funktionsbausteins versorgt werden. Der Import-Parameter LANGU  ist optional und im Funktionsbaustein mit dem Systemfeld sy-langu  vorbelegt. Die Bearbeitung aller Export-Parameter ist optional. Die Behandlung von Ausnahmen ist zwar eigentlich auch optional, sollte aber auf alle Fälle durchgeführt werden. Dehalb sind hier keine Kommentarsterne eingefügt.

Ausnahmen werden im Funktionsbaustein entweder über die Anweisung  RAISE  oder MESSAGE … RAISING  ausgelöst. Wenn das aufrufende Programm die Ausnahme behandelt, geben beide Anweisungen die Programmsteuerung an das aufrufende Programm zurück. Die Anweisung MESSAGE..... RAISING  zeigt dann keine Nachricht an, sondern trägt folgende Werte in Systemfelder ein:

  • Nachrichtenkennung:sy-msgid .
  • Nachrichtentyp: sy-msgty .
  • Nachrichtennummer:sy-msgno .
  •   Inhalt der Felder f1  bis f4 , die in die Nachricht eingeschlossen sind,  →   sy-msgv1 bis  sy-msgv4 .

Die Systemfelder können beispielsweise nach dem Aufruf des Funktionsbausteins verwendet werden, um die Nachricht im aufrufenden Programm auszulösen.

Für die Verwendung von Aktualparametern mit den richtigen Datentypen, muss man sich die Schnittstelle des Funktionabausteins ansehen. Durch Vorwärtsnavigation (Doppelklick auf den Namen des Funktionsbausteins im Editor) gelangt man in das Werkzeug Function Builder, wo der Quelltext des Funktionsbausteins angezeigt wird. Über Springen → Schnittstelle wird die Schnittstelle gezeigt.

Im obigen Fall haben beispielsweise

  • STRINGSTRING1  und STRING2  den generischen Typ c . Der Aktualparameter muss vom Typ C sein, die Länge ist aber beliebig.
  • POS  und POS_NEW  den vollständig spezifizierten Typ  i . Der Aktualparameter muss vom Typ  i  sein.
  •  LANGU bezieht sich auf das Dictionary-Feld  SY-LANGU  und ist dadurch auch vollständig festgelegt. Der Aktualparameter muss vom vom gleichen Typ sein.

Der vollständige Aufruf des FunktionsbausteinSTRING_SPLIT_AT_POSITION kann beispielsweise wie folgt aussehen:

REPORT demo_mod_tech_fb_string_split.
DATA: text(10) TYPE c VALUE '0123456789',
      text1(6) TYPE c,
      text2(6) TYPE c.
PARAMETERS position TYPE i.
CALL FUNCTION 'STRING_SPLIT_AT_POSITION'
     EXPORTING
          string            = text
          pos               = position
     IMPORTING
          string1           = text1
          string2           = text2
     EXCEPTIONS
          string1_too_small = 1
          string2_too_small = 2
          pos_not_valid     = 3
          OTHERS            = 4.
CASE sy-subrc.
  WHEN 0.
    WRITE: / text, / text1, / text2.
  WHEN 1.
    WRITE 'Target field 1 too short!'.
  WHEN 2.
    WRITE 'Target field 2 too short!'.
  WHEN 3.
    WRITE 'Invalid split position!'.
  WHEN 4.
    WRITE 'Other errors!'.ENDCASE.

Der Funktionsbaustein teilt ein Eingabefeld an einer angegebenen Position in zwei Ausgabefelder auf. Falls der Inhalt von position  im Intervall [4,6] liegt, wird der Funktionsbaustein ohne das Auslösen von Ausnahmen ausgeführt. Für die Intervalle [1,3] und [7,9] werden die Ausnahmen  string1_too_small  bzw. string2_too_small ausgelöst. Für alle übrigen Werte von position  wird die Ausnahme  pos_not_valid  ausgelöst.