Deklaration von lokalen Objekten: DECLARE

EXEC TAA
   DECLARE <Objektname>
   [WITH] TYPE <Objekttyp>
   [AND] CLASS <Objektklasse>
END-EXEC

Diese Anweisung darf nur in der WORKING-STORAGE SECTION stehen. Alle anderen Anweisungen zur Manipulation von Datenobjekten dagegen müssen in der PROCEDURE DIVSION stehen.

DECLARE weist die Infrastruktur an, dem Service ein lokales Datenobjekt zur Verfügung zu stellen und dieses zu verwalten. Nach dem DECLARE ist das Datenobjekt dem Programm und der Infrastruktur bekannt, jedoch kann darauf erst dann PUT oder GET ausgeführt werden, wenn auch der Speicherbereich in der Infrastruktur zur Verfügung gestellt wurde.

Dies geschieht entweder aufgrund einer NEW-Anweisung in der PROCEDURE DIVISION, oder wenn das Objekt beim Aufruf eines anderen Services mit der Rolle CRE benutzt wird.

Globale Objekte und Parameterobjekte werden aufgrund der IDENTIFY-Anweisung automatisch deklariert und je nach ihrer Rolle bereitgestellt.

Gültige Objektklassen sind „REC“ und „LST“.
Die Klasse „REF“ (Schlüsseltabelle) wird in Cobol nicht mehr unterstützt.1)

Deklaration von lokalen persistenten Objekten

Diese Funktionalität ist nicht auf allen Plattformen unterstützt.

EXEC TAA
   DECLARE <Objektname>
   [WITH] TYPE <Objekttyp>
   [AND] CLASS <Objektklasse>
   [PERSISTENT]
END-EXEC

Durch die Angabe PERSISTENT teilen Sie der Infrastruktur mit, dass der Inhalt dieses Objekts bei in der Infrastruktur aufbewahrt werden soll.[a]

Wenn ein persistentes Objekt bei Modulbeginn leer ist, bewahrt die Infrastruktur bei Modulende den Inhalt des Objekts auf. Wenn dasselbe Modul erneut aufgerufen wird und das Objekt deklariert, wird dem Modul (genauer: der neuen Instanz des Moduls) der zuvor eingefrorene Inhalt in dem Objekt bereitgestellt. Dies gilt auch, wenn das Modul von mehreren verschiedenen Geschäftsvorfällen benutzt wird.

Persistente Objekte bleiben so lange erhalten, bis die TAA-Laufzeitinfrastruktur beendet wird oder sie ausdrücklich zurückgesetzt werden.

Wichtig ist, dafür zu sorgen, dass beim ersten Aufruf des Moduls das Objekt gefüllt wird, auch wenn es für eine Operation eigentlich nicht benötigt wird. Andernfalls kann es passieren, dass das Objekt leer persistent gemacht wird, und dadurch bei nachfolgenden Aufrufen auch nicht mehr gefüllt wird.

Automatische Bereitstellung von lokalen Objekten

Anhand der Schnittstellendefinitionen von TAA-Modulen ist der COBOL-Preprozessor in der Lage, festzustellen, welche Module aufgerufen werden können, und welche Objekte benötigt werden, um die Schnittstellen dieser Module zu bestücken.[b]

Er ist dadurch auch in der Lage, dafür zu sorgen, dass für alle benötigten Schnittstellenobekte passende Objekte zur Verfung stehen, ohne dass im Programm dafür ein EXEC TAA DECLARE erforderlich ist.

Die Regeln dafür sind wie folgt:

  1. Wenn ein Objekt mit gleichem Namen, Struktur und Klasse bereits in dem aktuellen Modul existert (z.B. als Parameterobjekt in der Modulschnittstelle, oder als ein bereits selbst deklariertes lokales Objekt), wird kein zusätzlliches Objekt erzeugt.
  2. Andernfalls wird eine Objektdefinition versucht mit dem Namen Namen L<name> , also der Name des Parameterobjekts präfixiert mit „L“, mit gleicher Struktur und Klasse wie das Parameterobjekt. Beispiel: Für einen Parameter namens „PARM1“ hiesse das erzeugte lokale Objekt „LPARM1“.
  3. Wenn sich bei der Definition des lokalen Objekts herausstellt, dass ein Objekt dieses Namens bereits existiert, bleibt diese Objektdefinition unverändert bestehen; es wir auch kein weiteres lokales Objekt erzeugt.

