Show TOC Anfang des Inhaltsbereichs

Funktionsbausteine aufrufen  Dokument im Navigationsbaum lokalisieren

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:

Diese Grafik wird im zugehörigen Text erklärt

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.

Wichtige Attribute für die Verwendung sind die

·        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.

·         EXPORT-Parameter übergeben Daten vom Funktionsbaustein zurück zum aufrufenden Programm. EXPORT-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 wie CHANGING-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- und CHANGING-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.

Diese Grafik wird im zugehörigen Text erklärt

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

Funktionsbausteinaufruf in ABAP

Dei Anweisung CALL 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 f1, f2 … wird explizit ein Aktualparameter a1, a2 … zugeordnet. Jeder Ausnahme e1, e2  kann eine Rückgabewert r1, r2  zugeordnet werden. Die Zuordnungen haben immer die Form Schnittstellenparameter = Aktualparameter. Das Gleichheitszeichen (=) ist hier kein Zuweisungsoperator.

·        Hinter EXPORTING müssen alle nicht-optionalen Import-Parameter des Funktionsbausteins typgerecht versorgt werden. Die optionalen Import-Parameter können versorgt werden.

·        Hinter IMPORTING 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 e1, e2  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 e1, e2  hinter der Option EXCEPTION angegeben ist, behandelt das aufrufende Programm die Ausnahme, indem es sy-subrc den Wert r1, r2  zuweist. r1, r2   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-subrcwird auf rE 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 r1, r2   ist für mehrere Ausnahmen zulässig.

Beispiel

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.

Diese Grafik wird im zugehörigen Text erklärt

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

·         STRING, STRING1 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.

·         LANGUbezieht 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 Funktionsbaustein STRING_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_smallausgelöst. Für alle übrigen Werte von position wird die Ausnahme pos_not_valid ausgelöst.

Ende des Inhaltsbereichs