Ansicht
Dokumentation

ABAPASSIGN_DYNAMIC_COMPONENTS - ASSIGN DYNAMIC COMPONENTS

ABAPASSIGN_DYNAMIC_COMPONENTS - ASSIGN DYNAMIC COMPONENTS

Addresses (Business Address Services)   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

ASSIGN, dynamic_components

Kurzreferenz



... ${ struc-(comp) $}
  $| ${ dref->(comp_name) $}
  $| ${ COMPONENT comp OF STRUCTURE struc $} ...


Alternativen:


1. ... struc-(comp)
2. ... dref->(comp_name)
3. ... COMPONENT comp OF STRUCTURE struc

Wirkung

Mit diesen Alternativen zur Angabe des Speicherbereiches mem_area der Anweisung ASSIGN wird dynamisch auf die Komponenten von Strukturen zugegriffen.

Alternative 1

... struc-(comp)


Wirkung

Diese Variante von mem_area weist dem Feldsymbol den Speicherbereich einer in comp angegebenen Komponente einer Struktur struc zu. struc ist eine Ergebnisposition. Die Struktur kann als Datenobjekt oder als schreibbarer Ausdruck angegeben werden. Wird zur Laufzeit festgestellt, dass struc keine Struktur ist, kommt es zum Laufzeitfehler STRUCTURE_ILLEGAL.

Für comp kann entweder ein zeichenartiges Datenobjekt oder ein numerisches Datenobjekt vom Typ i angegeben werden:

  • Wenn comp zeichenartig ist, wird sein Inhalt als Name der Komponente interpretiert. Die Bezeichnung unterscheidet nicht zwischen Groß- und Kleinschreibung. Sie kann Offset- und Längenangaben, Strukturkomponentenselektoren und Komponentenselektoren enthalten.
  • Wenn comp vom Typ i ist, wird sein Wert als Position der Komponente in der Struktur interpretiert. Falls der Wert von comp 0 ist, wird dem Feldsymbol der Speicherbereich der gesamten Struktur zugewiesen.
  • Hat comp einen anderen Typ, kommt es zu einem Syntax- bzw. Laufzeitfehler.

Wenn die angegebene Zeile nicht gefunden wird, wird sy-subrc auf 4 gesetzt.

Beispiel

Zwei dynamische Zuweisungen mit dynamischer Angabe von Komponenten:

  • In der ersten Zuweisung wird die Struktur direkt angegeben und die Komponente durch ihre Position angegeben.
  • In der zweiten Zuweisung wird die Struktur durch einen schreibbaren Ausdruckoperator NEW angegeben und die Komponente wird durch ihren Namen angegeben, der eine Offset-/Längenangabe besitzen kann.



Alternative 2

... dref->(comp_name)

Wirkung

Mit dieser Form wird auf Komponenten von Strukturen zugegriffen, die über eine Datenreferenzvariable dref referenziert werden. dref kann eine beliebige Datenreferenzvariable sein, die auf eine Struktur zeigt, welche die in einem zeichenartigen Feld comp_name angegebene Komponente enthält.

Der Komponentenname muss nicht in Großbuchstaben angegeben sein. Er kann Offset-/Längenangaben, Strukturkomponenten-, Objektkomponenten- und Klassenkomponenten-Selektoren enthalten, um Teile oder referenzierte Objekte der Komponente zuzuweisen.

Hinweis

Diese Syntaxform entspricht dem dynamischen Zugriff auf Objektkomponenten.

Beispiel

Dynamische Zuweisung einer Komponente einer Struktur an ein Feldsymbol. Der Standardwert comp_name kennzeichnet eine Unterfolge einer Komponente einer Unterstruktur.

Alternative 3

... COMPONENT comp OF STRUCTURE struc

Wirkung

Mit dieser Varianten von mem_area wird dem Feldsymbol der Speicherbereich einer Komponente comp einer Struktur struc zugewiesen.

Bei struc handelt es sich um eine Ergebnisposition. Die Struktur kann als Datenobjekt oder als schreibbarer Ausdruck angegeben werden. Wenn struc als Ausdruck angegeben ist, muss dessen Ergebnis strukturiert sein. Wenn struc als Datenobjekt angegeben ist, muss dieses nicht strukturiert sein.

Bei comp handelt es sich um eine zeichenartige oder numerische Ausdrucksposition. Die Auswertung richtet sich nach dem Datentyp von comp:

  • Hat das Feld comp einen textartigen Typ (c oder string) oder den einer flachen Struktur, die ausschließlich zeichenartige Komponenten enthält, wird sein Inhalt als Name der Komponente interpretiert. Der Name muss in Großbuchstaben angegeben sein. Er kann Offset-/Längenangaben, Strukturkomponenten-Selektoren und Komponentenselektoren für die Zuweisung von Attributen in Klassen bzw. Objekten sowie von strukturierten Datenobjekten enthalten.
  • Hat das Feld comp einen nicht textartigen elementaren Typ, wird der Inhalt in den Typ i konvertiert und als Position der Komponente in der Struktur interpretiert. Falls der Wert von comp 0 ist, wird dem Feldsymbol der Speicherbereich der gesamten Struktur zugewiesen.
  • Hat comp einen anderen Typ kommt es zu einem Syntax- bzw. Laufzeitfehler.

Falls ein als Datenobjekt angegebener Operand struc keine Struktur ist oder die angegebene Komponente nicht gefunden wird, wird sy-subrc auf 4 gesetzt.

Hinweise

  • Die Identifikation einer Komponente über ihren Namen ist deutlich weniger performant als über ihre Position, da damit ein höherer interner Aufwand verbunden ist. Die Verwendung von COMPONENTS OF ist aber immer performanter als die Angabe des Namens hinter dem Strukturkomponenten-Selektor innerhalb einer vollständig dynamischen Angabe in einem eingeklammerten Datenobjekt name (siehe ausführbares Beispiel).
  • Wenn die Struktur struc als Tabellenausdruck angegeben ist und die entsprechende Zeile nicht gefunden wird, kommt es zur Ausnahme CX_SY_ITAB_LINE_NOT_FOUND.
  • Für struc können schreibbare Ausdrücke aber keine anderen Ausdrücke angegeben werden, da nur diese Ausdrücke ein nicht temporäres Ergebnis haben können. Eine Zuweisung einer Komponente einer temporären Struktur an ein Feldsymbol hätte keinen Sinn.
  • Es wird empfohlen, bei der Angabe von struc als Datenobjekt nur Strukturen anzugeben und dies falls notwendig vorher zu überprüfen. Die alleinige Auswertung von sy-subrc reicht ansonsten nicht aus, um festzustellen warum eine Zuweisung nicht erfolgreich war.

Beispiel

Zuweisung aller Komponenten einer Struktur an ein Feldsymbol in einer Schleife. In jedem Schleifendurchlauf wird die Komponente zugewiesen, deren Position durch den Schleifenindex bestimmt wird.

Beispiel

Die folgenden beiden Methoden zeigen die dynamische Zuweisung der Komponenten einer Struktur, die an den Parameter para der Methoden übergeben wird, an ein Feldsymbol comp>.

  • In der ersten Implementierung wird kein Gebrauch von RTTI gemacht. Über die Anweisung DESCRIBE FIELD wird kontrolliert, ob das übergebene Datenobjekt eine Struktur ist. In einer DO-Schleife werden dann die Komponenten dem Feldsymbol nacheinander zugewiesen.
  • In der zweiten Implementierung wird Gebrauch von RTTI gemacht. Durch den Downcast des Typbeschreibungsobjekts für das übergebene Datenobjekt auf die Klasse CL_ABAP_STRUCTDESCR wird sichergestellt, dass es sich um eine Struktur handelt. In einer Schleife über die Komponententabelle COMPONENTS werden die Komponenten über ihren Namen dem Feldsymbol zugewiesen.

Zuweisung einer Komponente einer Zeile einer internen Tabelle an ein Feldsymbol.

Zuweisung einer Komponente einer Zeile einer internen Tabelle an ein Feldsymbol.

Feldsymbole, dynamische Strukturkomponenten






CPI1466 during Backup   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 10362 Date: 20240427 Time: 173718     sap01-206 ( 154 ms )