Jobvariablen sind als eigenes Softwareprodukt erhältlich. Ähnlich wie Auftrags- und Benutzerschalter dienen auch sie dem Informationsaustausch
zwischen Anwenderprogrammen und dem Betriebssystem oder
zwischen verschiedenen Anwenderprogrammen.
Jobvariablen bieten jedoch gegenüber den Schaltern zusätzliche Möglichkeiten:
Sie können beim Aufruf eines Programms als überwachende Jobvariablen vereinbart werden. Als solche werden sie vom Programm automatisch mit Zustands- und Rückkehrcodes versorgt, die über Programmzustand und Beendigungsverhalten sowie über mögliche Ablauffehler informieren.
Sie können auf Betriebssystem- oder Programm-Ebene mit Datensätzen bis zu 256 Byte (bei überwachenden Jobvariablen: 128 Byte) Länge versorgt werden. Dadurch lassen sie beim Informationsaustausch eine stärkere Differenzierung zu als Auftrags- oder Benutzerschalter, die nur zwischen den Zuständen ON und OFF wechseln können.
Sie können - anders als Auftrags- oder Benutzerschalter - auch von Aufträgen verändert werden, die unter verschiedenen Benutzerkennungen ablaufen.
Bevor ein COBOL-Programm auf eine Jobvariable zugreifen kann, muss sie ihm - ähnlich wie eine Datei - über einen Linknamen zugewiesen werden. Bei Jobvariablen dient dazu das Kommando SET-JV-LINK. Sein Format ist in den Handbüchern [3] und [7] beschrieben, ein Beispiel dazu enthält der folgende Abschnitt. Der Linkname, der dabei im Kommando anzugeben ist, ergibt sich aus den Vereinbarungen im COBOL-Programm (siehe unten).
Den Zugriff auf Jobvariablen unterstützt COBOL2000 durch folgende Sprachmittel (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [1]):
Die Vereinbarung von Linknamen und programminternen Merknamen für Jobvariablen im SPECIAL-NAMES-Paragrafen der ENVIRONMENT DIVISION:
Über die Linknamen können Jobvariablen zugewiesen werden, über die Merknamen können sich die Anweisungen der PROCEDURE DIVISON auf sie beziehen (siehe unten). Link- und Merknamen für Jobvariablen lassen sich mit Angaben nach folgendem Format vereinbaren:JV-jvlink IS merkname
jvlink legt dabei den Linknamen für die Jobvariable fest. Bei der Bildung des Linknamens wird vor jvlink als erstes Zeichen „*“ gesetzt; er ergibt sich damit als *jvlink. Daher darf die Zeichenfolge jvlink höchstens 7 Byte lang sein. merkname vereinbart den programminternen Merknamen für die Jobvariable. Die Anweisungen ACCEPT und DISPLAY der PROCEDURE DIVISION:
ACCEPT...FROM merkname
liest den Inhalt der (im SPECIAL-NAMES-Paragrafen) mit merkname verknüpften Jobvariable. Die Daten werden dabei linksbündig in der Länge des Empfangsfeldes der ACCEPT-Anweisung übertragen: Ist das Feld länger als 256 Byte, wird es am rechten Ende mit Leerzeichen aufgefüllt; ist es kürzer, wird der Inhalt der Jobvariable bei der Übertragung rechts auf die Feldlänge abgeschnitten.
DISPLAY...UPON merkname
schreibt in die (im SPECIAL-NAMES-Paragrafen) mit merkname verknüpfte Jobvariable.
Die Daten werden dabei in der Länge der Sendefelder bzw. Literale der DISPLAY-Anweisung übertragen, falls die maximale Datensatzlänge von 256 Byte (bei überwachenden Jobvariablen: 128 Byte) nicht überschritten wird. Ist die Gesamtzahl der zu übertragenden Zeichen größer als die maximale Datensatzlänge, wird der Satz bei der Übertragung auf die maximale Länge abgeschnitten.
Bei der Übertragung in eine überwachende Jobvariable ist zu beachten, dass deren erste 128 Bytes vom System gegen Schreibzugriffe geschützt werden. Es wird daher nur der Teil des Datensatzes, der mit der Position 129 beginnt, ab Position 129 in die Jobvariable geschrieben.
Beispiel 8-4
Kommunikation über Jobvariable
Im folgenden Auftrag wird die Jobvariable KONTROLLE.ABLAUF sowohl von einem COBOL-Programm als auch auf Kommandoebene verwendet. Abhängig vom Inhalt der Jobvariable kann das Programm unterschiedliche Verarbeitungszweige durchlaufen und ggf. den Inhalt der Jobvariable aktualisieren. Auch ein anderer Auftrag - selbst unter einer anderen Benutzerkennung - kann auf diese Jobvariable zugreifen, falls sie mit dem Kommando CREATE-JV ...,USER-ACCESS=ALL-USERS katalogisiert wurde.
Programmausschnitt: ... ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. TERMINAL IS T JV-UPDATE IS FIELDJV. ———————————————————————————————————— (2) ... DATA DIVISION. WORKING-STORAGE SECTION. 01 DATE-TODAY PIC X(6). ———————————————————————————————— (3) 01 CONTENTS-JV. ————————————————————————————————————————————— (4) 05 DATE-UPDATE PIC X(6). 05 FILLER PIC X(20). 05 NUM-UPDATE PIC 9(4). ... PROCEDURE DIVISION. ACCEPT CONTENTS-JV FROM FELDJV. —————————————————————————— (5) ACCEPT DATE-TODAY FROM DATE. IF DATE-UPDATE NOT EQUAL DATE-TODAY —————————————————————— (6) PERFORM WORK ELSE PERFORM ALREADY-UPDATED. ... WORK. ... MOVE DATE-TODAY TO AKT-DAT. (7) ADD 1 TO NUM-UPDATE. | DISPLAY CONTENTS-JV UPON FIELDJV. (7) ... ALREADY-UPDATED. DISPLAY "END OF UPDATE" UPON T. ...
|
(1) | Die Jobvariable KONTROLLE.ABLAUF wird dem nachfolgend aufgerufenen COBOL-Programm PROG.ARBEIT-1 über den Linknamen *AKTUELL zugewiesen. |
(2) | Im SPECIAL-NAMES-Paragrafen von PROG.ARBEIT-1 werden für die Jobvariable der Linkname *AKTUELL und der (programminterne) Merkname FELDJV vereinbart. |
(3) | TAGDAT wird als Empfangsfeld für das Tagesdatum reserviert. |
(4) | Das Empfangsfeld für den Inhalt der Jobvariable wird vereinbart. Es enthält Teilfelder für die Aufnahme des letzten Aktualisierungsdatums (AKT-DAT) und eines Aktualisierungszählers (AKT-NUM). |
(5) | ACCEPT überträgt den Inhalt der Jobvariable FELDJV nach INHALT-JV. |
(6) | Abhängig davon, ob das Aktualisierungsdatum (AKT-DAT) der Jobvariable mit dem Tagesdatum (TAGDAT) übereinstimmt, werden im Programm verschiedene Verarbeitungsprozeduren durchlaufen. |
(7) | Am Ende der Verarbeitung werden die Felder AKT-DAT und AKT-NUM aktualisiert und mit DISPLAY INHALT-JV... in die Jobvariable zurückgeschrieben. |
(8) | Auf Betriebssystem-Ebene wird die Jobvariable gelesen: Sie enthält Datum und Nummer der letzten Aktualisierung. |