Ansicht
Dokumentation

ABENFORMAL_PARAMETERS_OVIEW - FORMAL PARAMETERS OVIEW

ABENFORMAL_PARAMETERS_OVIEW - FORMAL PARAMETERS OVIEW

BAL_S_LOG - Application Log: Log header data   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Parameterschnittstelle von Prozeduren

Die Parameterschnittstelle einer Prozedur besteht aus Formalparametern und gibt die möglichen Ausnahmen der Prozedur an.

Formalparameter

Formalparameter sind Eingabeparameter, Ausgabeparameter, Ein-/Ausgabeparameter oder Rückgabewerte. Darüber hinaus gibt es einige obsolete Tabellenparameter. Formalparameter sind entweder generisch oder vollständig typisiert. Für die meisten Formalparameter kann Referenzübergabe oder Wertübergabe festgelegt werden. Für einige Formalparameter ist die Wertübergabe vorgeschrieben.

Passende Formalparameterart wählen

Referenzübergabe versus Wertübergabe

Die Parameterübergabe an Prozeduren kann entweder per Referenz oder per Wert erfolgen:

  • Referenzübergabe
Für die Referenzübergabe wird der Prozedur beim Aufruf eine Referenz auf den Aktualparameter übergeben, und sie arbeitet mit dem Aktualparameter selbst. Es wird kein lokales Datenobjekt für den Aktualparameter angelegt. Per Referenz übergebene Eingabeparameter können in der Prozedur nicht geändert werden (Ausnahme: USING-Parameter von Unterprogrammen).
  • Wertübergabe
Bei der Wertübergabe wird für den Formalparameter ein typgerechtes lokales Datenobjekt als Kopie des Aktualparameters angelegt. Ausgabeparameter und Rückgabewerte werden beim Eintritt in die Prozedur initialisiert, und Eingabeparameter sowie Ein-/Ausgabeparameter erhalten den Wert des Aktualparameters übergeben. Ein geänderter Formalparameter wird nur bei fehlerfreier Beendigung der Prozedur an den Aktualparameter übergeben.

Für die Entscheidung, ob Referenz- oder Wertübergabe für einen Formalparameter festgelegt wird, müssen Performance und Robustheit der beiden Übergabearten gegeneinander abgewogen werden.

Die Referenzübergabe ist in ABAP immer performanter als die Wertübergabe, da beim Prozeduraufruf kein lokales Datenobjekt angelegt werden muss und kein Datentransport stattfindet. Aus Performance-Gründen ist die Referenzübergabe der Wertübergabe in der Regel meistens vorzuziehen, es sei denn es findet in der Prozedur ein expliziter oder impliziter Schreibzugriff auf einen Eingabeparameter statt oder man will sicherstellen, dass ein Ein-/Ausgabeparameter oder ein Ausgabeparameter nur bei fehlerfreier Beendigung der Prozedur zurückgegeben wird. In einem solchen Fall ist die Wertübergabe erforderlich, damit bei einem Schreibzugriff auf einen Formalparameter nicht gleichzeitig der zugeordnete Aktualparameter im Aufrufer verändert wird. Aus Gründen der Performance sollten solche Fälle wenn möglich auf die Übergabe von Parametern mit einer Größe von kleiner als etwa 100 Bytes beschränkt werden.

Bei Verwendung der Referenzübergabe ist außerdem Folgendes zu beachten:

  • In Unterprogrammen kann schreibend auf einen mit USING definierten Eingabeparameter zugegriffen werden, ohne dass es wie bei den mit IMPORTING definierten Eingabeparametern von Methoden oder Funktionsbausteinen zu einem Syntaxfehler kommt.
  • Ein per Referenz übergebener Ausgabeparameter verhält sich wie ein Ein-/Ausgabeparameter, d.h., wenn in der Prozedur lesend auf einen Ausgabeparameter zugegriffen wird, bevor dessen Wert geändert wurde, ist dessen Wert im Gegensatz zur Wertübergabe nicht initial, sondern entspricht dem aktuellen Wert des Aktualparameters im Aufrufer.
  • Wenn eine Prozedur durch einen Fehler abgebrochen wird, d.h. sie wird nicht durch Erreichen ihrer letzten Anweisung oder RETURN (bzw. EXIT oder CHECK) beendet - stehen alle per Referenz übergebenen Aktualparameter auf dem beim Abbruch aktuellen Wert der zugeordneten Formalparameter. Bei der Wertübergabe werden bei Abbruch einer Prozedur keine Werte an Aktualparameter übergeben.

