IBM Workload Automation, version 9.3

Codage des variables dans JCL

Le codage des variables dans JCL suit certaines règles.

Les noms de variable, qu'ils soient définis par l'utilisateur ou fournis avec le produit, acceptent jusqu'à 8 caractères alphanumériques, le premier devant être alphabétique. Les valeurs des variables admettent jusqu'à 44 caractères alphanumériques.

Lorsque vous utilisez une variable dans un travail, faites-la précéder d'une perluète (&), d'un symbole de pourcentage (%) ou d'un point d'interrogation (?). Le symbole qui précède la variable détermine comment la variable est résolue :
Perluète (&)

Ces variables sont substituées de gauche à droite dans la ligne. Les variables de type perluète correspondent aux variables standard des procédures JCL de z/OS et se comportent en conséquence. Pour plus d'informations, voir JCL Reference.

Si une variable & est immédiatement suivie d'une variable % (c'est-à-dire qu'il n'y a pas de caractère de terminaison), une variable composée est automatiquement créée. Voir Variables composées. Une variable composée est également formée lorsqu'une variable & fait immédiatement suite à une variable ?.

Les chaînes qui commencent par && ne font l'objet d'aucune substitution. Cela tient au fait que, dans JCL, la double perluète est généralement utilisée pour désigner un fichier temporaire. Ce type de chaîne n'est donc pas affecté par la substitution de variables.

Signe Pourcentage (%)
Ces variables peuvent être utilisées pour former des variables simples et des variables composées.
Variables simples
Si la variable est précédée d'un % et se termine par un point ou un caractère de terminaison autre que %, une valeur est attribuée à la variable, laquelle fait l'objet de la substitution.
Variables composées
Grâce à la substitution JCL, vous pouvez former des variables composées. Une variable composée est constituée d'une concaténation :
  • d'une variable (de tout type) suivie d'une variable de type pourcentage sans point ou autre symbole de terminaison,
  • d'une variable de type point d'interrogation suivie d'une variable de type perluète sans point ou autre symbole de terminaison.

Les valeurs des variables de type pourcentage constitutives d'une variable composée ne sont pas substituées directement. Au lieu de cela, ces valeurs sont utilisées pour former de nouvelles variables, qui ont, elles-mêmes, leur propre valeur. Ces variables sont résolues en une série de transferts. Les différentes variables constitutives d'une variable composée sont résolues de droite à gauche.

Prenons, par exemple, la ligne de JCL suivante d'un travail :
//STEPLIB DD DSN=MY.&DATA%SET,DISP=OLD

Supposons que la valeur LIB a été attribuée à SET. A l'issue du premier transfert, la variable DATA%SET devient DATALIB car la variable de type pourcentage la plus à droite est résolue au cours de ce même transfert. Ce premier transfert a formé une nouvelle variable, DATALIB, que l'agent tentera de résoudre à son prochain transfert sur cette ligne de JCL.

Les variables composées peuvent être constituées d'une séquence de plusieurs variables %. Par exemple :
//DDNAME1 DD DSN=MY.%VAR1%VAR2%VAR3....DATA,DISP=OLD
Supposons que VAR3 a la valeur SIX et que VAR2SIX a la valeur JUNE. Lors du premier transfert sur cette ligne de JCL, la variable %VAR1%VAR2%VAR3....DATA devient %VAR1%VAR2SIX...DATA. Lors du second transfert, la variable %VAR1%VAR2SIX. devient %VAR1JUNE..DATA. La valeur attribuée à %VAR1JUNE. détermine la valeur finale faisant l'objet d'une substitution.

Notez qu'un point a été supprimé à chaque substitution de la variable. Vous devez donc spécifier le nombre exact de points pour garantir une substitution correcte. Dans l'exemple précédent, la présence d'un point supplémentaire était indispensable pour indiquer le début du qualificatif de fichier de second niveau.

Dans l'exemple suivant, il vous suffit d'une parenthèse pour compléter la variable composée. Effectivement, la parenthèse n'est pas supprimée lors de la substitution.
//DDNAME1 DD DSN=MY.%VAR1%VAR2%VAR3(MEMBER),DISP=OLD
Point d'interrogation (?)
Les variables avec point d'interrogation sont positionnelles, c'est-à-dire que vous pouvez spécifier dans quelle colonne de la ligne la valeur de la variable doit commencer lorsque la variable fait l'objet d'une substitution. La position où est placée la valeur est indiquée dans le travail où la variable est utilisée. Par exemple :
?VAR1.
place la valeur VAR1 sur la ligne et dans la colonne où apparaît la variable.
?nnVAR1.
aura pour effet d'insérer la valeur de VAR1 sur la ligne où figure la variable, en commençant au numéro de colonne spécifié par nn.

