Anfang des Inhaltsbereichs

Datentypen im ABAP Dictionary Dokument im Navigationsbaum lokalisieren

Im ABAP Dictionary können programmübergreifende Datentypen definiert werden. Auf diese Datentypen kann in jedem ABAP-Programm des R/3-Systems mit dem TYPE-Zusatz entsprechender ABAP-Anweisungen Bezug genommen werden.

Die Definition der Dictionary-Datentypen erfolgt mit dem Werkzeug Strukturlink Dictionary der ABAP Workbench. Dort sind folgende Eingabefelder von Bedeutung für Datentypen:

Diese Grafik wird im zugehörigen Text erklärt

Auf dem Einstiegsbild sind drei Gruppen zu unterscheiden:

Datenbanktabellen und Views

Eine der wichtigsten Aufgaben des Strukturlink ABAP Dictionarys ist die Verwaltung von Datenbanktabellen in der zentralen Datenbank des R/3-Systems. Hierfür werden im Dictionary Metabeschreibungen von Datenbanktabellen angelegt und daraus physische Datenbanktabellen auf der Datenbank erzeugt. Views sind logische Sichten auf eine oder mehrere Tabellen.

Bei der Beschreibung einer Datenbanktabelle, werden die Tabellenzeilen aus Einzelfeldern bzw. Spalten zusammengesetzt. Jeder Spalte muß dabei ein elementarer Datentyp zugewiesen werden. Die elementaren Datentypen des Dictionarys sind die Datenelemente. Ähnlich wie Datenobjekte in ABAP-Programmen, haben Datenbanktabellen und Views somit Datentypen als Attribute. Eine Zeile einer Datenbanktabelle bzw. Views hat immer den Datentyp einer flachen Struktur, der sich aus einzelnen Datenelementen zusammensetzt.

In ABAP-Programmen kann mit dem TYPE-Zusatz auf den Datentyp einer Datenbanktabelle oder eines Views Bezug genommen werden. Dabei kann entweder auf die gesamte Struktur oder auf deren Komponenten zugegriffen werden:

... TYPE <dbtab> ...

bezieht sich auf den komplexen Datentyp der Struktur,

... TYPE <dbtab>-<ci> ...

bezieht sich auf den elementaren Datentyp der Komponente <ci>.

Wenn ein komplexer Datentyp <t> mit

TYPES <t> TYPE <dbtab>.

als Struktur definiert wird, erben die Komponenten des Datentyps <t> die Namen der Komponenten der Datenbanktabelle bzw. Views und sind im Programm über <t>-<ci> ansprechbar.

Aus Kompatibilitätsgründen mit vorhergehenden Releases kann in allen Programmen außer innerhalb von Klassen auch mit dem LIKE-Zusatz auf Datenbanktabellen bzw. Views Bezug genommen werden. Dies kommt daher, daß das Dictionary zwar nur reine Metabeschreibungen bzw. Datentypen enthält, daß in früheren Releases aber mehr die physische Präsenz der Datenbanktabellen als Objekte auf der Datenbank im Vordergrund stand.

Die Definition programmlokaler Datentypen mit Bezug auf Datenbanktabellen bzw. Views ist ein Grundpfeiler der Bearbeitung von Daten aus Datenbanktabellen in ABAP. Datenobjekte mit solchen Datentypen dienen als typgerechte Arbeitsbereiche für Daten, die aus Datenbanktabellen in ABAP-Programme eingelesen werden und umgekehrt. ABAP Open SQL unterstützt dabei die gesamte Bandbreite vom Einlesen einzelner Felder bis zur Übernahme gesamter Datenbanktabellen oder Views in interne Tabellen.

Beispiel

TYPES: city type spfli-cityfrom,
       spfli_type TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.

DATA: wa_city  TYPE city,
      wa_spfli TYPE spfli_type.

...

SELECT SINGLE cityfrom FROM spfli
                       INTO wa_city
                       WHERE carrid = 'LH' AND connid = '400'.

...

SELECT * FROM spfli INTO TABLE wa_spfli.

...

In diesem Beispiel werden ein elementarer Datentyp CITY mit Bezug auf ein einzelnes Feld der Datenbanktabelle SPFLI und eine interne Tabelle SPFLI_TYPE, deren Zeilentyp der Struktur der Datenbanktabelle entspricht, definiert. Mit der Open SQL-Anweisung SELECT werden Daten in entsprechend deklarierte Datenobjekte eingelesen.

Datentypen

