Ansicht
Dokumentation

ABENDATA_OBJECTS - DATA OBJECTS

ABENDATA_OBJECTS - DATA OBJECTS

RFUMSV00 - Advance Return for Tax on Sales/Purchases   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Datenobjekte

Datenobjekte sind Instanzen von Datentypen und die konkreten Daten, mit denen ein Programm zur Laufzeit arbeitet. Dies geschieht durch die Angabe von Datenobjekten in Operandenpositionen.

Erzeugung und Adressierung von Datenobjekten

Man unterscheidet zwischen:

  • Benannte Datenobjekte, die mit einer datendefinierenden Anweisungen statisch deklariert und über einen Namen angesprochen werden. Die typische datendefinierende Anweisung ist DATA. Benannte Datenobjekte werden zu Beginn der Lebenszeit eines Kontexts (Programm, Klasse, Objekt, Prozedur) vom ABAP-Laufzeit-Framework erzeugt und leben so lange wie ihr Kontext.
  • Literale, die im Quelltext eines Programms definiert und durch ihren Wert vollständig bestimmt werden.

Neben in Programmen deklarierten Datenobjekten, gibt es einen Satz eingebauter Datenobjekte, auf die in ABAP-Programmen immer zugegriffen werden kann. Zusätzlich werden von einigen Anweisungen implizit Datenobjekte erzeugt, die für spezielle Zwecke zur Verfügung stehen. Beispiele sind sum( ), cnt( ) im Rahmen der Gruppenstufenverarbeitung für Extrakte und title beim Anlegen von Selektionsbildern.

In folgendem Beispiel ist dref ein benanntes Datenobjekt, dessen Inhalt nach der Verwendung des Instanziierungsoperators NEW auf ein anonymes Datenobjekt zeigt. 555 ist ein numerisches Literal.

Datentypen von Datenobjekten

Jedes Datenobjekt hat einen bestimmten Datentyp, und jedes Datenobjekt belegt Speicher für die Daten. Der Datentyp eines Datenobjekts wird entweder durch Bezug auf einen eigenständigen Datentyp festgelegt oder beim Anlegen eines Datenobjekts als gebundener Datentyp erzeugt.

Der Datentyp eines Datenobjekts ist zur Laufzeit eines Programms immer eindeutig festgelegt und nicht änderbar. Bei anonymen Datenobjekten bestimmt dieser Datentyp den dynamischen Typ der zugehörigen Referenzvariablen.

In folgendem Beispiel ist c_20 ein eigenständiger Datentyp, der für die Deklaration des Datenobjekts text1 verwendet wird. Das Datenobjekt text2 hat dagegen einen gebundenen Datentyp.

Variable und konstante Datenobjekte

Bezüglich der Änderbarkeit von Datenobjekten kann zwischen variablen und konstanten Datenobjekten unterschieden werden. Variable können ihren Wert zur Laufzeit ändern. Konstanten behalten immer ihren initialen Wert.

Auch Literale und Textsymbole sind konstant. Weiterhin sind Eingabeparameter in Prozeduren in der Regel nicht änderbar, wenn dadurch der zugeordnete Aktualparameter geändert würde.

Unveränderliche Variablen sind eine spezielle Art von Variablen. Einer unveränderlichen Variablen kann an genau einer Schreibposition eines Kontextsein Wert zugewiesen werden. Unveränderliche Variablen werden inline mit dem Deklarationsoperator FINAL(var) deklariert. Obwohl eine und dieselbe Deklaration nur einmal in einem Kontext vorkommen kann, kann sie - z.B. in einer Schleife - mehrmals verarbeitet werden und es können dann unterschiedliche Werte zugewiesen werden.

Hinweis

Unveränderliche Variablen können die Robustheit von Programmen verbessern, wenn eine Variable nur einmal an einer Schreibposition gefüllt werden soll und danach nur noch Lesezugriffe erfolgen sollen.

Beispiel

In folgendem Beispiel sind true und false Konstanten, die der Variable flag zugewiesen werden können.

TYPES bool TYPE c LENGTH 1.

CONSTANTS: true  TYPE bool VALUE 'X',
           false TYPE bool VALUE ' '.

DATA flag TYPE bool.

IF ...
  flag = true.
ELSE.
  flag = false.
ENDIF.

Statische und dynamische Datenobjekte

Wir unterscheiden statische Datenobjekte, bei denen alle technischen Eigenschaften schon bei der Deklaration festgelegt werden müssen, und dynamische Datenobjekte bei denen der Speicherbedarf bzw. ihre Größe erst zur Laufzeit festgelegt wird. Dynamische Datenobjekte sind Strings und interne Tabellen.

Die Länge von Strings ist nach ihrer Deklaration gleich null und ändert sich während der Laufzeit je nach zugewiesenem Inhalt. Nach ihrer Deklaration enthalten interne Tabellen keine Zeilen. Die Anzahl der Zeilen ist beliebig und wird zur Laufzeit dynamisch beim Füllen der internen Tabelle festgelegt.

Strukturen, die dynamische Komponenten enthalten sind dadurch ebenfalls dynamische Datenobjekte.

Beispiel

In folgendem Beispiel ist text_field ein statisches und text_string ein dynamisches Datenobjekt. Bei der Zuweisung des Systemfelds sy-abcde an text_field wird ab dem zehnten Zeichen abgeschnitten. text_string nimmt alle Zeichen auf und ist nach der Zuweisung so lang wie sy-abcde.

Flache und tiefe Datenobjekte

Alle statischen Datenobjekte außer Referenzvariablen sind flach. Ihr Inhalt entspricht den tatsächlichen Arbeitsdaten. Dynamische Datenobjekte und Referenzvariablen sind tief. Ihr Inhalt sind Referenzen, die auf den tatsächlichen Inhalt verweisen. Bei den dynamischen Datenobjekten (Strings und interne Tabellen) ist die Behandlung der Referenzen implizit, bei Referenzvariablen ist sie explizit.

Strukturen, die keine tiefen Komponenten enthalten sind flache Strukturen. Strukturen, die mindestens eine tiefe Komponente enthalten sind tiefe Strukturen.

In folgendem Beispiel ist struct1 eine flache und struct2 eine tiefe Struktur. In der flachen Struktur sind die zeichenartigen Komponenten direkt hintereinander im Speicher abgelegt und es ist ein Teilfeldzugriff möglich. Bei der tiefen Struktur enthalten die Komponenten Zeiger auf die tatsächlichen Daten und es ist kein Teilfeldzugriff möglich.

DATA(section2) = struct2+3(4). "Syntax error






General Material Data   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 9845 Date: 20240523 Time: 160250     sap01-206 ( 138 ms )