SAP NetWeaver AS ABAP Release 752, ©Copyright 2017 SAP AG. Alle Rechte vorbehalten.
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.
Gutes Beispiel
Folgender Quelltext korrigiert obiges Beispiel dahin gehend, dass die erfolgreiche Ausführung der SELECT-Anweisung überprüft wird.