SAP NetWeaver AS ABAP Release 752, ©Copyright 2017 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation → ABAP - Programmierrichtlinien → Robustes ABAP → Modularisierungseinheiten →Referenzübergabe von Ausgabeparametern
Hintergrund
Bei der Referenzübergabe von Parametern an eine Prozedur arbeitet diese Prozedur direkt mit dem als Parameter übergebenen Datenobjekt. Dessen Wert wird demnach durch den Aufrufer der Prozedur bestimmt. Dieses Verhalten ist insbesondere bei EXPORTING-Parametern zu berücksichtigen, deren Wert beim Aufruf der Prozedur anders als bei der Wertübergabe nicht initialisiert wird. Nach dem Prozedureintritt hat ein per Referenz übergebener Ausgabeparameter den Wert des angebundenen Aktualparameters.
Regel
Ausgabeparameter mit Referenzübergabe korrekt verwenden
Werten Sie per Referenz übergebene EXPORTING-Parameter in einer Prozedur (Methode) erst nach einer expliziten Wertzuweisung aus.
Details
Da der Wert eines per Referenz übergebenen Ausgabeparameters aus Sicht der Prozedur undefiniert ist, kann er innerhalb der Prozedur nicht sinnvoll ausgewertet werden. Vor der ersten Wertzuweisung an einen solchen Parameter dürfen daher keine Annahmen über seinen Inhalt getroffen werden.
Handelt es sich bei einem solchen Parameter um eine interne Tabelle oder einen String, ist ein Schreibzugriff nicht ausreichend. Zunächst muss eine Initialisierung erfolgen. Sollen beispielsweise neue Zeilen in eine per Referenz auszugebende interne Tabelle eingefügt werden, muss ihr bisheriger Inhalt zunächst gelöscht werden. Wegen der Referenzübergabe ist nicht sichergestellt, dass die Tabelle beim Prozedureintritt tatsächlich leer ist. Analoges gilt für Strings, die innerhalb der Prozedur über Verkettungsoperationen gefüllt werden.
Hinweis
Sollen die hier beschriebenen Eigenschaften von schreibbaren, per Referenz übergebenen Parametern in einer Prozedur (Methode) ausgenutzt werden, das heißt es soll lesend vor einem Schreibzugriff zugegriffen oder ein vorhandenes dynamisches Datenobjekt erweitert werden, ist die passende Formalparameterart, das heißt Ein-/Ausgabeparameter (CHANGING-Parameter) zu wählen.
Ausnahme
Die Initialisierung optionaler, per Referenz übergebener Ausgabeparameter muss streng genommen nur dann erfolgen, wenn dem Parameter beim Aufruf tatsächlich ein Aktualparameter angebunden wird. Dies kann über die Abfrage IS SUPPLIED festgestellt werden. Die veraltete Abfrage IS REQUESTED soll dagegen nicht mehr verwendet werden.
Beispiel
Folgender Quelltext zeigt die Rückgabe einer internen Tabelle, die aus Performancegründen per Referenz erfolgt. Sie kann deshalb auch nicht als RETURNING-Parameter deklariert werden. Der tabellarische Ausgabeparameter wird am Anfang der Methode explizit initialisiert, bevor neue Zeilen eingefügt werden.