Show TOC Anfang des Inhaltsbereichs

Feldsymbole deklarieren  Dokument im Navigationsbaum lokalisieren

Ein Feldsymbol wird mit der Anweisung

FIELD-SYMBOLS <fs> [typing].

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, dass die Zuweisung von Referenzvariablen und komplexen Datenobjekten zu untypisierten Feldsymbolen zwar möglich ist, dass 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 typing 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 ein Casting von Datenobjekten mit Feldsymbolen durchgeführt werden soll, muss 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. 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 muss, sollte dies mit einer entsprechenden generischen Typangabe deutlich gemacht werden.

Genauere Informationen zur Typisierung mit Hilfe des typing-Zusatzes: siehe Sclüsselwertdokumentation.

Generische Typangaben

Generische Typisierungen erlauben Freiheiten bei der Zuweisung von Datenobjekten. Das Datenobjekt muss nur die spezifizierten Teileigenschaften des Feldsymbols haben.

Bei der generischen Typisierung ist zu beachten, dass 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, dass <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 muss mit weiteren Feldsymbolen und der Möglichkeit Strukturen komponentenweise zuzuweisen gearbeitet werden.

Vollständige Typangabe

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

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.

Ende des Inhaltsbereichs