Anfang des Inhaltsbereichs

Feldsymbole deklarieren Dokument im Navigationsbaum lokalisieren

Ein Feldsymbol wird mit der Anweisung

FIELD-SYMBOLS <FS> [<type>|STRUCTURE <s> DEFAULT <wa>].

deklariert. Bei Feldsymbolen sind spitze Klammern Teil der Syntax. Sie identifizieren Feldsymbole im Programmtext.

Ohne weiteren Zusatz können dem Feldsymbol <FS> Datenobjekte von beliebigem Datentyp zugewiesen werden. Bei der Zuweisung übernimmt das Feldsymbol die Attribute des Datenobjekts. Der Datentyp des zugewiesenen Datenobjekts wird zum aktuellen Datentyp des Feldsymbols.

Es ist zu beachten, daß die Zuweisung von Referenzvariablen und komplexen Datenobjekten zu untypisierten Feldsymbolen zwar möglich ist, daß ein solches Feldsymbol statisch aber einzig und allein als Zeiger auf das Feld im Speicher dienen kann und nicht die komplexen Typeigenschaften von Referenzen und komplexen Datenobjekten kennt, da es diese erst zur Laufzeit übernimmt. Solche Felder sind über den Namen des Feldsymbols nur im Ganzen ansprechbar, z.B. in einer MOVE-Anweisung. Spezifische Anweisungen wie z.B. CREATE OBJECT <FS> oder LOOP AT <FS> sind nicht möglich.

Feldsymbole typisieren

Der Zusatz <type> ermöglicht die Typisierung von Feldsymbolen. Bei der Zuweisung eines Datenobjekts an ein Feldsymbol wird überprüft, ob der Typ des zugewiesenen Datenobjekts verträglich mit der Typisierung des Feldsymbols ist. Bei Unverträglichkeit reagiert das System mit einem Syntax- oder Laufzeitfehler. Falls jedoch ein Casting von Datenobjekten mit Feldsymbolen durchgeführt werden soll, muß dies in der ASSIGN-Anweisung explizit angegeben werden. Dann wird die Typisierung des Feldsymbols für die Sicht auf das zugewiesene Datenobjekt verwendet.

Die Typisierung von Feldsymbolen folgt der gleichen Semantik wie die Typisierung von Formalparametern in Prozeduren. Für <type> kann entweder TYPE <t> oder LIKE <f> geschrieben werden. Die Typangabe kann generisch oder vollständig sein. Bei generischer Typangabe wird das Feldsymbol gar nicht oder nur teilweise typisiert und übernimmt die restlichen Attribute bei der Zuweisung vom entsprechenden Datenobjekt. Bei vollständiger Typangabe werden alle technischen Eigenschaften eines Feldsymbols schon bei seiner Deklaration festgelegt. Es können dann nur Datenobjekte von exakt dem gleichen Datentyp zugewiesen werden.

Feldsymbole sollten immer typisiert werden. Falls ein Feldsymbol generisch sein muß, sollte dies mit einer entsprechenden generischen Typangabe deutlich gemacht werden.

Generische Typangaben

Folgende Typisierungen erlauben Freiheiten bei der Zuweisung von Datenobjekten. Das Datenobjekt muß nur die spezifizierten Teileigenschaften des Feldsymbols haben.

Typisierung

Prüfung für die Aktualparameter

keine Typangabe

TYPE ANY

Es werden alle Typen von Datenobjekten akzeptiert. Das Feldsymbol übernimmt alle Attribute des Datenobjekts.

TYPE C, N, P oder X

Es werden nur Datenobjekte vom Typ C, N, P bzw. X akzeptiert. Das Feldsymbol übernimmt Feldlänge und DECIMALS-Angabe (für Typ P) des Datenobjekts.

TYPE TABLE

Es wird geprüft, ob das Datenobjekt eine interne Standardtabelle ist. Diese Typisierung ist eine Kurzform von TYPE STANDARD TABLE (siehe unten).

TYPE ANY TABLE

Es wird geprüft, ob das Datenobjekt eine interne Tabelle ist. Alle Eigenschaften der internen Tabelle (Zeilentyp, Tabellenart, Schlüssel) werden vom Feldsymbol übernommen.

TYPE INDEX TABLE

Das System prüft, ob das Datenobjekt eine interne Index-Tabelle (also eine Standard- oder sortierte Tabelle aber keine Hash-Tabelle) ist. Die Eigenschaften der internen Tabelle (Zeilentyp, Tabellenart, Schlüssel) werden vom Feldsymbol übernommen.

