Show TOC Anfang des Inhaltsbereichs

Die Anweisungen TYPES und DATA  Dokument im Navigationsbaum lokalisieren

Jedes ABAP-Programm kann seine eigenen Datentypen mit Hilfe der Anweisung

TYPES dtype [TYPE type|LIKE dobj] ...

definieren und eigene Variablen oder Instanzattribute von Klassen mit Hilfe der Anweisung

DATA var [{TYPE type}|{LIKE dobj}] ...

deklarieren.

Innerhalb eines Programms oder einer Klasse können Prozeduren nochmals eigene lokale Datentypen und lokale Variablen definieren. Lokale Variablen in Prozeduren verschatten gleichnamige Variablen im Rahmenprogramm bzw. der Klasse.

Beim Anlegen von Datentypen und Datenobjekten gibt es einige Namenskonventionen, die auch für andere programmlokale Definitionen, wie z. B. Prozeduren, gelten. Diese finden Sie mit allen Details in der Schlüsselwortdokumentation beschrieben.

Die Zusätze TYPE und LIKE

Die Zusätze TYPE type bzw. LIKE dobj werden in verschiedenen ABAP-Anweisungen verwendet. Je nach Syntax und Kontext können die Zusätze dabei eine andere Bedeutung haben:

·        Definition von programmlokalen Typen

·        Deklaration von Datenobjekten

·        Dynamische Erzeugung von Datenobjekten

·        Typisierung von Formalparametern in Unterprogrammen

·        Typisierung von Formalparametern in Methoden

·        Typisierung von Feldsymbolen

Konstruktion neuer Datentypen

Mit dem Zusatz TYPE können in den ABAP-Anweisungen TYPES, DATA, CONSTANTS und STATICS neue Datentypen konstruiert werden. In der Anweisung TYPES sind dies eigenständige programmlokale Datentypen. In den anderen Anweisungen sind es Attribute von neuen Datenobjekten d.h. die neu definierten Datentypen bestehen nicht eigenständig. Sie sind an die Datenobjekte gebunden. Man kann nicht mit dem TYPE- sondern nur mit dem LIKE-Zusatz auf sie verweisen.

Für die Konstruktion neuer Datentypen kann der TYPE-Zusatz mit folgenden Typ-Konstruktoren verwendet werden:

·        Konstruktion von Referenztypen

REF TO type|dobj

·        Konstruktion von Strukturierte Datentypen

BEGIN OF struc_type.
  ...
END OF struc_type.

·        Konstruktion von Tabellentypen

tabkind OF linetype [WITH key]

Solche Datentypen sind nur während der Laufzeit eines ABAP Programms vorhanden.

Bezug auf bekannte Datentypen oder Datenobjekte

Programmlokale Datentypen können in der TYPES-Anweisung auch mit Bezug auf bekannte Datentypen bzw. Datenobjekte durch den TYPE- bzw. LIKE-Zusatz definiert werden. Dies ist vor allem bei selbstdefinierten elementaren Datentypen der Fall. Verwendet man die Zusätze TYPE type oder LIKE dobj bei der Anweisung DATA zur Deklaration von Variablen, liegt der Datentyp von var bereits vor der Deklaration vollständig fest.

Die bekannten Typen bzw. Datenobjekte, auf die verwiesen wird, müssen an der Definitionsstelle des Datentyps bzw. an der Deklarationsstelle der Variablen sichtbar sein.

Ein bekannter Datentyp kann sein:

·        ein eingebauter ABAP-Typ, auf den mit dem TYPE-Zusatz verwiesen wird.

·        ein bereits vorhandener programmlokaler Datentyp, auf den mit dem TYPE-Zusatz verwiesen wird.

·        der Datentyp eines programmlokalen Datenobjekts, auf den mit dem LIKE-Zusatz verwiesen wird.

·        ein Datentyp im ABAP Dictionary, auf den mit dem TYPE-Zusatz verwiesen wird. Aus Kompatibilitätsgründen zu vorhergehenden Releases kann auch mit dem LIKE-Zusatz auf Datenbanktabellen und flache Strukturen des ABAP Dictionary verwiesen werden. In neuen Programmen sollte aber auch hier der TYPE-Zusatz verwendet werden.

Der LIKE–Zusatz zieht einem sichtbarem Datenobjekt seine technischen Eigenschaften (Attribute) ab. Als Faustregel kann gelten, dass man sich mit LIKE auf alle mit DATA (oder ähnlichen Anweisungen) deklarierten Datenobjekte beziehen kann, die im aktuellen Kontext sichtbar sind. Dabei muss nur die Deklaration des Datenobjekts bekannt sein. Es ist völlig unerheblich, ob das Datenobjekt während dem LIKE-Bezug schon physisch im Speicher existiert oder nicht.