Dies sind die eigentlichen Datentypen im ABAP Dictionary. Sie ermöglichen die programmübergreifende Definition der elementaren Typen, Referenztypen und komplexen Typen des ABAP-Typkonzepts. Die Datentypen von Datenbanktabellen sind eine Teilmenge aller möglichen Typen, nämlich flache Strukturen. Programmübergreifende Objekttypen (Klassen und Interfaces) werden nicht im ABAP Dictionary, sondern in der Klassenbibliothek verwaltet und mit dem Werkzeug Class Builder erstellt.

Ein detaillierte Beschreibung der Datentypen und ihrer Definition im Dictionary findet sich unter Strukturlink Typen in der Dokumentation zum ABAP Dictionary. Im folgenden wird nur kurz auf die einzelnen Typen eingegangen und wie aus ABAP-Programmen auf sie verwiesen wird.

Datenelemente

Die Datenelemente des Dictionarys beschreiben Einzelfelder. Sie sind die kleinsten nichtzerlegbaren Einheiten der unten aufgeführten komplexen Typen und sie dienen der Typisierung von Spalten in Datenbanktabellen. Datenelemente sind entweder elementare Typen oder Referenztypen.

Elementare Typen sind Teil des zweistufigen Domänenkonzepts für Einzelfelder im Dictionary. Der elementare Typ trägt semantische Eigenschaften wie Texte, Wertetabellen und Dokumentation und hat einen Datentyp. Der Datentyp kann auf zwei verschiedene Möglichkeiten festgelegt werden:

Elementaren Typen kann ein eingebauter Typ des ABAP Dictionarys und die Anzahl der Stellen zugewiesen werden. Das ABAP Dictionary kennt wesentlich mehr eingebaute Typen als die Programmiersprache ABAP. Außerdem bedeutet die Anzahl der Stellen hier nicht die Feldlänge in Bytes, sondern die Anzahl der gültigen Positionen ohne Aufbereitungszeichen. Der Unterschied zwischen den Datentypen rührt daher, daß die eingebauten Datentypen des Dictionarys mit den externen Datentypen der von R/3 unterstützten Datenbanktabellen verträglich sein müssen.

Beim Bezug von Datentypen auf Datentypen des Dictionarys in ABAP-Programmen, werden die eingebauten Dictionary-Typen wie folgt in eingebaute ABAP-Typen konvertiert:

Dictionary Typ

Bedeutung

Zulässige Stellen n

ABAP Typ

DEC

Rechen-/Betragsfeld

1-31, in Tabellen 1-17

P((n+1)/2)

INT1

1-Byte-Integer

3

Nur intern

INT2

2-Byte-Integer

5

Nur intern

INT4

4-Byte-Integer

10

I

CURR

Währungsfeld

1-17

P((n+1)/2)

CUKY

Währungsschlüssel

5

C(5)

QUAN

Menge

1-17

P((n+1)/2)

UNIT

Einheit

2-3

C(n)

PREC

Genauigkeit

16

Nur intern

FLTP

Gleitpunktzahl

16

F(8)

NUMC

Numerischer Text

1-255

N(n)

CHAR

Character

1-255

C(n)

LCHR

Long Character

256-max

C(n)

STRING

variable lange Zeichenfolge

1-max

STRING

RAWSTRING

variable lange Bytefolge

1-max

XSTRING

DATS

Datum

8

D

ACCP

Buchungsperiode JJJJMM

6

N(6)

TIMS

Zeit HHMMSS

6

T

RAW

Bytefolge

1-255

X(n)

LRAW

Lange Bytefolge

256-max

X(n)

CLNT

Mandant

3

C(3)

LANG

Sprache

intern 1, extern 2

C(1)

(Bei LCHR und LRAW ist max der Wert eines vorangehenden INT2-Felds, bei LANG bedeutet intern im Dictionary und extern Darstellung auf der Benutzerschnittstelle).

Die technischen Eigenschaften werden von einer Domäne übernommen. Domänen sind eigenständige Repository-Objekte des Dictionary. Sie können die technischen Eigenschaften von Datenelementen tragen. Eine Domäne kann von beliebig vielen Datenelementen verwendet werden. Beim Anlegen einer Domäne müssen ein Dictionary Datentyp (siehe Tabelle oben) und die Anzahl der Stellen angegeben werden.

Referenztypen beschreiben Einzelfelder, die Referenzen auf globale Klassen und Interfaces der ABAP Klassenbibliothek enthalten können.

In ABAP-Programmen kann mit dem TYPE-Zusatz direkt auf ein Datenelement verwiesen werden. Dabei werden die eingebauten Dictionary-Datentypen der Domäne in die entsprechenden eingebauten ABAP-Typen konvertiert.

