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.

CLASS class DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS get_some_table
      EXPORTING e_some_table TYPE table_type.
ENDCLASS.
CLASS class IMPLEMENTATION.
  METHOD get_some_table.
    DATA new_line LIKE LINE OF e_some_table.
    CLEAR e_some_table.
    ...
    INSERT new_line INTO TABLE e_some_table.
    ...
  ENDMETHOD.
ENDCLASS.