Ansicht
Dokumentation

ABENCORRESPONDING_CONSTR_ARG_TYPE - CORRESPONDING CONSTR ARG TYPE

ABENCORRESPONDING_CONSTR_ARG_TYPE - CORRESPONDING CONSTR ARG TYPE

Fill RESBD Structure from EBP Component Structure   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

CORRESPONDING, Grundform

... ${ CORRESPONDING ${dtype$|#$}( $[EXACT$] $[DEEP$]
                               struct$|${itab $[duplicates$]$} ) $}
  $| ${ CORRESPONDING ${dtype$|#$}( $[DEEP$]
                               $[$[APPENDING$] BASE ( base )$]
                               struct$|${itab $[duplicates$]$} ) $}
  $| ${ CORRESPONDING ${dtype$|#$}( $[$[APPENDING$] BASE ( base )$]
                               struct$|${itab $[duplicates$]$}
                               mapping ) $} ...


Zusätze:

1. ... EXACT ...

2. ... DEEP ...

3. ... BASE ( base ) ...

4. ... APPENDING ( base )

5. ... DEEP APPENDING ( base )

Wirkung

Diese Variante des Komponentenoperators CORRESPONDING konstruiert aus den Komponenten eines Parameters struct oder itab ein Ergebnis von dem über dtype oder # angegebenen Zieltyp. Bei struct und itab handelt es sich um allgemeine Ausdruckspositionen.

  • Wenn der Zieltyp ein strukturierter Typ ist, muss als Parameter eine Struktur struct verwendet werden. Der Ausdruck erzeugt eine Struktur des Zieltyps. Die Zielstruktur ist entweder initial oder sie bekommt den Wert von base hinter dem optionalen Zusatz BASE als Startwert zugewiesen. Danach werden der Zielstruktur standardmäßig die namensgleichen Komponenten von struct nach den Regeln vom MOVE-CORRESPONDING für Strukturen zugewiesen.
  • Wenn der Zieltyp ein Tabellentyp ist, muss als Parameter eine interne Tabelle itab verwendet werden. Der Ausdruck erzeugt eine interne Tabelle des Zieltyps. Die Zieltabelle ist entweder initial oder sie bekommt den Wert von base hinter dem optionalen Zusatz BASE als Startwert zugewiesen. Danach werden der Zieltabelle standardmäßig die namensgleichen Spalten von itab nach den Regeln vom MOVE-CORRESPONDING für interne Tabellen mit dem Zusatz KEEPING TARGET LINES zugewiesen. Dabei kann mit dem Zusatz duplicates das Verhalten bezüglich doppelt vorkommender Zeilen in einer Zieltabelle mit eindeutigen Tabellenschlüsseln gesteuert werden.

Hinweise

  • Eine Zuweisung von Strukturen
struct2 = CORRESPONDING #( struct1 ).
ohne den Zusatz BASE ist nicht das Gleiche wie eine Zuweisung
MOVE-CORRESPONDING struct1 TO struct2.
Während bei MOVE-CORRESPONDING alle nicht gleichnamigen Komponenten in struct2 ihren Wert behalten, bekommen sie bei Zuweisung des Ergebnisses des Konstruktorausdrucks den dort vorhandenen Wert zugewiesen, der für nicht berücksichtigte Komponenten initial ist. Dieses Verhalten kann mit dem Zusatz BASE übersteuert werden.
  • Bei einer Zuweisung eines Parameters an den Zieltyp und dessen Zuweisung an ein Datenobjekt
dobj = CORRESPONDING type( ... ).
wird aus Gründen der Optimierung direkt mit dem Zielobjekt gearbeitet und kein temporäres Ergebnis des Ausdrucks erstellt, das dann zugewiesen wird. Dies ist nicht möglich, wenn Zielobjekt und Parameter identisch sind und eine Mapping-Vorschrift verwendet wird, was beispielsweise das Vertauschen der Inhalte zweier Komponenten ermöglicht. In einem solchen Fall muss eine temporäre Kopie des Zielobjekts erstellt werden, mit der dann gearbeitet wird und es kommt zu einer entsprechenden Warnung von der Syntaxprüfung, die durch ein Pragma ausgeblendet werden kann. Wenn dies erst zur Laufzeit festgestellt wird, fehlt die nötige Information, um die notwendige temporäre Kopie der Zieltabelle zu erstellen, und es kommt zu dem Laufzeitfehler CORRESPONDING_SELF. Siehe das ausführbare Beispiel Reflexive Komponentenzuweisungen.

