This is a test message to test the length of the message box.
Login
ABAP Tipp RFC Fehlerbehandlung
Erstellt von Software-Heroes

ABAP Tipp - RFC Fehlerbehandlung

118

Wie behandelt man eigentlich Fehler, wenn man über eine Destination im Funktionsbaustein kommuniziert? Mehr dazu in unserem Tipp.

Werbung


Der Aufruf von Funktionsbausteinen gehört zum Standard in der Verarbeitung, vor allem wenn du die Standard BAPIs der SAP nutzt. Dazu können die BAPIs meist auch auf anderen Systemen aufgerufen werden, um die Verarbeitung dort durchzuführen.

 

Einleitung

In Reviews sehen wir oft RFC Aufrufe, bei denen die Fehlerbehandlung nicht sauber implementiert wurde. In vielen Fällen findet man die folgende Implementierung des Aufrufs.

CALL FUNCTION 'BAPI_USER_ACTGROUPS_ASSIGN' DESTINATION is_roles-destination
  EXPORTING
    username              = is_roles-userid
  TABLES
    activitygroups        = is_roles-activitygroups
    return                = rt_return
  EXCEPTIONS
    OTHERS                = 1.

 

Da eine Destination verwendet wird, handelt es sich um einen RFC Aufruf, die Fehlermeldungen werden in diesem Fall über den SUBRC zurückgegeben. Außer OTHERS, gibt es keine weitere EXCEPTION beim Aufruf des Funktionsbausteins.

 

Fehler

Neben den klassischen Fehlermeldungen aus dem Funktionsbaustein, kann es im RFC Szenario auch zu allgemeinen Fehlern kommen:

  • Aufrufendes System nicht vorhanden
  • RFC-Verbindung nicht korrekt konfiguriert
  • Keine Berechtigungen für S_RFC oder S_RFCACL

 

Werden diese Fehler nicht sauber abgefangen, kommt es zu einem Dump beim Aufruf des Funktionsbausteins und die Verarbeitung kann nicht sauber beendet werden.

 

Implementierung

Wie sieht nun eigentlich die korrekte Implementierung des Aufrufs aus? Dazu muss man ein wenig in der Dokumentation suchen, um im richtigen Abschnitt fündig zu werden. Neben OTHERS gibt es noch zwei andere EXCEPTIONS, die der Funktionsbaustein setzen kann und dazu noch eine Übergabe der Fehlermeldung an eine Meldungsvariable.

DATA ld_message TYPE c LENGTH 200.

CALL FUNCTION 'BAPI_USER_ACTGROUPS_ASSIGN' DESTINATION is_roles-destination
  EXPORTING
    username              = is_roles-userid
  TABLES
    activitygroups        = is_roles-activitygroups
    return                = lt_return
  EXCEPTIONS
    system_failure        = 1 MESSAGE ld_message
    communication_failure = 2 MESSAGE ld_message
    OTHERS                = 3.

IF sy-subrc <> 0.
  " Log ld_message
ENDIF.

 

Wird nun eine Ausnahme ausgelöst, findest du die Fehlermeldung in LD_MESSAGE wieder und kannst sie ausgeben oder im Log protokollieren.

 

Fazit

Die Behandlung von Fehlern beim Aufruf ist nicht schwer, unterscheidet sich aber zur klassischen Fehlerbehandlung, weshalb sie oft vergessen wird. Im Fehlerfall hilft es aber, das Programm sauber zu beenden und den Fehler zu protokollieren.

 

Quelle:
SAP Dokumentation - CALL Function ... parameter list


Enthaltene Themen:
TippRFC Fehlerbehandlung
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ABAP in der Praxis - Modern ABAP

Kategorie - ABAP

In dieser kleinen Aufgabe schauen wir uns bestehenden klassischen ABAP Quellcode an und versuchen diesen nach Modern ABAP zu optimieren.

27.08.2024

ABAP Tipp - Performance Datenfilterung

Kategorie - ABAP

Welche Anweisung verwendest du in ABAP zur Filterung von internen Tabellen und ist diese performant? In diesem Artikel mehr dazu.

13.08.2024

ABAP in der Praxis - Typkonvertierung

Kategorie - ABAP

Wie würdest du diese Typkonvertierung in ABAP durchführen? Ein Beispiel aus der Praxis und ein Lösungsvorschlag.

16.07.2024

ABAP Tipp - CLEAR right

Kategorie - ABAP

Richtig löschen? In diesem Artikel wollen wir uns einmal anschauen, wann es Sinn macht zu löschen und wie du effektiv vorgehen kannst.

12.05.2023

ABAP Tipp - Performance Kettensätze

Kategorie - ABAP

Schauen wir uns hier einmal die Performance beim Bilden von Kettensätzen mit DATA und FIELD-SYMBOL an. Welche Variante wird bei der Performance vorn liegen?

28.04.2023