Die Daten in einer Global Data Area (GDA) können von mehreren Programmen, externen Subroutinen und Helproutinen benutzt werden.
Jede Änderung eines Datenelements in einer Global Data Area hat
Auswirkungen auf alle Natural-Objekte, die diese Global Data Area
referenzieren. Aus diesem Grund müssen Sie nach der Änderung einer Global Data
Area alle zuvor erstellten Natural-Objekte, die diese Global Data Area
referenzieren, noch einmal mit STOW
speichern. Die
Reihenfolge, in der die Objekte mit STOW
gespeichert
werden, ist wichtig. Sie müssen zuerst die Global Data Area mit
STOW
speichern und danach das Programm. Wenn Sie das
Programm zuerst mit STOW
speichern wollen und dann
erst die Global Data Area, dann kann das Programm nicht gespeichert werden,
weil die neuen Elemente in der Global Data Area nicht gefunden werden.
Sie werden jetzt eine Global Data Area erstellen, die von Ihrem Programm benutzt wird und auch von einer externen Subroutine, die Sie später erstellen werden. Als Basis für Ihre Global Data Area übernehmen Sie einige Informationen aus der Local Data Area, die Sie soeben erstellt haben.
Wenn Sie mit den Übungen in diesem Dokument fertig sind, wird Ihre Beispielanwendung aus den folgenden Modulen bestehen:
Dieses Dokument enthält die folgenden Übungen:
Sie können eine neue Data Area erstellen, indem Sie eine bestehende Data
Area editieren und sie dann unter einem anderen Namen und einem anderen Typ
abspeichern. Die ursprüngliche Data Area bleibt hierbei unverändert und die
neue Data Area kann sofort editiert werden. Da die Felder
#NAME-START
und #NAME-END
nicht in der Global Data
Area benötigt werden, werden Sie sie entfernen.
Global Data Area erstellen
Kehren Sie zur Local Data Area zurück, indem Sie Folgendes in der Kommandozeile des Programmeditors eingeben.
E LDA01
Geben Sie Folgendes in der Kommandozeile des Data-Area-Editors ein, um die Data Area unter einem neuen Namen zu speichern:
SA GDA01
Die aktuelle Data Area wird unter dem neuen Namen GDA01
gespeichert. Die Local Data Area mit dem Namen LDA01
wird noch
immer im Data-Area-Editor angezeigt.
Laden Sie GDA01
mit dem folgenden Kommando in dem
Data-Area-Editor:
E GDA01
Geben Sie das folgende Kommando ein, um die Local Data Area in eine Global Data Area abzuändern:
SET TYPE G
wobei "G" für Global Data Area steht.
Der Objekttyp ändert sich in "Global". Dies wird oben links im Bildschirm angezeigt.
Benutzen Sie das Zeilenkommando .D
, um die
folgenden Felder zu löschen:
#NAME-START
#NAME-END
Sie geben das Zeilenkommando beginnend in der Spalte
T der Zeile ein, die das zu löschende Feld enthält. Da die
oben genannten Felder in zwei aufeinander folgenden Zeilen stehen, können Sie
auch das Zeilenkommando .D(2)
eingeben, um beide
Felder gleichzeitig zu löschen.
Drücken Sie EINGABE.
Die Global Data Area sollte nun folgendermaßen aussehen:
Global GDA01 Library TUTORIAL DBID 11177 FNR 8 Command > + I T L Name F Length Miscellaneous All -- -------------------------------- - ---------- -------------------------> 1 #MARK A 1 V 1 EMPLOYEES-VIEW EMPLOYEES 2 PERSONNEL-ID A 8 /* CNNNNNNN G 2 FULL-NAME /* NAME INFORMATION 3 NAME A 20 /* SURNAME/FAMILY NAME 2 DEPT A 6 /* DDDDSS G 2 LEAVE-DATA /* LEAVE/VACATION INFO 3 LEAVE-DUE N 2.0 /* VACATION DAYS/YEAR ----------------------------------------------------------------- S 8 L 1 |
Speichern Sie die Global Data Area mit
STOW
.
Die Felder, die jetzt in der Global Data Area enthalten sind, werden
nicht mehr in der Local Data Area benötigt. Deshalb werden Sie jetzt alle
Felder außer #NAME-START
und #NAME-END
aus der Local
Data Area entfernen.
Felder entfernen
Kehren Sie zu Ihrer Local Data Area zurück, indem Sie Folgendes in der Kommandozeile des Data-Area-Editors eingeben:
E LDA01
Benutzen Sie das Zeilenkommando .D
, um
alle Felder außer #NAME-START
und #NAME-END
zu
löschen.
Wenn Sie den obersten Eintrag für einen View löschen (gekennzeichnet durch ein "V" vor dem View-Namen), werden alle Felder, die zu diesem View gehören, automatisch gelöscht.
Speichern Sie die geänderte Local Data Area mit
STOW
.
Die Local Data Area sollte nun folgendermaßen aussehen:
SYSGDA 4454: Data area stowed successfully. Local LDA01 Library TUTORIAL DBID 11177 FNR 8 Command > + I T L Name F Length Miscellaneous All -- -------------------------------- - ---------- -------------------------> 1 #NAME-START A 20 1 #NAME-END A 20 ----------------------------------------------------------------- S 2 L 1 |
Sobald eine Global Data Area mit STOW
gespeichert wurde, kann sie aus einem Natural-Programm heraus aufgerufen
werden.
Sie werden jetzt das DEFINE DATA
-Statement in Ihrem
Programm so ändern, dass die eben von Ihnen definierte Global Data Area benutzt
wird.
Global Data Area in Ihrem Programm benutzen
Kehren Sie zum Programmeditor zurück, indem Sie Folgendes in der Kommandozeile des Data-Area-Editors eingeben.
E PGM01
Geben Sie Folgendes in der Zeile über LOCAL USING LDA01
ein:
GLOBAL USING GDA01
Eine Global Data Area muss immer vor einer Local Data Area angegeben werden. Andernfalls tritt ein Fehler auf.
Ihr Programm sollte nun folgendermaßen aussehen:
DEFINE DATA GLOBAL USING GDA01 LOCAL USING LDA01 END-DEFINE * RP1. REPEAT * INPUT USING MAP 'MAP01' * IF #NAME-START = '.' THEN ESCAPE BOTTOM (RP1.) END-IF * IF #NAME-END = ' ' THEN MOVE #NAME-START TO #NAME-END END-IF * RD1. READ EMPLOYEES-VIEW BY NAME STARTING FROM #NAME-START ENDING AT #NAME-END * IF LEAVE-DUE >= 20 THEN PERFORM MARK-SPECIAL-EMPLOYEES ELSE RESET #MARK END-IF * DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK * END-READ * IF *COUNTER (RD1.) = 0 THEN REINPUT 'No employees meet your criteria.' END-IF * END-REPEAT * DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES MOVE '*' TO #MARK END-SUBROUTINE * END
Führen Sie das Programm mit RUN
aus.
Um zu überprüfen, ob das Ergebnis immer noch dasselbe ist wie vorher
(als noch keine Global Data Area mit DEFINE DATA
referenziert
wurde), geben Sie "JONES" als Startname ein und
drücken Sie EINGABE.
Geben Sie EDIT
in der
MORE
-Zeile ein, um zum Programmeditor zurückzukehren.
Speichern Sie das Programm mit STOW
.
Sie können nun mit den nächsten Übungen fortfahren: Externe Subroutinen.