TYPE STANDARD TABLE

Das System prüft, ob das Datenobjekt eine interne Standard-Tabelle ist. Die restlichen Eigenschaften der internen Tabelle (Zeilentyp, Schlüssel) werden vom Feldsymbol übernommen.

TYPE SORTED TABLE

Das System prüft, ob das Datenobjekt eine sortierte interne Tabelle ist. Die restlichen Eigenschaften der internen Tabelle (Zeilentyp, Schlüssel) werden Feldsymbol übernommen.

TYPE HASHED TABLE

Das System prüft, ob das Datenobjekt eine interne HASH-Tabelle ist. Die restlichen Eigenschaften der internen Tabelle (Zeilentyp, Schlüssel) werden vom Feldsymbol übernommen.

Bei der generischen Typisierung ist zu beachten, daß die bei der Zuweisung vom Datenobjekt übernommenen Eigenschaften nicht statisch im Programm bekannt sind. Sie können höchstens dynamisch angesprochen werden.

Beispiel

TYPES: BEGIN OF line,
         col1 TYPE c,
         col2 TYPE c,
       END OF line.

DATA: wa TYPE line,
      itab TYPE HASHED TABLE OF line WITH UNIQUE KEY col1,
      key(4) TYPE c VALUE 'COL1'.

FIELD-SYMBOLS <fs> TYPE ANY TABLE.

ASSIGN itab TO <fs>.

READ TABLE <fs> WITH TABLE KEY (key) = 'X' INTO wa.

Nach der generischen Zuweisung der internen Tabelle ITAB an das Feldsymbol <FS> wird der Tabellenschlüssel des Feldsymbols dynamisch adressiert. Eine statische Adressierung

READ TABLE <fs> WITH TABLE KEY col1 = 'X' INTO wa.

ist syntaktisch nicht möglich, da das Feldsymbol erst zur Laufzeit den Schlüssel der Tabelle ITAB übernimmt. Im Programm ist durch die Typisierung ANY TABLE lediglich bekannt, daß <FS> eine Tabelle ist. Mit der Typisierung ANY oder ohne Typisierung, wäre syntaktisch nicht einmal die tabellenspezifische Anweisung READ TABLE <FS> möglich.

Bei der generischen Übernahme von strukturierten Typen, also Strukturen oder Tabellen mit strukturiertem Zeilentyp, sind die einzelnen Komponenten im Programm weder statisch noch dynamisch direkt ansprechbar. Hier muß mit weiteren Feldsymbolen und der Möglichkeit Strukturen komponentenweise zuzuweisen gearbeitet werden.

Vollständige Typangabe

Bei folgenden Typisierungen werden die technischen Eigenschaften des Feldsymbols vollständig bestimmt und die technischen Eigenschaften des zugewiesenen Datenobjekts müssen mit den Eigenschaften des Feldsymbols übereinstimmen.

Typisierung

Technische Eigenschaften des Formalparameters

TYPE D, F, I oder T

Das Feldsymbol hat die technischen Eigenschaften dieser vollständig vordefinierten elementaren Typen.

TYPE <type>

Das Feldsymbol hat den Typ <type>. Dieser ist ein durch TYPES definierter programmlokaler Datentyp oder ein Datentyp aus dem ABAP Dictionary.

TYPE REF TO <cif>|DATA

Das Feldsymbol ist eine Referenzvariable für die Klasse bzw. das Interface <cif> oder ein Datenobjekt.

TYPE LINE OF <itab>

Das Feldsymbol hat den gleichen Typ wie eine Zeile einer über TYPES oder im ABAP Dictionary deklarierten internen Tabelle <itab>.

LIKE <f>

Das Feldsymbol hat den gleichen Typ wie eine programminternes Datenobjekt <f> oder eine Struktur bzw. eine Datenbanktabelle aus dem ABAP Dictionary.

Bei vollständig typisierten Feldsymbolen kann statisch auf sämtliche Eigenschaften des Feldsymbols zugegriffen werden, da sie im Programmtext bekannt sind. Feldsymbole, die vollständig als Referenzen oder aggregierte Datenobjekte typisiert werden, können nach der Zuweisung eines passenden Datenobjekts wie das Datenobjekt selbst verwendet werden. Es kann also beispielsweise auf die Komponenten von Strukturen zugegriffen, eine Schleife über interne Tabellen ausgeführt oder ein Objekt mit einem Referenzfeldsymbol erzeugt werden.