Plusieurs variables ? peuvent figurer sur une même ligne de JCL. La position des variables proprement dites n'a aucune incidence sur celle des valeurs de variables. Ces positions sont déterminées par le numéro de colonne spécifié pour la variable. Par exemple :

 //SYSIN DD *
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
          ?20VAR1.?9VAR2.

VAR1 a pour valeur APRIL et VAR2 MAY (la ligne de graduation n'a été insérée qu'à des fins d'illustration), le résultat après substitution de variables se présentera ainsi :

 //SYSIN DD *
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
         MAY        APRIL

La valeur des variables avec ? est évaluée de la même manière que celle des variables avec & ou %, et dans la même séquence. Cependant, les variables avec ? ne sont traitées qu'après substitution de toutes les variables de type pourcentage et perluète car la valeur d'une variable de type ? ne peut être placée que dans des zones vides de la ligne. L'agent ne peut savoir quelles zones d'une ligne seront vides qu'une fois la substitution de perluète et de pourcentage effectuée.

Les variables tabulaires ne peuvent pas se chevaucher. En d'autres termes, les valeurs de deux variables différentes ne peuvent pas être définies pour occuper le même espace sur une ligne. L'espace occupé à l'origine par les variables proprement dites est ignoré lors de la substitution. Par exemple :

 //SYSIN DD *
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
          ?20VAR1.?21VAR2.
 /*

VAR1 a pour valeur APRIL et VAR2 MAY, la substitution serait impossible car les deux variables tentent d'utiliser les colonnes 21, 22 et 23.

L'agent remplace l'espace occupé par la variable par des espaces, s'il n'est pas couvert par la valeur de substitution. Par exemple :

 //SYSIN DD *
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
 THIS IS?40VAR1. THE STANDARD DATA.           IS A WET MONTH.

VAR1 a pour valeur APRIL. Après substitution, la ligne se présente ainsi :

 //SYSIN DD *
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
 THIS IS         THE STANDARD DATA.     APRIL IS A WET MONTH.
L'agent remplace l'espace occupé par la variable par des espaces. Les autres données de la ligne n'ont pas été déplacées.
Remarque : Les variables prédéfinies n'ont pas de position implicite. Lorsque ces variables sont spécifiées en tant que variables tabulaires, vous devez inclure un numéro de colonne. Par exemple, ?OADID n'est pas acceptable, en revanche, ?20OADID est valide : l'ID application est substitué au niveau de la colonne 20.

Vous pouvez utiliser plusieurs fois une variable au sein d'un même travail en la faisant précéder de différents symboles de préfixe.

Une variable de type perluète ou pourcentage peut recevoir une autre variable.

Un point marque la fin d'un nom de variable. Pour préserver la compatibilité avec la substitution de variable dans les procédures JCL de z/OS, l'agent pour z/OS part du principe qu'une variable est terminée (même si le point le terminaison est manquant) lorsqu'elle est suivie de l'un des symboles répertoriés dans le tableau ci-dessous.
Tableau 1. Symboles marquant la fin des variables.
Symbole Description
, Virgule
/ Barre oblique
' Guillemet simple
( Parenthèse gauche
) Parenthèse droite
* Astérisque
+ Signe plus
- Tiret
= Signe égal
  Vide (␢)

P:ar exemple, si LIBRARY doit prendre la valeur LINKLIB dans l'instruction suivante :

//STEPLIB DD DSN=MY.&LIBRARY.(HDEAQ03),DISP=SHR

ou l'instruction suivante (sans le point de terminaison) :

//STEPLIB DD DSN=MY.&LIBRARY(HDEAQ03),DISP=SHR

La ligne JCL se présentera ainsi :

//STEPLIB DD DSN=MY.LINKLIB(HDEAQ03),DISP=SHR

Le produit considère que la variable LIBRARY est terminée lorsqu'il détecte la parenthèse gauche '('.

Le point de terminaison est supprimé lorsque de la substitution de variable. Les autres symboles de terminaison sont conservés.