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)
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.
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:
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
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.
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.
Weitere Funktionen zur Objektbearbeitung: