Ansicht
Dokumentation

ABENDATA_OBJECTS_STRUCTURE - DATA OBJECTS STRUCTURE

ABENDATA_OBJECTS_STRUCTURE - DATA OBJECTS STRUCTURE

ROGBILLS - Synchronize billing plans   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Strukturen

Strukturen sind Datenobjekte, die sich aus Komponenten beliebiger Datentypen zusammensetzen, die im Speicher hintereinander abgelegt sind. Der Datentyp einer Struktur ist ein strukturierter Typ:

  • In einem Programm wird ein strukturierter Typ bzw. eine Struktur mit den Zusätzen BEGIN OF ... END OF der Anweisungen TYPES, DATA etc. erzeugt. Eine dynamische Erzeugung ist mit den Methoden der RTTC möglich.

Folgende Abschnitte liefern eine Übersicht von Strukturen in ABAP.

Arten von Strukturen

Je nach Komponententyp sind Strukturen wie folgt benannt:

  • flache Strukturen enthalten keine tiefen Komponenten. Sie enthalten nur Komponenten mit flachem Datentyp, also Elementartypen c, n, d, t, decfloat16, decfloat34, f, b, s, i, int8, p, x, utclong oder wiederum Strukturen mit diesen Typen.
  • flache zeichenartige Strukturen sind flache Strukturen mit ausschließlich zeichenartigen Komponenten.
  • geschachtelte Strukturen enthalten mindestens eine Unterstruktur. Ob eine geschachtelte Struktur flach bzw. zeichenartig ist, richtet sich nach allen Komponenten.
  • tiefe Strukturen enthalten mindestens eine tiefe Komponente in einer beliebigen Schachtelungsebene. Mögliche tiefe Komponenten sind Strings, interne Tabellen, Boxed Components, Daten- oder Objektreferenzen.

Je nachdem ob eine Struktur statische oder dynamische Komponenten enthält, gehört sie formal auch zu den statischen bzw. dynamischen Datenobjekten.

Die folgende Abbildung verdeutlicht eine tiefe Struktur.

IMAGE @@ABDOC_Deep_Structure.gif@@567@@255@@

Hinweise

  • Der Begriff "geschachtelte Struktur" darf nicht mit dem Begriff "tiefe Struktur" verwechselt werden. Eine geschachtelte Struktur ist flach, wenn sie nur flache Komponenten und Unterkomponenten enthält. Eine geschachtelte Struktur ist tief, wenn sie mindestens eine tiefe Komponente oder Unterkomponente enthält.
  • Im Allgemeinen werden die Komponenten nicht direkt hintereinander im Speicher gespeichert, sondern es darf zu Ausrichtungslücken kommen.
  • Die maximale Anzahl Bytes in einer Struktur, inklusive Ausrichtungslücken, entspricht der maximalen Länge eines Feldes vom Typ x, die in der Konstante TYPE_X_MAX_LENGTH der Klasse CL_ABAP_ELEMDESCR gespeichert ist. Komponenten, die Referenzvariablen, Strings oder interne Tabelle sind, tragen jeweils 8 Byte bei.

Beispiel

Geschachtelte Struktur. Die Unterstruktur entsteht durch den Bezug auf die DDIC-Struktur SCARR für die zweite Komponente. Zugriff auf die Komponenten über den Strukturkomponenten-Selektor (-).

Beispiel

Tiefe Struktur. Folgende Struktur enthält ausschließlich tiefe Komponenten.

Verwendung von Strukturen

Strukturen werden an geeigneten Operandenpositionen entweder insgesamt oder komponentenweise adressiert. Für letzteres dient der Strukturkomponenten-Selektor (-). Bei Datenreferenzvariablen, die als Struktur typisiert sind, können auch mit dem Objektkomponenten-Selektor (->) die Komponenten einer Struktur adressiert werden, auf welche die Datenreferenzvariable zeigt.

Für Zuweisungen und Vergleiche, bei denen Strukturen beteiligt sind, gelten spezielle Konvertierungs- und Vergleichsregeln. Für flache zeichenartige Strukturen gilt die Besonderheit, dass sie an vielen Operandenpositionen wie zeichenartige Datenobjekte verwendet werden können und vom generischen ABAP-Typ clike umfasst werden. Sie können an fast allen Operandenpositionen aufgeführt werden, an denen elementare zeichenartige Datenobjekte möglich sind. Das ABAP-Laufzeit-Framework interpretiert die Struktur dann wie ein elementares Feld vom Typ c in der Länge der Struktur. Ausgenommen sind Operandenpositionen von Zeichenkettenausdrücken und Zeichenkettenfunktionen mit benannten Argumenten.