Prozeduren und ihre Aufrufe müssen so programmiert werden, dass es dadurch nicht zu einem Fehlverhalten kommt.

Zusammengefasst gilt also, dass die Referenzübergabe immer vorzuziehen ist, wenn die Performance eine Rolle spielt, wogegen die Wertübergabe sicherer in Hinblick auf die Robustheit und Datenkonsistenz ist. Die Entscheidung, welche Art von Parameter mit welcher Art der Übergabe verwendet wird, muss entsprechend dieser Gesichtspunkte von Fall zu Fall entschieden werden.

Passende Übergabeart wählen

Hinweise

  • Wenn Strings oder gleichartige interne Tabellen per Wertübergabe übergeben werden, tritt zwischen dem lokal erzeugten Datenobjekt und dem übergebenen Datenobjekt wie bei einer Zuweisung ein Sharing in Kraft. Das Tabellen-Sharing tritt aber nur ein, wenn es der Zeilentyp der internen Tabelle zulässt. Bei der Übergabe von Strings und internen Tabellen kann der Performance-Nachteil der Wertübergabe gegenüber der Referenzübergabe also unter Umständen durch das Sharing aufgehoben werden.
  • Bei einem per Referenz übergebenen Formalparameter, dem beim Aufruf kein Aktualparameter angebunden ist, wird wie bei der Wertübergabe ein lokales Datenobjekt erzeugt.
  • Bei der Anbindung eines Literals wird die Typisierung laxer überprüft.

  • Bei der Anbindung einer Funktion, eines Rechenausdrucks, eines Konstruktorausdrucks oder eines Tabellenausdrucks wird die Übergabe immer wie eine Wertübergabe durchgeführt auch wenn für den Formalparameter die Referenzübergabe definiert ist.

  • Das Ergebnis der Überprüfung der Typisierung bei der Übergabe von Aktualparametern an Formalparameter ist unabhängig von der Übergabeart. Bei einer Wertübergabe wird immer die Überprüfung für Referenzübergabe durchgeführt, auch wenn diese in Einzelfällen strenger als nötig sein kann. Beispielsweise kann eine spezielle Referenzvariable nicht an einen allgemeiner typisierten CHANGING-Parameter übergeben werden, selbst wenn für diesen die Wertübergabe definiert ist.

Beispiel

Für eine Methode meth sind CHANGING-Parameter p1 für Referenz- und p2 für Wertübergabe definiert. Der Wert beider Parameter wird vor dem Auslösen einer Ausnahme geändert. Der an den Parameter mit Referenzübergabe gebundene Aktualparameter a1 enthält bei Behandlung der Ausnahme den geänderten Wert, der an den Parameter mit Wertübergabe gebundene Aktualparameter a2 behält seinen Wert.

Ausnahmen

Bei allen Prozeduren (Methoden, Funktionsbausteine , Unterprogramme ) können mit RAISING klassenbasierte Ausnahmen deklariert werden, welche dadurch aus der Prozedur propagiert werden können. In Methoden und Funktionsbausteinen können mit EXCEPTIONS auch noch nicht-klassenbasierte Ausnahmen definiert werden, die dadurch mit RAISE oder MESSAGE ... RAISING in der Prozedur ausgelöst werden können.






RFUMSV00 - Advance Return for Tax on Sales/Purchases   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 11951 Date: 20240523 Time: 183249     sap01-206 ( 168 ms )