Wenn ein programmlokaler Datentyp mit Bezug auf ein Datenelement definiert wird:

TYPES <t> TYPE <data element>.

werden die semantischen Eigenschaften des Datenelements ebenfalls übernommen und sind beispielsweise bei der Darstellung eines Datenobjekts vom Typ <t> auf einem Bildschirm nutzbar. Da alle Datentypen im Dictionary auf Datenelementen beruhen, enthalten auch alle Datentypen die entsprechenden semantischen Eigenschaften.

Beispiel

TYPES company TYPE s_carr_id.

DATA wa_company TYPE company.

wa_company = 'UA '.

WRITE: 'Company:', wa_company.

In diesem Beispiel wird ein programmlokaler Typ COMPANY mit Bezug auf das Datenelement S_CARR_ID definiert. Das Datenelement ist mit der gleichnamigen Domäne S_CARR_ID verknüpft. Diese Domäne definiert die technischen Eigenschaften als Datentyp CHAR der Länge 3. Der programmlokale Datentyp COMPANY hat daher den eingebauten ABAP-Typ C(3). Weiterhin übernimmt COMPANY die semantischen Eigenschaften des Datenelements. Im obigen Beispiel wird ein Datenobjekt WA_COMPANY mit diesem Typ deklariert und auf einer Liste ausgegeben. Wenn der Benutzer auf dem Ausgabefeld die F1-Hilfe wählt, erscheint der im ABAP Dictionary hinterlegte Hilfetext in einem Dialogfenster.

Diese Grafik wird im zugehörigen Text erklärt

Strukturen

Strukturen sind Folgen von beliebigen anderen Datentypen des ABAP Dictionarys, also von Datenelementen, Strukturen, Tabellentypen oder Datenbanktabellen. Beim Anlegen einer Struktur im Dictionary muß jeder Komponente ein Name und ein Datentyp gegeben werden.

In ABAP-Programmen kann mit dem TYPE-Zusatz direkt auf eine Struktur verwiesen werden.

Wenn ein programmlokaler Datentyp mit Bezug auf eine Struktur im Dictionary definiert wird:

TYPES <t> TYPE <structure>.

wird die Konstruktionsvorschrift der Struktur in eine programmlokale Struktur (Feldleiste) <t> umgesetzt und die eingebauten Dictionary-Datentypen aus den Domänen der in der Struktur enthaltenen Datenelemente werden in die entsprechenden eingebauten ABAP-Typen konvertiert. Die semantischen Eigenschaften der Datenelemente werden für die entsprechenden Komponenten der programmlokalen Struktur übernommen. Die Komponenten der programmlokalen Struktur <t> erben die Namen der Struktur aus dem Dictionary.

Aus Kompatibilitätsgründen mit vorhergehenden Releases kann in ABAP-Programmen (aber nicht in Klassen) auch mit dem LIKE-Zusatz auf Strukturen im Dictionary verwiesen werden.

Beispiel

Die Struktur STRUCT sei im Dictionary wie folgt definiert:

Feldname

Typname

Kurzbeschreibung

COL1

CHAR01

Characterfeld der Länge 1

COL2

CHAR08

Characterfeld der Länge 8

COL3

CHAR10

Characterfeld der Länge 10

Die Typen CHAR01 bis CHAR10 sind Datenelemente mit entsprechenden Domänen. In ABAP kann auf die Struktur verwiesen werden:

TYPES struct_type TYPE struct.

DATA wa TYPE struct_type.

wa-col1 = '1'.
wa-col2 = '12345678'.
wa-col3 = '1234567890'.

Es wird eine programmlokale Struktur STRUCT_TYPE und ein entsprechendes Datenobjekt WA angelegt. Die einzelnen Komponenten sind über ihren ursprünglichen Namen ansprechbar.

Tabellentypen

Tabellentypen sind im Dictionary abgelegte Konstruktionsvorschriften für interne Tabellen. Beim Anlegen eines Tabellentyps im Dictionary wird der Zeilentyp, die Zugriffsart und der Schlüssel festgelegt. Der Zeilentyp ein beliebiger Datentyp des Dictionarys, also ein Datenelement, eine Struktur, ein Tabellentyp oder der Typ einer Datenbanktabelle sein. Weiterhin können als Zeilentyp wie in einer Domäne auch direkt eingebaute Dictionary-Typen angegeben werden.

In ABAP-Programmen kann mit dem TYPE-Zusatz direkt auf einen Tabellentyp verwiesen werden.

Wenn ein programmlokaler Datentyp mit Bezug auf einen Tabellentyp im Dictionary definiert wird:

TYPES <t> TYPE <table>.

