Condicionar pasos de un JCL: parámetro COND


En este artículo vamos a examinar la forma “clásica” de condicionar la ejecución de un paso de JCL: el parámetro COND.

Al incluir COND en un paso, podemos comprobar el código de retorno de uno o varios pasos anteriores mediante expresiones relacionales. Si alguna de las expresiones es verdadera, entonces el paso NO se ejecuta y el JCL continúa por el siguiente.

Si un paso termina anormalmente debido a un abend, lo habitual es que el sistema cancele la ejecución de los siguientes pasos.  Podemos cambiar este comportamiento mediante el parámetro COND=EVEN, que indica que el paso se debe ejecutar aunque se haya producido un abend.  COND=ONLY provoca que el paso se ejecute sólo en caso de abend.

El parámetro COND también se puede usar a nivel de job. En este caso la condición se evalúa para cada paso del JCL. En caso de que se cumpla para algun paso, terminará la ejecución del job.

Se utiliza COND a nivel de paso en vez de a nivel de job en los siguientes casos:

  • Si las comprobaciones de los códigos de retorno son diferentes para cada paso
  • Cuando queremos comprobar el código de retorno de un paso concreto.
  • Si queremos incluir una condición de abend con ONLY o EVEN.
  • Cuando queremos que se salte un único paso.

Veámoslo con ejemplos:

1)  A nivel de job

//P1 JOB ,’PRUEBA’,COND=((10,GT),(20,LT))

Antes de la ejecución de cada paso se comprobará si se cumple la condición:

10 > CR OR 20 < CR

Siendo CR el retorno del paso precedente. Si la condición es verdadera, terminará la ejecución del job.

2) A nivel de paso con condición general

//PASO2 EXEC PGM=PROGR2,COND=(1,LT)

Saltar PASO2  si se cumple 1 < CR para todos los pasos anteriores. La ejecución continuará por el siguiente paso.

3) A nivel de paso con condición de paso

//PASO3  EXEC PGM=PROGR3,COND=(4,EQ,PASO1)

Saltar PASO3 si se cumple CR = 4 para PASO 1. La ejecución continuará por el siguiente paso.

4) con COND=EVEN

//PASO4 EXEC PGM=PROGR4,COND=(EVEN)

PASO4 se ejecutará  tanto si los pasos anteriores han terminado con éxito como si se ha producido algún abend.

5) Con COND=ONLY

//PASOER EXEC PGM=PROGERR,COND=(ONLY)

PASOER se ejecutará  sólo si se ha producido un abend en alguno de los pasos anteriores.

6)EVEN u ONLY combinados con otra condición

//PASO6 EXEC PROC=PROGR6,COND =((20,LT),EVEN)

Saltar PASO6  si 20 < CR para cualquiera de los pasos anteriores. Si no es así,  se ejecutará siempre (incluso en caso de abend).

//PASO7 EXEC PROC=PROGR7,COND =((10,LE),ONLY)

PASO7 se ejecutará sólo en caso de abend, siempre que además no se cumpla 10 <= RC para todos los pasos anteriores.



Deja un comentario