JCL – Paramètre COND

Un paramètre COND peut être codé dans l’instruction JOB ou EXEC du JCL.
Il s’agit d’un test sur le code retour des étapes de travail précédentes.
Si le test est évalué comme vrai, l’exécution de l’étape de travail en cours est ignorée.
Le contournement est simplement une omission de l’étape de travail et non une fin anormale.
Il peut y avoir au plus huit conditions combinées dans un seul test.

Syntaxe

Voici la syntaxe de base d’un paramètre JCL COND :

COND=(rc,opérateur-logique)
or
COND=(rc,opérateur-logique,stepname)
or
COND=EVEN
or 
COND=ONLY

Voici la description des paramètres utilisés :

  • rc : C’est le code de retour
  • opérateur-logique : Cela peut être GT (supérieur à), GE (supérieur ou égal à), EQ (égal à), LT (inférieur à), LE (inférieur ou égal à) ou NE (différent de).
  • stepname : Il s’agit de l’étape/step de job dont le code retour est utilisé dans le test.

Les deux dernières conditions (a) COND=EVEN et (b) COND=ONLY, ont été expliquées ci-dessous.

Le COND peut être codé soit dans l’instruction JOB, soit dans l’instruction EXEC, et dans les deux cas, il se comporte différemment comme expliqué ci-dessous :

COND dans l’instruction JOB

Lorsque COND est codé dans l’instruction JOB, la condition est testée pour chaque step de job.
Lorsque la condition est vraie à un step de job particulier, elle est ignorée avec les steps de job qui la suivent.

Voici un exemple :

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID,COND=(5,LE)
//*
//STEP10 EXEC PGM=PROG01  
//* STEP10 exécute sans aucun test ne soit effectué.

//STEP20 EXEC PGM=PROG02  
//* STEP20 est contourné si RC de STEP10 est supérieur ou égal à 5. 
//* Supposons que STEP10 se termine par RC4 et que le test est donc faux. 
//* Donc STEP20 s'exécute et disons qu'il se termine par RC16.

//STEP30 EXEC PGM=SORT
//* STEP30 est contourné car 5 <= 16.

COND dans l’instruction EXEC

Lorsque COND est codé dans l’instruction EXEC d’un step de job et trouvé vrai, seule ce step de job est ignoré et l’exécution se poursuit à partir du step suivante.

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* En supposant que STP01 se termine par RC0.

//STP02 EXEC PGM=MYCOBB,COND=(0,EQ,STP01)
//* Dans STP02, la condition est évaluée à TRUE et l'étape est ignorée.

//STP03 EXEC PGM=IEBGENER,COND=((10,LT,STP01),(10,GT,STP02))
//* Dans STP03, la première condition échoue et donc STP03 s'exécute.
//* Étant donné que STP02 est contourné, la condition (10,GT,STP02) dans
//* STP03 n'est pas testée.

COND=EVEN

Lorsque COND=EVEN est codé, le step en cours est exécuté, même si l’un des step précédents se termine anormalement.
Si une autre condition RC est codée avec COND=EVEN, le step s’exécute si aucune des conditions RC n’est vraie.

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* En supposant que STP01 se termine par RC0. 

//STP02 EXEC PGM=MYCOBB,COND=(0,EQ,STP01)
//* Dans STP02, la condition est évaluée à TRUE et l'étape est ignorée. 

//STP03 EXEC PGM=IEBGENER,COND=((10,LT,STP01),EVEN)
//* Dans STP03, la condition (10,LT,STP01) est évaluée à vrai, 
//* donc l'étape est ignorée.

COND=ONLY

Lorsque COND=ONLY est codé, le step en cours est exécuté, uniquement lorsque l’un des steps précédentes se termine anormalement.
Si une autre condition RC est codée avec COND=ONLY, le step s’exécute si aucune des conditions RC n’est vraie et si l’un des steps précédents échoue anormalement.

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* En supposant que STP01 se termine par RC0. 

//STP02 EXEC PGM=MYCOBB,COND=(4,EQ,STP01)
//* Dans STP02, la condition est évaluée à FALSE, l'étape est exécutée
//* et suppose que l'étape se termine anormalement.

//STP03 EXEC PGM=IEBGENER,COND=((0,EQ,STP01),ONLY)
//* Dans STP03, bien que STP02 se termine anormalement, la condition 
//* (0,EQ,STP01) est remplie. Par conséquent, STP03 est contourné.