HotTip: Festlegen eines Datenstrukturnamens in RPG zur Ausführungszeit

11. November 2008 | Von | Kategorie: Tools, Hot-Tips

Artikel der NEWSolutions: 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.

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

Schlagworte: , , , , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.