von Scott Klement
Wussten Sie, dass es möglich ist, den Namen einer Datenstruktur in RPG erst während der Ausführungszeit festzulegen? Dies geschieht durch Angabe einer Variablen als Datenstrukturnamen. Die Definition erfolgt im Schlüsselwort DTAARA durch Spezifikation des Sonderwertes *VAR.
RPG bietet grundsätzlich zwei Möglichkeiten, um eine Datenstruktur zu lesen. Einerseits besteht die alte Möglichkeit über eine externe Datenstruktur (UDS), andererseits die Nutzung der Operationscodes IN und OUT. Der Grund, warum ich dies besonders erwähne, ist die Tatsache, dass ich immer wieder auf Menschen treffe, die diese beiden Methoden durcheinanderbringen. Vielfach wird die Ansicht vertreten, dass die Datenstruktur mittels UDS erstellt werden muss und für den eigentlichen Zugriff die Operationscodes IN und OUT erforderlich sind. Wenn auch der gemischte Gebrauch in RPG zulässig ist, hilft uns das in unserem speziellen Fall (Festlegung des Datenstrukturnamens zur Ausführungszeit) nicht weiter, da der Name bereits bekannt sein muss, wenn UDS die Datenstruktur zu Beginn des Programms liest. Daraus wiederum folgt, dass die Angabe des Datenstrukturnamens nicht erst in den C-Spezifikationen festgelegt werden kann.
Mittels UDS definierte Datenstrukturen müssen Zeichen-Datenstrukturen (*CHAR) sein. Sie werden automatisch zu Programmbeginn gelesen und bei Beendigung des Programms automatisch fortgeschrieben. Hier ein Definitionsbeispiel:
D MyDtaAra UDS D Lastdate 10A |
Startet das Programm, das diesen Code enthält, wird die Datenstruktur namens MyDtaAra automatisch eingelesen. Es muss eine Zeichen-Datenstruktur von zehn Byte Länge sein. Das Feld Lastdate kann im Programm geändert werden und wird bei Ende des Programms automatisch auf die Platte zurückgeschrieben.
Soll die Datenstruktur im Programm einen anderen Namen haben als auf der Platte, kann das Schlüsselwort DTAATA (siehe Abbildung 1) verwendet werden.
D MyDtaAra UDS DTAARA(OTHERNAME) D lastdate 10A |
Abbildung 1: Spezifizieren eines abweichenden Datenstrukturnamens
Diese Methode birgt allerdings diverse Nachteile:
- Da die Datenstruktur automatisch bei Programmstart gelesen wird, muss ihr Name bereits zu diesem Zeitpunkt bekannt sein und kann nicht erst in den C-Spezifikationen festgelegt werden.
- Datenstrukturen sind Zeichenfelder (*CHAR), so dass der Datenbereich immer als Zeichenfeld definiert sein muss.
- Da RPG die Datenstruktur zum Update öffnet, wird bei Programmstart ein Lock platziert, das anderen Programmen den Zugriff verwehrt. Hat ein anderes Programm diese Datenstruktur bereits im Zugriff und mit einem Lock belegt, muss das aktuell startende Programm warten, bis die Datenstruktur von dem anderen Programm wieder freigegeben wird. Sie müssen sich als Abonnent anmelden um den hier fehlenden Teil des Inhalts zu sehen. Bitte Login für Zugriff.
Noch nicht Abonnent? Sonderaktion nutzen.