Beispiel

REPORT demo_field_symbols_type .

DATA: BEGIN OF line,
         col1(1) TYPE c,
         col2(1) TYPE c VALUE 'X',
       END OF line.

FIELD-SYMBOLS <fs> LIKE line.

ASSIGN line TO <fs>.

MOVE <fs>-col2 TO <fs>-col1.

Das Feldsymbol <FS> ist vollständig als Struktur typisiert und seine Komponenten können im Programm angesprochen werden.

Struktur aufprägen

Der Zusatz STRUCTURE prägt dem Feldsymbol eine strukturierte Sicht auf zugewiesene Datenobjekte auf:

FIELD-SYMBOLS <FS> STRUCTURE <s> DEFAULT <f>.

Die Struktur <s> ist entweder ein strukturiertes programmlokales Datenobjekt oder eine flache Struktur aus dem ABAP Dictionary. <f> ist ein Datenobjekt, daß dem Feldsymbol als Startfeld zugewiesen werden muß, später aber über die Anweisung ASSIGN geändert werden kann.

Bei der Zuweisung eines Datenobjekts wird lediglich geprüft, ob das zugewiesene Datenobjekt mindestens die Länge der Struktur hat. Das Feldsymbol ist komponentenweise ansprechbar und hat sämtliche technische Eigenschaften der Struktur <s>.

Falls <s> Komponenten vom Typ I oder F enthält, ist die Ausrichtung solcher Felder zu beachten. Bei der Zuweisung eines Datenobjekt zu einem Feldsymbol mit aufgeprägter Struktur sollte auch das Datenobjekt entsprechend ausgerichtet sein, da es ansonsten zu einem Laufzeitfehler kommen kann. Es empfiehlt sich, nur solche Datenobjekte strukturierten Feldsymbolen zuzuweisen, die zumindest über die Länge der Struktur wie das Feldsymbol strukturiert sind.

Der Zusatz STRUCTURE ist obsolet und sollte nicht mehr verwendet werden. Mit dem STRUCTURE-Zusatz definierte Feldsymbole sind eine Mischung aus typisierten Feldsymbolen und einem Hilfsmittel für das Casting auf programmlokale bzw. im ABAP Dictionary definierte Datentypen. Zur Typisierung von Feldsymbolen dient aber der TYPE-Zusatz der Anweisung FIELD-SYMBOLS, und für das Casting kann der CASTING-Zusatz der Anweisung ASSIGN verwendet werden.

Beispiel

Beispiel mit obsoletem STRUCTURE-Zusatz:

DATA: wa(10) VALUE '0123456789'.

DATA: BEGIN OF line1,
         col1(3),
         col2(2),
         col3(5),
      END OF line1.

DATA: BEGIN OF line2,
         col1(2),
         col2 LIKE sy-datum,
      END OF line2.

FIELD-SYMBOLS: <f1> STRUCTURE line1 DEFAULT wa,
               <f2> STRUCTURE line2 DEFAULT wa.

WRITE: / <f1>-col1, <f1>-col2, <f1>-col3,
       / <f2>-col1, <f2>-col2.

Korrektes Beispiel mit TYPE und CASTING:

DATA: wa(10) VALUE '0123456789'.

DATA: BEGIN OF line1,
         col1(3),
         col2(2),
         col3(5),
      END OF line1.

DATA: BEGIN OF line2,
         COL1(2),
         COL2 LIKE sy-datum,
      END OF line2.

FIELD-SYMBOLS: <f1> LIKE line1.
ASSIGN wa TO <f1> CASTING.

FIELD-SYMBOLS: <f2> LIKE line2.
ASSIGN wa TO <f2> CASTING.

WRITE: / <f1>-col1, <F1>-col2, <F1>-col3,
       / <f2>-col1, <F2>-col2.

Die Listenausgabe ist in beiden Fällen:

012 34 56789
01 2345/67/89

Es werden zwei Feldsymbole deklariert, denen unterschiedliche Strukturen aufgeprägt sind. Beiden Feldsymbolen wird die Zeichenkette WA zugewiesen. Die Ausgabe zeigt, daß die Feldsymbole die Zeichenkette komponentenweise und gemäß dem Typ der Komponenten interpretieren.

Ende des Inhaltsbereichs