So erzeugte lokale Objekte könenn im Programmcode genauso verwendet werden wie selbst deklarierte lokale Objekte, also in Objektanweisungen, Modulaufrufen usw.

Bei Modulaufrufen (CALL, START) werden die automatisch erzeugten lokalen Objekte den Parameterobjekte zugewiesen, wenn im Modulaufruf selbst keine Zuweisung enthalten ist und auch kein gleichnamiges Objekt existiert (vgl. Regel 1).

Wenn es zu Generierungsfehlern kommt, weil eine bestehende Objektdefinition (s. Regel 3) in Modulaufrufen verwendet wird, obwohl sie nicht zu dem betreffenden Parameterobjekt passt, muss die Deklaration eines passenden lokalen Objekts und dessen Zuweisung ausprogrammiert werden.

Nur wenn ein automatisch erzeugtes Objekt tatsächlich benutzt wird, erzeugt der COBOL-Preprozessor auch den dafür benötigten Code bzw. die Felder in Working-Storage und Linkage Section. Wird das Objekt nicht benutzt, wird die automatische Deklaration verworfen.

Hinweis: Durch die Präfixierung mit „L“ wird der Objektname um eine Stelle verlängert. Nutzt ein Paramterobjekt mit seinem eigenen Namen und den Namen seiner Felder bereits die Längenbegrenzungen vollständig aus, fürht dies zu COBOL-Fehlermeldungen. In solchen Fällen muss manuell ein lokales Objekt mit kürzerem Namen deklariert und benutzt werden

Deklaration von lokalen statischen Objekten

Diese Funktionalität ist nicht auf allen Plattformen unterstützt.

EXEC TAA
   DECLARE <Objektname>
   [WITH] TYPE <Objekttyp>
   [AND] CLASS <Objektklasse>
   [STATIC]
END-EXEC

Durch die Angabe STATIC teilen Sie der Infrastruktur mit, dass der Inhalt dieses Objekts bei in der Infrastruktur aufbewahrt werden soll und, falls möglich, wieder zur Verfügung stellen soll, wenn dasselbe Modul innerhalb desselben Geschäftsvorfalls wieder aufgerufen wird.[c]

Zweck dieser Objektart ist es, aufwändig zu beschaffende Daten (z.B. Datenbankzugriffe über mehrere Tabellen), die bekannterweise wiederholt benötigt werden, nicht jedesmal neu besorgen zu müssen.

Im Gegensatz zu persistenten Objekten wird der Inhalt von statischen Objekten nur innerhalb des aktuellen Geschäftsvorfalls aufbewahrt und danach freigegeben.

Achtung:

Bei der Verwendung eines lokalen statischen Objekts ist nicht sichergestellt, dass die darin enthaltenen Daten zu jedem Zeitpunkt dem aktuellen Inhalt der Datenbank entsprechen!

Bei der Verwendung von lokalen statischen Objekten müssen Sie bei Eintritt in das Modul immer davon ausgehen, dass das Objekt leer sein könnte, auch wenn es zu einem führeren Zeitpunkt schon einmal gefüllt wurde! Wie lange die Daten erhalten bleiben, ist von technischen Gegebenheiten wie Laufzeitumgebung, Platform, Transaktionierung (unter CICS) usw. abhängig. In jedem Fall müssen die Daten nach einer Unterbrechung des Geschäftsvorfalls neu beschafft werden.


a) ab TAA Version 7.05
b) ab TAA Version 7.08
c) ab TAA Version 8.02
1)
V.05
cobref:cob:declare · Zuletzt geändert: 09.08.2024 13:25

Copyright © 1992-2024 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum