Global Data Areas

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:

Anwendungsstruktur

Dieses Dokument enthält die folgenden Übungen:


Global Data Area mit Hilfe einer bestehenden Local Data Area erstellen

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.

Beginn der AnweisungslisteGlobal Data Area erstellen

  1. Kehren Sie zur Local Data Area zurück, indem Sie Folgendes in der Kommandozeile des Programmeditors eingeben.

    E LDA01
  2. 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.

  3. Laden Sie GDA01 mit dem folgenden Kommando in dem Data-Area-Editor:

    E GDA01
  4. 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.

  5. 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.

  6. 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   
  7. Speichern Sie die Global Data Area mit STOW.

Local Data Area anpassen

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.

Beginn der AnweisungslisteFelder entfernen

  1. Kehren Sie zu Ihrer Local Data Area zurück, indem Sie Folgendes in der Kommandozeile des Data-Area-Editors eingeben:

    E LDA01
  2. 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.

  3. 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 

Global Data Area aus dem Programm aufrufen

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.

Beginn der AnweisungslisteGlobal Data Area in Ihrem Programm benutzen

  1. Kehren Sie zum Programmeditor zurück, indem Sie Folgendes in der Kommandozeile des Data-Area-Editors eingeben.

    E PGM01
  2. 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
  3. Führen Sie das Programm mit RUN aus.

  4. 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.

  5. Geben Sie EDIT in der MORE-Zeile ein, um zum Programmeditor zurückzukehren.

  6. Speichern Sie das Programm mit STOW.

Sie können nun mit den nächsten Übungen fortfahren: Externe Subroutinen.