GET Dokument im Navigationsbaum lokalisieren

Dies ist das wichtigste Ereignis für Reports, die mit einer logischen Datenbank verknüpft sind. Es tritt dann auf, wenn die logische Datenbank eine Zeile aus des Knotens <table> gelesen hat und ihn dem Programm in dem mit NODES <table> 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 <table> [FIELDS <f1> <f 2>...].

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 <table> 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 <table> 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 <table> 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 <f 1 > <f 2 >... und die Schlüsselfelder des Knotens <table>. Voraussetzung ist, daß 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 <table>, 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 <table> wird auf HEX-Null gesetzt. Sie sind also auch während der GET-Ereignisse der Knoten, die <table> untergeordnet 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, daß in Extrakten für Felder mit dem Inhalt HEX-Null eine spezielle Sortiervorschrift gilt.

Beispiel

Der folgende Report 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

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