Der Wert eines Prozedurparameters, eines S-Variablenausdrucks oder einer Jobvariablen kann Kommando- oder Anweisungsteile ersetzen. Der zu ersetzende Ausdruck ist gekennzeichnet durch ein &-Zeichen, dem unmittelbar der Name des Prozedurparameters bzw. der Jobvariablen oder ein in Klammern gesetzter S-Variablenausdruck folgt. SDF ersetzt den Ausdruck vor der Ausführung durch den entsprechenden Wert. Die daraus resultierende Eingabe wird von SDF syntaktisch geprüft. Die Ersetzung von Ausdrücken 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.
Prozedurparameter ersetzen
Ausdrücke der Form „¶meter“ werden in Nicht-S-Prozeduren durch den Wert ersetzt, der parameter im Kommando BEGIN-PROCEDURE, CALL-PROCEDURE bzw. beim Prompting zugewiesen wurde. Ersetzt werden Ausdrücke in Kommandos. Innerhalb von Eingabedaten (werden von SYSDTA gelesen) werden Ausdrücke nur ersetzt, wenn ein Escape-Zeichen im Operanden ESCAPE-CHARACTER des BEGIN-PROCEDURE vereinbart wurde (#, @, & bzw. *) und der Ausdruck mit diesem Zeichen beginnt. Innerhalb von Anweisungen (von SYSSTMT gelesen) werden Ausdrücke derzeit wie in Kommandos ersetzt. Es wird jedoch empfohlen ESCAPE-CHARACTER='&' zu vereinbaren, da eine Änderung dieses Verhaltens nicht auszuschließen ist.
Für die Ersetzung von Prozedurparametern bestehen folgende Einschränkungen:
Innerhalb von CJC-Kommandofolgen ist das Ersetzen nicht möglich.
Prozedurparameter 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.
Ausdrücke können nicht geschachtelt werden.
Bei Verdoppelung des &-Zeichens bzw. des Escape-Zeichens wird keine Ersetzung durchgeführt und das zweite &- bzw. Escape-Zeichen entfällt.
Jobvariablen ersetzen
Diese Funktion ist nur verfügbar, wenn das kostenpflichtige Substem JV geladen ist.
Ausdrücke zur Ersetzung von Jobvariablen werden angegeben:
direkt über Jobvariablennamen 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 KommandoSET-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 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 3).
Ausdrücke können nicht geschachtelt werden.
Im Dialog und in S-Prozeduren wird eine Jobvariablen-Ersetzung in der oben gezeigten Form nur durchgeführt, wenn keine gleich lautende S-Variable bzw. Builtin-Funktion bekannt ist. Diese Form kann aber ersetzt werden durch die Builtin-Funktion JV( ). Die Angabe besitzt dann die Form „
&(JV(JV-NAME=<c-string 1..54>))
“. Siehe auch Builtin-Funktion "JV( ) - Jobvariable abfragen".
Enthält der Jobvariablenname die Katalog- und/oder die Benutzerkennung, kann nur eine Jobvariablen-Ersetzung durchgeführt werden.
S-Variablenausdrücke ersetzen
Ausdrücke der Form „&(ausdruck)“ werden im Dialog und in S-Prozeduren ersetzt durch den Wert von ausdruck, wobei ausdruck der Name eine S-Variablen, einer Builtin-Funktion oder ein gültiger S-Variablenausdruck sein kann. Für eine S-Variable, deren Name keinen Punkt enthält, kann der Ausdruck auch in der Form „&s-variable” angegeben werden. Prozedurparameter einer S-Prozedur sind S-Variablen und werden ebenfalls in Ausdrücken ersetzt.
Ersetzt werden Ausdrücke in Kommandos. Innerhalb von Eingabedaten (werden von SYSDTA gelesen) werden Ausdrücke nur ersetzt, wenn ein Escape-Zeichen im Operanden DATA-ESCAPE-CHARACTER des Kommandos SET-PROCEDURE-OPTIONS vereinbart wurde (#, @, & bzw. *) und der Ausdruck mit diesem Zeichen beginnt.
Innerhalb von Anweisungen (von SYSSTMT gelesen) werden Ausdrücke derzeit wie in Kommandos ersetzt.
Ausdrücke können geschachtelt werden.
Für Ersetzung von S-Variablenausdrücken bestehen folgende Einschränkungen:
Kontrollflusskommandos können nicht erzeugt werden.
Der zu ersetzende S-Variablenausdruck wird in den Typ STRING konvertiert.
S-Marken können nicht erzeugt werden.
Innerhalb von CJC-Kommandofolgen ist das Ersetzen nicht möglich.
S-Variablenausdrücke können in Prozeduren und 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.
Bei Verdoppelung des &-Zeichens bzw. des Escape-Zeichens wird keine Ersetzung durchgeführt und das zweite &- bzw. Escape-Zeichen entfällt.
Beispiele
1. Ersetzen von Jobvariablen im Dialog:
/cre-jv jv=cmd ————————————————————————————————————————— (1)
/mod-jv jv=cmd,set-value='SHOW-FILE-ATTR' —————————————— (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=egon,set-value='-FILE-ATTR F-NAME=PROC.' ———— (4)
/set-jv-link link-name=walter,jv-name=egon ————————————— (5)
/sh&(*walter)
% 3 :2OSG:$USER1.PROC.JV ——————————————————————————————————— (6) %:2OSG: PUBLIC: 1 FILE RES= 3 FRE= 2 REL= 0 PAGES
(1) | Es wird der Jobvariablenname „CMD“ vereinbart. |
(2) | Die Jobvariable CMD erhält den Wert 'SHOW-FILE-ATTR' (Abkürzung des Kommandonamens SHOW-FILE-ATTRIBUTES). |
(3) | Nach Absenden des Kommandos wird der Variablenstring durch das in der Jobvariablen definierte Kommando ersetzt und das Kommando ausgeführt. |
(4) | Der Wert der Jobvariablen EGON wird geändert. Er enthält jetzt nur noch einen Teil des Kommandonamens ('-FILE-ATTRIBUTES') und den teilqualifizierten Dateinamen 'PROC.'. |
(5) | Der Jobvariablen EGON wird der Linkname „WALTER“ 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 durch den Linknamen hergestellt. |
2. Ersetzen von Jobvariablen und S-Variablen im Dialog:
/sh-jv cmd —————————————————————————————————————————————————————————————— (1) %SHOW-FILE-ATTR /&(cmd) proc.jv ————————————————————————————————————————————————————————— (2) % 3 :2OSG:$USER1.PROC.JV %:2OSG: PUBLIC: 1 FILE RES= 3 FRE= 2 REL= 0 PAGES /cmd='PRINT-DOCUMENT' ———————————————————————————————————————————————————— (3) /sh-var cmd CMD = PRINT-DOCUMENT /&(cmd) proc.jv ————————————————————————————————————————————————————————— (4) % SCP0810 SPOOLOUT FOR FILE ':2OSG:$USER1.PROC.JV' ACCEPTED. TSN: '1FAL', SPOOL OUT-NAME: 'SDFTEST', MONJV: '*NONE' % SCP1025 PRINT JOB ACCEPTED BY SERVER 'GH5090Y0' WITH TSN '5BXC' /&(:2osg:cmd) proc.jv ———————————————————————————————————————————————————— (5) % 3 :2OSG:$USER1.PROC.JV %:2OSG: PUBLIC: 1 FILE RES= 3 FRE= 2 REL= 0 PAGES /&(jv(jv-name='CMD')) proc.jv ———————————————————————————————————————————— (6) % 3 :2OSG:$USER1.PROC.JV %:2OSG: PUBLIC: 1 FILE RES= 3 FRE= 2 REL= 0 PAGES /
Die Jobvariable CMD
besitzt den Wert SHOW-FILE-ATTR
.
(1) | Die Jobvariable |
(2) | Der Kommandoname wird aus der Jobvariablen |
(3) | Die S-Variable |
(4) | In der Eingabe wird der Ausdruck |
(5) | Um bei der Ersetzung den Inhalt der Jobvariablen |
(6) | Die Ersetzung der Jobvariableninhalts kann auch über die Builtin-Funktion JV( ) erreicht werden. |
3. Name der zu ersetzenden Jobvariablen wird als Prozedurparameter einer Nicht-S-Prozedur übergeben:
/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.Zur Möglichkeit eines verschachtelten Ausdrucks siehe Beispiel 4, Punkt (4). |
(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.
|
4. Ersetzung von Jobvariablen und S-Variablen in einer S-Prozedur, wobei der Jobvariablenname als Prozedurparameter übergeben wird:
Inhalt der Prozedurdatei DO.JVTEST:
/ SET-PROC-OPT JV-REPLACE=*AFTER-BUILTIN / DECL-PAR JV-1(INIT=*PROMPT) / &(JV(JV-NAME=JV-1)) FILE-NAME=LST.JOB /ERROR: IF-BLOCK-ERROR / WRITE-TEXT C'** Error &MC **' / ELSE / WRITE-TEXT C'** Command &(&(JV-1)) executed **' / END-IF /END: EXIT-PROC
Prozedurablauf:
/show-jv jv=cmd ————————————————————————————————————————————————————————————— (1) %SHOW-FILE-ATTR /call-proc do.jvtest,log=*yes % 1 1 /SET-PROC-OPT JV-REPLACE=*AFTER-BUILTIN % 2 1 /DECL-PAR JV-1(INIT=*PROMPT) %JV-1: cmd ———————————————————————————————————————————————————————————————— (2) % 3 1 /SHOW-FILE-ATTR FILE-NAME=LST.JOB ———————————————————————— (3) % 3 :N:$USER0001.LST.JOB %:N: PUBLIC: 1 FILE RES= 3 FRE= 3 REL= 3 PAGES % 4 1 /ERROR: % 4 1 / IF-BLOCK-ERROR % 6 1 /ELSE % 7 1 /WRITE-TEXT C'** Command SHOW-FILE-ATTR executed **' ** Command SHOW-FILE-ATTR executed ** —————————————————————————————————————— (4) % 8 1 /END-IF % 9 1 /END: % 9 1 / EXIT-PROC /
(1) | Als Inhalt der Jobvariablen |
(2) | Nach Aufruf der Prozedur |
(3) | Es wird das Kommando SHOW-FILE-ATTRIBUTES ausgeführt. |
(4) | An dieser Stelle wurde ein verschachtelter Ausdruck verwendet: Eine Jobvariable soll ersetzt werden, wobei sich der Name aus dem zu ersetzenden Ausdruck für die S-Variable |