wird die Konstruktionsvorschrift des Tabellentyps in eine interne Tabelle <t> umgesetzt und die eingebauten Dictionary-Datentypen aus den Domänen der in dem Tabellentyp enthaltenen Datenelemente werden in die entsprechenden eingebauten ABAP-Typen konvertiert. Die semantischen Eigenschaften der Datenelemente werden für die entsprechenden Komponenten in den Zeilen der internen Tabelle übernommen.

Beispiel

Der Tabellentyp STRUCT_TABLE sei im Dictionary mit dem Zeilentyp STRUCT des obigen Beispiels definiert worden. In ABAP kann auf den Tabellentyp verwiesen werden:

TYPES table_type TYPE struct_table.

DATA: table_wa TYPE table_type,
      line_wa  LIKE LINE OF table_wa.

...

LOOP AT table_wa INTO line_wa.
  ...
  WRITE: line_wa-col1, line_wa-col1, line_wa-col1.
  ...
ENDLOOP.

Es wird eine interne Tabelle TABLE_TYPE definiert. Mit diesem Typ werden Datenobjekte TABLE_WA und daraus folgend LINE_WA deklariert. LINE_WA entspricht dem Zeilentyp des Tabellentyps im Dictionary, ist also kompatibel zur Struktur STRUCT.

Typgruppen

Vor Release 4.5A gab es im Dictionary keine eigenständigen Datentypen, auf die in ABAP-Programmen mit dem TYPE-Zusatz verwiesen werden konnte. Einen Bezug zwischen programmlokalen Datentypen und Dictionary-Datentypen gab es bis dahin nur für flache Strukturen. Dem programmlokalen Datentyp Feldleiste entsprachen im Dictionary die Struktur von Datenbanktabellen und eigenständige Strukturen. Aus ABAP-Programmen konnte man nur mit dem LIKE-Zusatz auf Datenbanktabellen und Strukturen des Dictionary verweisen. Dabei war auch der Verweis auf einzelne Komponenten der Dictionary-Typen möglich. Komplexe programmlokale Datentypen wie interne Tabellen oder tiefe Strukturen hatten bis dahin keine Entsprechung im Dictionary. Als Zwischenlösung standen seit Release 3.0 auf der Include-Technik basierenden Typgruppen (englisch Type Pools) zur Verfügung, um beliebige mit TYPES definierte Datentypen programmübergreifend im Dictionary ablegen zu können.

Die Definition einer Typgruppe ist ein Stück ABAP-Code, das im ABAP-Editor gepflegt wird. Die erste Anweisung für die Typgruppe <pool> ist immer:

TYPE-POOL <pool>.

Danach folgt die Definition von Datentypen mit der Anweisung TYPES, wie unter Programmlokale Datentypen beschrieben. Weiterhin können programmübergreifende Konstanten mit der Anweisung CONSTANTS deklariert werden. Alle Namen dieser Datentypen und Konstanten müssen mit dem Namen der Typgruppe und einem Unterstrich beginnen: <pool>_

In einem ABAP-Programm müssen Typgruppen vor ihrer Verwendung mit folgender Anweisung bekanntgemacht werden:

TYPE-POOLS <pool>.

Bei Verwendung dieser Anweisung können alle Datentypen und Konstanten, die in der Typgruppe <pool> definiert sind, im Programm verwendet werden. Es können mehrere Typgruppen in einem Programm verwendet werden.

Beispiel

Die Typgruppe HKTST sei wie folgt im ABAP-Dictionary angelegt:

TYPE-POOL hktst.

TYPES: BEGIN OF hktst_typ1,
                col1(10) TYPE c,
                col2 TYPE i,
       END OF hktst_typ1.

TYPES hktst_typ2 TYPE p DECIMALS 2.

CONSTANTS hktst_eleven TYPE i VALUE 11.

In dieser Typgruppe sind zwei Datentypen HKTST_TYP1 und HKTST_TYP2 sowie eine Konstante HKTST_ELEVEN mit dem Wert 11 definiert.

Jedes ABAP-Programm kann diese Definition über die Anweisung TYPE-POOLS verwenden:

TYPE-POOLS hktst.

DATA: dat1 TYPE hktst_typ1,
      dat2 TYPE hktst_typ2 VALUE '1.23'.

WRITE: dat2, / hktst_eleven.

Die Ausgabe ist:

1,23

11

Die in der Typgruppe definierten Datentypen werden zur Deklaration von Datenobjekten mit der Anweisung DATA verwendet und der Wert der Konstanten ist, wie die Ausgabe zeigt, im Programm bekannt.

Ende des Inhaltsbereichs