Ansicht
Dokumentation

ABENVALUE_CONSTRUCTOR_PARAMS_STRUC - VALUE CONSTRUCTOR PARAMS STRUC

ABENVALUE_CONSTRUCTOR_PARAMS_STRUC - VALUE CONSTRUCTOR PARAMS STRUC

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

VALUE, Strukturen

... VALUE dtype$|#( $[let_exp$]
                   $[BASE dobj$]
                   comp1 = dobj1 comp2 = dobj2 ... ) ...


Wirkung

Wenn dtype ein strukturierter Datentyp ist bzw. # für einen solchen steht, können die einzelnen Komponenten als benannte Argumente comp1, comp2, ... aufgeführt werden. Jeder Komponente des Rückgabewerts kann ein Datenobjekt zugewiesen werden, das den gleichen Datentyp wie die Komponente hat oder in diesen konvertierbar ist. Die Zuweisung erfolgt für alle Datentypen nach den entsprechenden Zuweisungsregeln.

Vor den einzelnen Komponentenzuweisungen kann ein Zusatz BASE gefolgt von einem Datenobjekt dobj angegeben werden. Bei dobj handelt es sich um eine funktionale Operandenposition. Der Typ von dobj muss in den Typ des Rückgabewerts konvertierbar sein. Wenn BASE angegeben ist, wird dem Rückgabewert der Inhalt von dobj zugewiesen, bevor die einzelnen Komponenten zugewiesen werden. Wenn das Zeichen # für den Typ des Rückgabewerts angegeben ist und der Typ nicht aus der Operandenposition des VALUE-Ausdrucks bestimmt werden kann, wird für diesen der Typ von dobj verwendet, falls dieser erkennbar und strukturiert ist.

Bei dobj1, dobj2, ... handelt es sich um allgemeine Ausdruckspositionen. Optional kann vor den Zuweisungen ein LET-Ausdruck let_exp zur Definition lokaler Hilfsfelder aufgeführt werden, die auf den rechten Seiten der Zuweisungen verwendbar sind.

Wenn eine Komponente selbst strukturiert ist, kann entweder der gesamten Unterstruktur ein passendes Datenobjekt zugewiesen oder deren Komponenten können über den Strukturkomponentenselektor (-) einzeln aufgeführt werden. Nicht angegebene Komponenten werden ignoriert und behalten ihren typspezifischen Initialwert bzw. den über BASE zugewiesenen Wert. Wenn der Zusatz BASE verwendet wird, muss auch mindestens eine Komponente angegeben werden.

Wenn der VALUE-Operator als Quelle einer Zuweisung an eine Struktur verwendet wird, wird diese nach der Auswertung eines eventuellen LET-Ausdrucks erst initialisiert bzw. dieser wird erst das Datenobjekt dobj hinter BASE zugewiesen und dann werden die Zuweisungen in der Klammer von links nach rechts direkt mit den Strukturkomponenten als Zielfelder ausgeführt.

Eine Zuweisung mehrerer Werte an eine Komponente ist nicht möglich wenn die Komponente über den gleichen Namen adressiert wird. In Strukturen, die Komponentengruppen enthalten, können die entsprechenden Komponenten wie gewohnt als Komponenten der einbindenden Strukturen oder über den Namen der Komponentengruppe adressiert werden. Dann werden einer Komponente eventuell mehrere Werte zugewiesen und dabei die letzte Zuweisung berücksichtigt.

Hinweise

  • Die Zuweisungen können in der Klammer hinter den optionalen Zusätzen LET ... IN und BASE in beliebiger Reihenfolge angegeben werden.
  • Wenn eine Komponente mit komplexen Datentyp an einer Argumentenposition konstruiert werden soll, kann der Wertoperator VALUE nochmals verwendet werden. Dies betrifft beispielsweise tabellarische Komponenten. Für strukturierte Komponenten ist dies auch möglich, aber nicht notwendig, da die Unterkomponenten über den Strukturkomponenten-Selektor ansprechbar sind.
  • Die Regel, dass eine Zielstruktur erst vollständig überschrieben und dann direkt bearbeitet wird, kann zu überraschenden Ergebnissen führen, wenn Strukturkomponenten der linken Seite auf der rechten Seite als zuzuweisende Datenobjekte angegeben werden. Es werden nicht erst die Zuweisungen der rechte Seite ausgewertet und zugewiesen, sondern es wird bei jeder Zuweisung der gerade aktuelle Wert verwendet. Wenn die ganze Struktur oder Strukturkomponenten der linken Seite auf der rechten Seite benötigt werden, können sie aber mit einem LET-Ausdruck in lokalen Hilfsvariablen gespeichert werden, da dieser zuerst ausgewertet wird.
  • Wenn bei einer Zuweisung an eine vorhandene Struktur die Zieltstruktur als dobj hinter BASE angegeben ist, findet keine Zuweisung vor der Auswertung der Komponentenzuweisungen statt, sondern die Zielstruktur behält einfach ihren Wert.

Drei unterschiedliche Möglichkeiten eine geschachtelte Struktur struct mit Werten zu versorgen. Die Struktur wird jedes Mal mit den gleichen Werten versorgt.

Beispiel

Das Beispiel zeigt Effekte, die auftreten, wenn Komponenten einer Zielstruktur als Zuweisungsquellen verwendet werden. Nach der Zuweisung an struct1 haben col1 und col2 den Wert 0 und col3 und col4 den Wert 5. Es werden nicht die ursprünglichen Werte von col1 und col2 vertauscht und col3 erhält nicht den ursprünglichen Wert von col4. Die Zuweisung an struct2 zeigt, wie durch das Speichern des Zielobjekts in einer Hilfsvariable x und dessen Verwendung das Verhalten verändert werden kann. In struct2 werden die ursprünglichen Werte von col1 und col2 vertauscht und col3 erhält den ursprünglichen Wert von col4.

Beispiel

Verwendung von BASE. Bei der Konstruktion von struct1 wird der Typ des Rückgabewerts von base1 übernommen. Dies ist bei der Konstruktion von struct2 nicht möglich, da base2 nicht strukturiert ist. In beiden Ergebnissen haben col1 und col3 die über BASE zugewiesenen Werte xx bzw. zz während col2 den direkt zugewiesenen Wert BB hat.

Verwendung von BASE mit einem CORRESPONDING-Ausdruck, für die Zuweisung zwischen zwei inkompatiblen Strukturen. struct1 bekommt erst die namensgleichen Komponenten von struct2 zugewiesen und danach werden explizit die restlichen Komponenten versorgt. Um das Gleiche für die Spalten einer internen Tabelle zu erreichen, kann man eine entsprechende Zuweisung innerhalb einer Iteration mit FOR durchführen.

Konstruktion einer Struktur mit Komponentengruppen. Alle VALUE-Operators haben die gleiche Wirkung.

Beispiele

Siehe auch die Beispiele zum Instanzierungsoperator NEW.






SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 8311 Date: 20240523 Time: 114747     sap01-206 ( 177 ms )