ABAP - Schlüsselwortdokumentation →  ABAP - Programmierrichtlinien →  Robustes ABAP →  Systemfelder → 

Rückgabewert

Hintergrund

Das prominenteste Systemfeld dürfte der Rückgabewert sy-subrc sein, der die erfolgreiche Ausführung einer ABAP-Anweisung oder auch bei Verwendung klassischer Ausnahmen einer Prozedur signalisiert. Ein Rückgabewert von 0 steht generell für eine erfolgreiche Ausführung.

Regel

Rückgabewert sy-subrc auswerten

Werten Sie den Rückgabewert sy-subrc hinter jeder ABAP-Anweisung aus, die ihn laut Dokumentation setzt. sy-subrc sollte aber nie nach der Ausführung einer Anweisung ausgewertet werden, für die das Setzen des Rückgabewerts nicht dokumentiert ist.

Details

Das Systemfeld sy-subrc gibt an, ob eine Anweisung erfolgreich ausgeführt werden konnte oder nicht. Falls die Ausführung nicht erfolgreich war, muss das Programm in der Regel geeignet darauf reagieren. Wird dies unterlassen, ist mit unerwartetem Verhalten des Programms zu rechnen.

Diese Regel ist eine Spezialisierung der allgemeineren Regel Systemfelder an richtiger Stelle auswerten, und wird aufgrund der herausragenden Rolle des Rückgabewerts sy-subrc hier nochmals separat aufgeführt. Das Systemfeld sy-subrc muss immer sofort ausgewertet und bei Bedarf einer Hilfsvariablen zugewiesen werden. Hinter Anweisungen, die sy-subrc nicht definiert setzen, darf auch keine Auswertung erfolgen, da andernfalls sehr leicht falsche Schlüsse gezogen werden.

Hinweis

Besondere Vorsicht ist bei funktionalen Methodenaufrufen geboten. Da jeder Methodenaufruf bei erfolgreicher Ausführung den Rückgabewert sy-subrc auf 0 setzt, überschreiben funktionale Methodenaufrufe den Rückgabewert bei der Verwendung in Anweisungen, bei denen kein Setzen des Rückgabewert dokumentiert ist. Das Gleiche gilt für den Instanzierungsoperator NEW wenn Instanzen von Klassen erzeugt werden.

Ausnahme

Erscheint eine Behandlung unnötig, da eine Anweisung nach Ermessen des Entwicklers immer erfolgreich ausgeführt wird, sollte diese Annahme zumindest durch eine Assertion abgesichert und dokumentiert werden.

Schlechtes Beispiel

Folgender Quelltext zeigt, wie ohne Abfrage von sy-subrc direkt mit dem Arbeitsbereich einer SELECT-Anweisung weitergearbeitet wird. Der Inhalt von wa ist hier in der Regel aber undefiniert, wenn der Erfolg des Datenbankzugriffs nicht über eine Abfrage von sy-subrc sichergestellt wird.

SELECT ...
       INTO wa
       ...
... "work with wa

Gutes Beispiel

Folgender Quelltext korrigiert obiges Beispiel dahin gehend, dass die erfolgreiche Ausführung der SELECT-Anweisung überprüft wird.

SELECT ...
       INTO wa
       ...
IF sy-subrc <> 0.
  ...
ENDIF
... "work with wa