·        Prinzipiell sind die programmlokale Datenobjekte des gleichen Programms sichtbar. Dabei ist wie bei programmlokalen Datentypen zwischen lokalen Datenobjekten in Prozeduren und globalen Datenobjekten zu unterscheiden. In Prozeduren definierte Datenobjekte verschatten gleichnamige Datenobjekte, die im globalen Deklarationsteil definiert werden.

·        Weiterhin kann man sich auch auf die Datenobjekte anderer sichtbarer ABAP-Programme beziehen. Dies sind z.B. die sichtbaren Attribute von globalen Klassen in Class-Pools. Wenn eine globale Klasse cl_globalbeispielsweise ein öffentliches Instanzattribut oder statisches Attribut attr enthält, kann man sich in einem beliebigen ABAP-Programm wie folgt darauf beziehen:

DATA dref TYPE REF TO cl_global.

DATA:  f1 LIKE cl_global=>attr,
       f2 LIKE dref->attr.

Es kann also über den Klassennamen auf die Eigenschaften von Instanzattributen zugegriffen werden und eine Referenzvariable kann für den gleichen Zweck verwendet werden, ohne dass zuvor ein Objekt zu erzeugt wird. Die Eigenschaften der Attribute einer Klasse sind also instanzunabhängig und gehören zu den statischen Eigenschaften einer Klasse.

Beispiel

TYPES: BEGIN OF struct,
         number_1 TYPE i,
         number_2 TYPE p DECIMALS 2,
       END OF struct.

DATA:  wa_struct TYPE struct,
       number    LIKE wa_struct-number_2,
       date      LIKE sy-datum,
       time      TYPE t,
       text      TYPE string,
       company   TYPE s_carr_id.

Es werden Variablen mit Bezug auf den programmlokalen Typ struct, auf eine Komponente eines bereits vorhandenen Datenobjekts wa_struct, auf das eingebaute Datenobjekt sy-datum, auf die eingebauten ABAP-Typen t und string und auf das Datenelement S_CARR_ID aus dem ABAP Dictionary deklariert.

Bezug auf generische Datentypen

Bezieht man sich in der TYPES oder DATA-Anweisung auf einen der generischen eingebauten ABAP-Typen fixer Länge (c, n, p, x), müssen die noch offenen technischen Eigenschaften spezifiziert werden:

TYPES|DATA var[(length)] TYPE type [DECIMALS dec]...

TYPES|DATA var TYPE type [LENGTH len] [DECIMALS dec]...

Beispiel

DATA: text1,
      text2 LENGTH 2,
      text3 TYPE c LENGTH 3,
      pack TYPE p DECIMALS 2 VALUE '1.225'.

Es werden drei Charactervariablen der Feldlängen ein Byte, zwei Byte und drei Byte sowie eine Variable für gepackte Zahlen der Feldlänge acht Byte mit zwei Dezimalstellen deklariert. Wenn das Programmattribut Festpunktarithmetik gesetzt ist, ist der Wert von pack 1,23.

Beispiel

Dieses Beispiel zeigt die Deklaration von elementaren Datenobjekten mit Bezug auf die eingebauten ABAP-Typen.

PROGRAM demo_elementary_data_objects.

DATA text1  TYPE c LENGTH 20.
DATA text2  TYPE string.
DATA number TYPE i.

text1 = 'The number'.
number = 100.
text2 = 'is an integer.'.

WRITE: text1, number, text2.

Das Programm erzeugt folgende Bildschirmausgabe:

The number              100 is an integer.

Es werden die Datenobjekte text1, text2 und number mit der Anweisung DATAdeklariert. Die technischen Eigenschaften werden mit Bezug auf die eingebauten ABAP-Typen c, string und i festgelegt. Den benannten Datenobjekten werden Werte aus unbenannten Literalen zugewiesen. Der Inhalt der benannten Datenobjekte wird auf die Ausgabeliste geschrieben.

Startwert angeben

Bei der Deklaration einer Variablen von elementarem Datentyp fixer Länge füllt die Anweisung DATA das erzeugte Datenobjekt automatisch mit dem datentypspezifischen Initialwert der Tabelle unter Eingebaute ABAP-Typen.

Der Startwert einer elementaren Variablen fixer Länge kann (auch innerhalb der Deklaration von Strukturen) mit dem Zusatz VALUE der DATA-Anweisung gefüllt werden:

DATA var ... VALUE val|{IS INITIAL}.

BeispielAngabe von Startwerten:

DATA: counter TYPE p VALUE 1,
      date    TYPE d VALUE '19980601',
      flag    TYPE n VALUE IS INITIAL.

Nach dieser Datendeklaration enthält z.B. die Zeichenkette flag ihren typspezifischen

Initialwert '0'.

Ende des Inhaltsbereichs