Show TOC Anfang des Inhaltsbereichs

GET  Dokument im Navigationsbaum lokalisieren

Dies ist das wichtigste Ereignis für ausführbare Programme, die mit einer logischen Datenbank verknüpft sind. Es tritt dann auf, wenn die logische Datenbank eine Zeile aus des Knotens node gelesen hat und ihn dem Programm in dem mit NODES node deklarierten Arbeitsbereich zur Verfügung stellt.

Bei der Definiton des entsprechenden Ereignisblocks im Programm kann optional eine Feldliste angegeben werden, falls die logische Datenbank für diesen Knoten die Feldselektion unterstützt:

GET node [FIELDS f1 f2...].

Im Ereignisblock können die Daten des übergebenen Arbeitsbereichs verarbeitet werden. Das heißt man kann sie z.B. direkt auf einer Liste ausgeben, oder in einem sequentiellen Datenbestand (interne Tabelle oder Extrakt) für die spätere Bearbeitung zwischenspeichern.

Die logische Datenbank liest alle Spalten aus allen Knoten, die in der logischen Datenbank nicht für Feldselektion vorgesehen sind und auf dem Zugriffspfad der logischen Datenbank übergeordnet zu node liegen. Dies geschieht unabhängig davon, ob GET-Ereignisblöcke für diese Knoten definiert wurde oder nicht. Es kann aber nur auf die Daten der Knoten zugegriffen werden, für die mit der Anweisung NODES ein Arbeitsbereich deklariert wurde.

Am Ende einer Hierarchiestufe der logischen Datenbank werden alle Felder des Arbeitsbereichs node auf den Wert HEX-Null gesetzt. Beim Arbeiten mit Extraktdatenbeständen arbeiten gilt für Felder mit dem Inhalt HEX-Null eine spezielle Sortiervorschrift (siehe Extraktdatenbestände sortieren).

Für Knoten, für die in der logischen Datenbank Feldselektion vorgesehen ist, wird eine bessere Antwortzeit erzielt. Liegen solche Knotenen auf dem Zugriffspfad der logischen Datenbank übergeordnet zu node und es sind keine GET-Ereignisblöcke für sie definiert, werden die Daten aller Spalten nur für solche Knoten gelesen, für die es eine NODES-Anweisung im Programm gibt. Für Knoten, für die es keine NODES-Anweisung gibt, werden nur die Schlüsselfelder gelesen Die logische Datenbank benötigt die Schlüsselfelder, um den Zugriffspfad aufzubauen.

Mit der Option FIELDS können explizit die Spalten des Knotens angegeben werden, die die logische Datenbank lesen soll. Bei Verwendung der Option FIELDS liest die logische Datenbank nur die Felder f1 f2... und die Schlüsselfelder des Knotens table. Voraussetzung ist, dass der Knoten table in der logischen Datenbank für Feldselektion vorgesehen ist.

Mit FIELDS können wesentlich bessere Anwortzeiten erzielt werden, als wenn alle Spalten gelesen werden.

Alle Felder des Knotens node, die keine Schlüsselfelder sind und nicht nach FIELDS aufgeführt werden, werden von der logischen Datenbank nicht gelesen. Der Inhalt der entsprechenden Komponenten des Tabellenarbeitsbereichs node wird auf HEX-Null gesetzt. Sie sind also auch während der GET-Ereignisse der Knoten, die nodeuntergeordnet sind, auf HEX-Null gesetzt. Diese Felder sollten im Programm also nicht verwendet werden und man sollte keine Unterprogramme aufrufen, die mit diesen Feldern arbeiten. Wenn im GET-Ereignisblock ein Extraktdatenbestand gefüllt wird, ist zu beachten, dass in Extrakten für Felder mit dem Inhalt HEX-Null eine spezielle Sortiervorschrift gilt.

Beispiel

Das folgende ausführbare Programm ist mit der logischen Datenbank F1S verknüpft:

REPORT demo_program_get.

NODES: spfli, sflight, sbook.

START-OF-SELECTION.
  WRITE 'Test Program for GET'.

GET spfli.
  SKIP.
  WRITE: / 'From:', spfli-cityfrom,
           'TO  :', spfli-cityto.

GET sflight.
  SKIP.
  WRITE: / 'Carrid:', sflight-carrid,
           'Connid:', sflight-connid.
  ULINE.

GET sbook.
  WRITE: / 'Fldate:',    sflight-fldate,
           'Bookid:',    sbook-bookid,
           'Luggweight', sbook-luggweight UNIT 'kg'.
  
ULINE.

Der Tabellenarbeitsbereich SFLIGHT wird auch im Ereignisblock für GET sbook verwendet. Abhängig von den Selektionsbildeingaben sieht der Beginn der Ausgabeliste z.B. so aus:

Diese Grafik wird im zugehörigen Text erklärt

Beispiel

In der logischen Datenbank F1S sind die Knoten SFLIGHT und SBOOK für die Feldauswahl vorgesehen. Deshalb kann bei den GET-Ereignisblöcken eine Feldliste angegeben werden:

REPORT event_demo.

NODES: sflight, sbook.

GET sflight FIELDS carrid connid.

 ...

GET sbook FIELDS bookid.

 ...

GET sflight LATE FIELDS planetype.

 ...

In diesem Fall liest die logische Datenbank die Felder

·         MANDT, CARRID, CONNID, FLDATE und PLANETYPE aus SFLIGHT

·         MANDT, CARRID, CONNID, FLDATE und BOOKID aus SBOOK

Das System liest die Felder MANDT und FLDATE aus SFLIGHT auch wenn sie nicht in der Feldliste angegeben sind, weil MANDT und FLDATE zu den Schlüsselfeldern der Tabelle gehören.

Aus SBOOK werden hier nur die Schlüsselfelder gelesen.

Ende des Inhaltsbereichs