Beispiel

Zuweisung von vier namensgleichen Komponenten der Standardtabelle spfli_tab an eine temporäre sortierte Tabelle vom Typ flights an einer Operandenposition.

Zusatz 1

... EXACT ...

Wirkung

Falls der Zusatz EXACT für eine Struktur struct angegeben wird, wird die Zuordnung wie beim Zusatz EXACT der Anweisung MOVE-CORRESPONDING für Strukturen durchgeführt. Falls der Zusatz EXACT für eine interne Tabelle itab angegeben wird, wird die Zuordnung nach den Regeln für die Anweisung MOVE-CORRESPONDING für interne Tabellen durchgeführt.

Beispiel

Zuweisung von Ergebnissen des Komponentenoperators ohne und mit dem Zusatz EXACT an vorhandene Strukturen gleichen Inhalts. Mit dem EXACT-Beispiel wird demonstriert, dass beim Auftreten einer Ausnahme alle Komponenten bis zur derjenigen zugewiesen werden, welche die Ausnahme bewirkt hat. Diese und alle noch folgenden werden nicht zugewiesen.

Zusatz 2

... DEEP ...

Wirkung

Wenn der Zusatz DEEP angegeben ist, erfolgt die Zuweisung wie mit dem Zusatz EXPANDING NESTED TABLES zur Anweisung MOVE-CORRESPONDING. Mit einer Mapping-Vorschrift mapping kann die auf Namensgleichheit beruhende Zuweisungsregel von MOVE-CORRESPONDING übersteuert werden. Wenn eine Mapping-Vorschrift angegeben ist, ist der Zusatz DEEP implizit gesetzt und er darf nicht explizit angegeben werden.

Hinweis

Falls die Zusätze EXACT und DEEP angegeben werden, ist die Reihenfolge der Zusätze nicht relevant, d.h. sowohl ... EXACT DEEP ... als auch ... DEEP EXACT ... ist möglich. Weiterhin ist die einzige Syntaxoption mit DEEP und EXACT und weiteren Zusätzen ist DISCARDING DUPLICATES.

Beispiel

Zuordnung der Ergebnisse des Komponentenoperators mit den Zusätzen DEEP und EXACT DEEP zu vorhandenen tiefen Strukturen des gleichen Inhaltes.

Zusatz 3

... BASE ( base ) ...

Wirkung

Mit dem Zusatz BASE kann ein Startwert base für die erzeugte Struktur bzw. interne Tabelle angegeben werden. Bei base handelt es sich um eine funktionale Operandenposition, an der ein Datenobjekt angegeben werden kann, das in den Zieltyp konvertierbar ist.

Wenn der Zusatz BASE angegeben ist, wird der Wert von base der Zielstruktur bzw. der Zieltabelle nach den allgemeinen Zuweisungsregeln zugewiesen bevor der restliche Ausdruck ausgewertet wird. Dabei kann mit dem Zusatz duplicates hinter itab das Verhalten bezüglich doppelt vorkommender Zeilen in einer Zieltabelle beeinflusst werden.

Hinweise

  • Im Gegensatz zu den Operatoren NEW und VALUE müssen bei CORRESPONDING runde Klammern um base gesetzt werden.
  • Anders als bei den Operatoren NEW und VALUE wird der Datentyp von base bei CORRESPONDING nicht verwendet, um einen über # angegebenen Ergebnistyp zu bestimmen.
  • Mit dem Zusatz BASE kann mit dem Komponentenoperator die Anweisung MOVE-CORRESPONDING wie folgt ersetzt werden:
  • Eine Zuweisung von Strukturen

