Ansicht
Dokumentation

ABENREF_TRANSF_GLOBAL_DATA_GUIDL - REF TRANSF GLOBAL DATA GUIDL

ABENREF_TRANSF_GLOBAL_DATA_GUIDL - REF TRANSF GLOBAL DATA GUIDL

General Data in Customer Master   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Referenzübergabe globaler Daten

Ein lokaler Kontext hat in der Regel direkten Zugriff auf die Datenobjekte der darüberliegenden globaleren Kontexte. So kann in einer Methode schreibend auf die Attribute der eigenen Klasse und auf die eventuellen globalen Daten des aktuellen Programms zugegriffen werden.

Wird ein globaleres Datenobjekt per Referenz an eine Prozedur übergeben, besteht dort Zugriff sowohl über seinen Bezeichner als auch über den Formalparameter.

Keine Referenzübergabe globaler Daten an lokale Kontexte

Verwenden Sie keine globalen Daten als Aktualparameter für Formalparameter von Prozeduren, wenn diese auf anderen Wegen in der Prozedur verändert werden können und der Parameter per Referenz übergeben wird.

Wird in einer Prozedur (Methode) ein globales Datenobjekt, das zugleich per Referenz übergeben wurde, geändert, verändert dies auch den Formalparameter und umgekehrt. Dies ist in der Regel ein Verhalten, das beim Schreiben der Prozedur nicht antizipiert wurde.

Globale Daten sollten entweder nur an Formalparameter übergeben werden, für welche die Wertübergabe deklariert ist, oder nur an Prozeduren, die bezüglich dieser Daten garantiert nebenwirkungsfrei sind.

Nach dem Aufruf der Methode do_something in Methode main aus folgendem Quelltext enthält das Attribut attr den unerwarteten Wert 2.0, da die erste Zuweisung an den per Referenz übergebenen Changing-Parameter c_value gleichzeitig auch attr ändert.

CLASS class DEFINITION.
   PUBLIC SECTION.
     METHODS
       main.
   PRIVATE SECTION.
     DATA
       attr TYPE p DECIMALS 2.
     METHODS
       do_something CHANGING c_value TYPE numeric.
ENDCLASS.
CLASS class IMPLEMENTATION.
   METHOD main.
     attr = '1.23'.
     do_something( CHANGING c_value = attr ).
   ENDMETHOD.
   METHOD do_something.
     ...
     c_value = floor( attr ).
     ...
     c_value = c_value + attr.
     ...
   ENDMETHOD.
ENDCLASS.

Wird in obigem Beispiel in der Methodendeklaration von do_something die Referenzübergabe in eine Wertübergabe verwandelt, wie in folgendem Quelltext gezeigt, enthält das Attribut attr nach dem Methodenaufruf den erwarteten Wert 2.23.

...
     METHODS
       do_something CHANGING VALUE(c_value) TYPE numeric.
...






BAL_S_LOG - Application Log: Log header data   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 3446 Date: 20240523 Time: 093142     sap01-206 ( 50 ms )