Eine Jobvariable kann Kommando- bzw. Anweisungsteile ersetzen. SDF ersetzt die Jobvariable vor der Ausführung durch ihren Wert. Die daraus resultierende Eingabe wird von SDF syntaktisch geprüft.
Die Ersetzung von Jobvariablen ist im ungeführten Dialog, in Prozeduren und im Batchbetrieb möglich. Im (temporär) geführten Dialog ist sie nur in der NEXT-Zeile und in der Eingabe für Operandenwerte erlaubt.
Die Jobvariable wird angegeben:
direkt über ihren Namen in der Form „
&(jv-name)
“.indirekt über ihren Jobvariablenkettungsnamen in der Form „
&(*jv-link)
“. Die Verknüpfung von Kettungsname mit der Jobvariablen erfolgt vorher durch das Kommando /SET-JV-LINK LINK-NAME = jv-link, JV-NAME = jv-name.
Hinweis
Vor der Jobvariablenersetzung ersetzt ACS ggf. den Aliasnamen einer JV durch ihren realen Pfadnamen (gemäß Aliaskatologeintrag).
Für die Ersetzung von Jobvariablen bestehen folgende Einschränkungen:
Eine Jobvariable kann nur in ihrer gesamten Länge einen Ausdruck ersetzen.
Für die einzusetzende Jobvariable muss Lesezugriff bestehen, sonst wird die Eingabe als Syntaxfehler abgewiesen.
Innerhalb von CJC-Kommandofolgen ist das Ersetzen nicht möglich.
Jobvariablen können keine Eingabedaten ersetzen. Anweisungen an Programme mit SDF-Oberfläche werden von SDF nicht wie Eingabedaten, sondern wie Kommandos behandelt.
Jobvariablen können in Prozeduren oder ENTER-Dateien den führenden Schrägstrich vor Kommandos bzw. die zwei führenden Schrägstriche vor Anweisungen, den führenden Punkt von Nicht-S-Marken, den Strichpunkt als Kommandotrenner und das Fortsetzungszeichen nicht ersetzen.
Jobvariablen können nicht als Prozedurparameter eingesetzt werden.
Diese Einschränkung kann z.B. durch Verwendung eines Kettungsnamens umgangen werden (siehe Beispiel 2).Ausdrücke können nicht geschachtelt werden.
Im Dialog wird eine Jobvariablen-Ersetzung in der oben gezeigten Form nur durchgeführt, wenn keine gleich lautende S-Variable bzw. Builtin-Funktion bekannt ist. Die Ersetzung wird in der Reihenfolge S-Variable, Builtin-Funktion und dann erst Jobvariable durchgeführt (entspricht der Einstellung JV-REPLACEMENT=*AFTER-BUILTIN-FUNCTION in S-Prozeduren). Mit Angabe von Benutzer- und/oder Katalogkennung im Jobvariablen-Namen wird eindeutig eine Jobvariable referenziert.
Die Jobvariablen-Ersetzung in S-Prozeduren wird durch die Einstellung JV-REPLACEMENT im Kommando SET-PROCEDURE-OPTIONS auf folgende Weise beeinflusst:
In S-Prozeduren ist JV-REPLACEMENT=*NONE voreingestellt, d.h. es werden nur S-Variablen bzw. Builtin-Funktionen ersetzt.
Die Einstellung von JV-REPLACEMENT kann mit dem gleichnamigen Operanden im Kommando SET-PROCEDURE-OPTIONS in einer S-Prozedur geändert werden. Bei der Einstellung JV-REPLACEMENT=*AFTER-BUILTIN-FUNCTION können Inkompatibilitäten vermieden werden, wenn bei der bisherigen Form der Jobvariablen-Ersetzung der JV-Name mit Benutzer- und/oder Katalogkennung angegeben wird.
Die Jobvariablen-Ersetzung kann auch durch die Builtin-Funktion JV() erreicht werden. Die Angabe besitzt dann die Form „&(JV(JV-NAME=string_ausdruck,...))
“. Hierbei ist auch die wahlweise Angabe eines Teilbereichs möglich. Siehe auch Builtin-Funktion JV() im Handbuch „Kommandos“ [ 1].
Beispiel 1: Ersetzung im Dialog
/cre-jv jv=cmd ———————————————————————————————————————————————————— (1) /mod-jv jv=cmd,set-value='SHOW-FILE-ATTRIBUTES' —————————————————————— (2) /&(cmd) ——————————————————————————————————————————————— (3) % 3 :2OSG:$USER1.ALT.SYS.LOGON.USERPROC.X1 % 51 :2OSG:$USER1.ALT.SYSSDF.USER.EXAMPLE.1 % 21 :2OSG:$USER1.DATEI.1 % 48 :2OSG:$USER1.DATEI.2 % 84 :2OSG:$USER1.DATEI.3 % 66 :2OSG:$USER1.OUT.SORT1-2 % 3 :2OSG:$USER1.PROC.JV %:2OSG: PUBLIC: 7 FILES RES= 276 FRE= 39 REL= 21 PAGES /mod-jv jv-=cmd,set-value='-FILE-ATTRIBUTES FILE-NAME=PROC.' ————————— (4) /set-jv-link link-name=cmdlink,jv-name=cmd ———————————————————————————— (5) /sh&(*cmdlink) % 3 :2OSG:$USER1.PROC.JV ———————————————————————————————————— (6) %:2OSG: PUBLIC: 1 FILE RES= 3 FRE= 2 REL= 0 PAGES
(1) | Die Jobvariable mit dem Namen „CMD“ wird angelegt. |
(2) | Die Jobvariable CMD erhält den Wert „SHOW-FILE-ATTRIBUTES“ |
(3) | Nach Absenden des Kommandos wird der Variablenstring durch das in der Jobvariablen definierte Kommando ersetzt und das Kommando ausgeführt. Hinweis Die Jobvariable wird hier ersetzt, da keine S-Variable bzw. Builtin-Funktion mit Namen „CMD“ existiert. Mit Angabe von Benutzer- und/oder Katalogkennung im Jobvariablen-Namen (z.B. „ |
(4) | Der Wert der Jobvariablen CMD wird geändert. Er enthält jetzt nur noch einen Teil des Kommandonamens „-FILE-ATTRIBUTES“ und den teilqualifizierten Dateinamen „PROC.“. |
(5) | Der Jobvariablen CMD wird der Kettungsname „CMDLINK“ zugeordnet. |
(6) | Nach Absenden des Kommandos wird der Variablenstring durch den der Jobvariablen zugeordneten Kommandoteil ersetzt und das Kommando ausgeführt. Der Bezug zur Jobvariablen wird über den Kettungsnamen hergestellt. |
Beispiel 2: Ersetzung in einer Nicht-S-Prozedur
/BEGIN-PROC PAR=YES(PROC-PAR=(&PARAM1)) —————————————————————————————— (1) . . /SET-JV-LINK LINK-NAME=PARAM1,JV-NAME=&PARAM1 ———————————————————————— (2) /&(*PARAM1) FILE-NAME=LST.JOB ——————————————————————————————————————— (3) . . /END-PROC
(1) | Die durch den Prozedurparameter PARAM1 spezifizierte Jobvariable soll das jeweils auszuführende Kommando enthalten. Da die Angabe „&(&PARAM1)“ nicht zulässig ist, wird im Folgenden der Umweg über einen Kettungsnamen beschritten. |
(2) | Der aktuelle Jobvariablenname wird für den Prozedurparameter PARAM1 eingesetzt und mit dem Kettungsnamen PARAM1 verknüpft. |
(3) | Für den Kettungsnamen PARAM1 wird der Inhalt der vereinbarten Jobvariablen eingesetzt. Enthält die Jobvariable z.B. den Wert PRINT-DOCUMENT, so wird die Datei LST.JOB ausgedruckt. |
Beispiel 3: Ersetzung in einer S-Prozedur
S-Prozedur SPROC:
/ SET-PROC-OPT JV-REPLACE=*AFTER-BUILTIN —————————————————————— (1) / DECL-PAR JV-1(INIT=*PROMPT)—————————————————————————————— (2) / &(JV(JV-NAME=JV-1)) FILE-NAME=LST.JOB —————————————————————— (3) /FEHL: IF-BLOCK-ERROR / WRITE-TEXT C'** Fehler &MC **' / ELSE / WRITE-TEXT C'** Kommando &(&(JV-1)) ausgefuehrt **' / END-IF ————— (4) /ENDE: EXIT-PROC
Aufruf der Prozedur SPROC:
/create-jv jv=jv.kommando /modify-jv jv=jv.kommando,set-val='SHOW-FILE-ATTRIBUTES' /call-proc sproc %JV-1: jv.kommando % DMS0533 REQUESTED FILE NOT CATALOGED IN PUBSET '1OSN'. COMMAND TERMINATED % SDP0004 ERROR DETECTED AT COMMAND LINE: 3 IN PROCEDURE':1OSN:$USER1.SPROC' ** FEHLER DMS0533 **——————————————————————————————————————————————————— (5)
(1) | Mit dem Operanden JV-REPLACEMENT des Kommandos SET-PROCEDURE-OPTIONS wird vereinbart, dass Jobvariablen-Ersetzung zulässig ist. |
(2) | Vereinbart den Prozedurparameter JV-1. Der Wert für diesen Parameter soll im Dialog abgefragt werden. |
(3) | Jobvariablen-Ersetzung wird mit der Builtin-Funktion JV() realisiert (unabhängig von der JV-REPLACEMENT-Einstellung). Der Ausdruck &(JV(JV-NAME=JV-1)) wird bei Prozeduraufruf durch den Wert der Jobvariable ersetzt, deren Name im Prozedurparameter JV-1 übergeben wird. |
(4) | Tritt ein Fehler bei der Jobvariablen-Ersetzung auf, wird der Text „** Fehler“ mit dem entsprechenden Meldungsschlüssel (&MC) ausgegeben. Bei fehlerfreiem Ablauf wird der Text der ELSE-Schleife angezeigt. Auch hier wird der Ausdruck &(&(JV-1)) durch den Wert der definierten Jobvariable ersetzt. Während der erste Schritt der Ersetzung von &(JV-1) unabhängig von der JV-REPLACEMENT-Einstellung erfolgt (JV-1 ist eindeutig eine S-Variable), funktioniert der zweite Schritt der Ersetzung nur mit der Einstellung JV-REPLACEMENT=*AFTER-BUILTIN. |
(5) | Die angeforderte Datei ist im gewünschten Pubset nicht vorhanden. |