Für die Zuweisung von Strukturkomponenten gibt es eine spezielle Anweisung MOVE-CORRESPONDING, einen Konstruktoroperator CORRESPONDING und eine Systemklasse CL_ABAP_CORRESPONDING. Auch die INTO-Klausel von hat einen Zusatz CORRESPONDING. Die Anweisung ASSIGN hat eine spezielle Variante COMPONENT OF STRUCTURE für den dynamischen Zugriff auf Strukturkomponenten.

Beispiel

Inline-Deklaration einer Struktur wa in einer SELECT-Anweisung mit Bezug auf die DDIC-Datenbanktabelle SCARR. Zugriff auf die Komponenten der Struktur über den Strukturkomponenten-Selektor (-).

Beispiel

Erzeugung einer Struktur als anonymes Datenobjekt mit dem Typ der DDIC-Datenbanktabelle SCARR im ABAP Dictionary, auf das die Datenreferenzvariable dref zeigt. Verwendung über den Dereferenzierungsoperator (->*) als Zielbereich einer SELECT-Anweisung. Zugriff auf die Komponenten der Struktur über den Objektkomponenten-Selektor (->).

Beispiel

Das folgende Beispiel zeigt, dass sich eine flache Struktur mit rein zeichenartigen Komponenten sowohl wie eine Struktur als auch wie ein zeichenartiges Datenobjekt verhalten kann.

Verwendung von tiefen Strukturen

Da der Dateninhalt tiefer Strukturen nicht vollständig innerhalb der Speichergrenzen der Struktur selbst abgelegt ist und die tiefen Komponenten statt dessen Referenzen auf die eigentlichen Daten sind, gibt es bei der Verwendung tiefer Strukturen einige allgemeine Einschränkungen gegenüber der Verwendung flacher Strukturen:

  • Bei tiefen Strukturen ist kein Teilfeldzugriff über eine Offset-/Längenangabe möglich.
  • Tiefe Strukturen können nicht als zeichenartige Datenobjekte an Operandenpositionen verwendet werden und werden nicht vom generischen ABAP-Typ clike umfasst. Dies gilt insbesondere auch für Strukturen, die Strings enthalten.
  • Beim Casting von Datenobjekten mit ASSIGN müssen bei tiefen Strukturen die tiefen Komponenten bezüglich Typ und Position im Typ des Datenobjekts und im Typ des Feldsymbols übereinstimmen.
  • Das Ziel- bzw. Quellfeld der Anweisungen OPEN DATASET und TRANSFER darf keine tiefe Struktur sein.
  • Beim Remote Function Call können an einen TABLES-Parameter keine internen Tabellen mit tiefem Zeilentyp übergeben werden. An die übrigen Parameter können tiefe Strukturen übergeben werden, solange sie keine Referenzvariablen enthalten.

Hinweis

Diese Einschränkungen müssen insbesondere dann beachtet werden, wenn in bestehenden flachen zeichenartigen Strukturen einzelne Komponenten in Strings verwandelt werden, wodurch die gesamte Struktur tief wird.

Beispiel

Die folgenden beiden tiefen Strukturen sind nicht kompatibel und nicht ineinander konvertierbar.

DATA:
  BEGIN OF struct1,
    col1 TYPE c LENGTH 4,
    col2 TYPE REF TO data,
  END OF struct1,
  BEGIN OF struct2,
    col1a TYPE c LENGTH 2,
    col1b TYPE c LENGTH 2,
    col2 TYPE REF TO data,
  END OF struct2.

struct1 = struct2. "Syntax error

Verwendung von tiefen DDIC-Strukturen

Für im ABAP Dictionary definierte tiefe DDIC-Strukturen gelten die gleichen Einschränkungen wie für im ABAP-Programm deklarierte. Weitere Einschränkungen gibt es nur bei der Verwendung folgender in Klassen verbotener Sprachelemente, bei denen nur flache Strukturen des ABAP Dictionary angegeben werden können:

  • Anweisung TABLES für Tabellenarbeitsbereiche.

Diese Sprachelemente sind in Klassen verboten.

Boxed Components

Die Unterstrukturen geschachtelter Strukturen und strukturierte Komponenten von Klassen oder Interfaces können als Boxed Components deklariert werden.






Vendor Master (General Section)   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 14236 Date: 20240523 Time: 165208     sap01-206 ( 214 ms )