struct2 = CORRESPONDING #( BASE ( struct2 ) struct1 ).

ist das Gleiche wie eine Zuweisung

MOVE-CORRESPONDING struct1 TO struct2.
  • Eine Zuweisung von internen Tabellen

itab2 = CORRESPONDING #( BASE ( itab2 ) itab1 ).

ist das Gleiche wie eine Zuweisung

MOVE-CORRESPONDING itab1 TO itab2 KEEPING TARGET LINES.

Beispiel

Zuweisung von Ergebnissen des Komponentenoperators ohne und mit dem Zusatz BASE an vorhandene Strukturen gleichen Inhalts. Der Wert der in der Quellstruktur nicht vorhandenen Komponente bleibt nur bei der Verwendung von BASE erhalten.

Zusatz 4

... APPENDING ( base ) ...

Wirkung

Dieser Zusatz wirkt auf zwei gleichnamige tiefe Komponenten, die beide interne Tabellen sind. Hiermit wird sichergestellt, dass die geschachtelten Zieltabellen nicht gelöscht werden. Darüber hinaus werden die Zeilen der geschachtelten Quelltabellen angehängt. Die Wertezuordnung mit den angehängten Zeilen verläuft wie bei der Verwendung vom Operator CORRESPONDING ohne Zusatz.

Die ganzen Tabellenkörper der geschachtelten Quelltabellen werden gemäß der Konvertierungsregeln für interne Tabellen zugeordnet.

Hinweis

Der Zusatz APPENDING hängt die Zeilen einer geschachtelten Tabelle an und behält die ursprünglichen Zeilen. Die explizite Angabe des Zusatzes BASE ist hier möglich, aber nicht notwendig. Das heißt, dass die folgende Syntax die gleiche Wirkung hat:

struc2 = CORRESPONDING #( APPENDING ( struc2 ) struc1 ).
struc2 = CORRESPONDING #( APPENDING BASE ( struc2 ) struc1 ).

Beispiel

Im folgenden Quelltextausschnitt aus DEMO_CORRESPONDING_VARIANTS_ST wird die Variante mit tiefen Strukturen, demonstriert, die interne Tabellen als Komponenten enthalten.

deep_struc2 = CORRESPONDING #( APPENDING ( deep_struc2 ) deep_struc1 ).

Zusatz 5

... DEEP APPENDING ( base ) ...

Wirkung

Diese Kombination wirkt auf zwei gleichnamige Komponenten, die beide interne Tabellen sind. Hiermit wird sichergestellt, dass die geschachtelten Zieltabellen nicht gelöscht werden. Darüber hinaus werden die Zeilen der geschachtelten Quelltabellen angehängt. Die Wertezuordnung mit den angehängten Zeilen verläuft wie bei der Verwendung vom Operator CORRESPONDING mit dem Zusatz DEEP. Daher erfolgt die Wertezuordnung nur für gleichnamige Komponenten in der geschachtelten Tabelle.

Hinweis

Der Zusatz APPENDING hängt die Zeilen einer geschachtelten Tabelle an und behält die ursprünglichen Zeilen. Die explizite Angabe des Zusatzes BASE ist hier möglich, aber nicht notwendig. Das heißt, dass die folgende Syntax die gleiche Wirkung hat:

struc2 = CORRESPONDING #( DEEP APPENDING ( struc2 ) struc1 ).
struc2 = CORRESPONDING #( DEEP APPENDING BASE ( struc2 ) struc1 ).

Beispiel

Im folgenden Quelltextausschnitt aus DEMO_CORRESPONDING_VARIANTS_ST wird die Variante mit tiefen Strukturen, demonstriert, die interne Tabellen als Komponenten enthalten.

deep_struc2 = CORRESPONDING #( DEEP APPENDING ( deep_struc2 ) deep_struc1 ).






CL_GUI_FRONTEND_SERVICES - Frontend Services   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 15589 Date: 20240523 Time: 161811     sap01-206 ( 252 ms )