JCL – IF-THEN-ELSE

Une autre approche pour contrôler le traitement des tâches consiste à utiliser des constructions IF-THEN-ELSE.
Cela donne plus de flexibilité et une manière conviviale de traitement conditionnel.

Syntaxe

Voici la syntaxe de base d’une construction JCL IF-THEN-ELSE :

//nom IF condition THEN
liste d'instructions 
//* action à entreprendre lorsque la condition est vraie
//nom ELSE 
liste d'instructions 
//* action à entreprendre lorsque la condition est fausse 
//nom ENDIF

Voici la description des termes utilisés dans la construction IF-THEN-ELSE ci-dessus :

  • nom : Ceci est facultatif et un nom peut avoir de 1 à 8 caractères alphanumériques commençant par l’alphabet, #,$ ou @.
  • Condition : Une condition aura un format : KEYWORD OPERATOR VALUE, où KEYWORDS peut être RC (Return Code), ABENDCC (System or user execution code), ABEND, RUN (étape démarrée en exécution).
    Un OPERATOR peut être un opérateur logique (AND (&), OR (|)) ou un opérateur relationnel (<, <=, >, >=, <>).

Exemple

Voici un exemple simple montrant l’utilisation de IF-THEN-ELSE :

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//PRC1   PROC
//PST1	   EXEC PGM=SORT
//PST2	   EXEC PGM=IEBGENER
//       PEND
//STP01  EXEC PGM=SORT 
//IF1    IF STP01.RC = 0 THEN
//STP02     EXEC PGM=MYCOBB1,PARM=123
//       ENDIF
//IF2    IF STP01.RUN THEN
//STP03a    EXEC PGM=IEBGENER
//STP03b    EXEC PGM=SORT
//       ENDIF
//IF3    IF STP03b.!ABEND THEN
//STP04     EXEC PGM=MYCOBB1,PARM=456
//       ELSE
//       ENDIF
//IF4    IF (STP01.RC = 0 & STP02.RC <= 4) THEN
//STP05     EXEC PROC=PRC1
//       ENDIF
//IF5    IF STP05.PRC1.PST1.ABEND THEN
//STP06     EXEC PGM=MYABD
//       ELSE
//STP07     EXEC PGM=SORT
//       ENDIF

Essayons d’examiner le programme ci-dessus pour le comprendre un peu plus en détail :

  • Le code retour de STP01 est testé dans IF1. Si c’est 0, alors STP02 est exécuté. Sinon, le traitement passe à l’instruction IF suivante (IF2).
  • Dans IF2, si STP01 a démarré l’exécution, alors STP03a et STP03b sont exécutés.
  • Dans IF3, si STP03b ne ABEND pas, alors STP04 est exécuté. Dans ELSE, il n’y a pas d’instructions. C’est ce qu’on appelle une instruction NULL ELSE.
  • Dans IF4, si STP01.RC = 0 et STP02.RC <=4 sont TRUE, alors STP05 est exécuté.
  • Dans IF5, si l’étape de procédure PST1 dans PROC PRC1 dans l’étape de travail STP05 ABEND, alors STP06 est exécuté. Sinon STP07 est exécuté.
  • Si IF4 est évalué à faux, alors STP05 n’est pas exécuté. Dans ce cas, IF5 n’est pas testé et les étapes STP06, STP07 ne sont pas exécutées.

IF-THEN-ELSE ne sera pas exécuté en cas d’arrêt anormal de la tâche, comme l’annulation de la tâche par l’utilisateur, l’expiration de la durée de la tâche ou un jeu de données référencé en arrière à une étape qui est contournée.