viernes, 3 de octubre de 2014

Jcl: condiciones IF-ELSE

En los jcl's podemos poner condiciones, en función de las cuales se ejecutarán unos pasos u otros.

Un ejemplo, con rama IF podría ser el siguiente:

//INICIO     IF (PASO01.RC EQ 2) OR (PASO01.RC EQ 2) OR (PASO03.RC EQ 2)
//PASO04    EXEC
....
//FIN ENDIF

Vemos tres partes a destacar:

  • INICIO --> Está el IF / THEN junto con la condición
  • FIN -------> Está el ENDIF, delimita el fin del IF.
  • PASO04 -> Este paso se encuentra entre el IF / THEN y el ENDIF; lo que significa que, en caso de cumplirse la condición del IF / THEN existente en el paso INICIO, se ejecutaría. Si dicha condición no se cumple, este paso no se ejecutaría.

Otro ejemplo más, en esta ocasión con ramas IF - ELSE. En el siguiente ejemplo vemos la rama IF en el paso INICIO1, si se cumple la condición existente se ejecutarían los pasos del jcl que están a continuación (PASO04, PASO05,...):

//INICIO1    IF (PASO01.RC EQ 2) OR (PASO01.RC EQ 2) OR (PASO03.RC EQ 2)
//PASO04    EXEC
//PASO05    EXEC
....
//ELSE1      ELSE
//PASO10    EXEC
//PASO11    EXEC
....

//FIN1 ENDIF

Si la mencionada condición no se cumple, la ejecución se iría por la rama ELSE existente en el paso ELSE1, lo que significa que se ejecutarían todos aquellos pasos existentes entre la rama ELSE del paso ELSE1 y el ENDIF del paso FIN1 (en este caso se ejecutarían los pasos PASO10, PASO11, ...).

En las condiciones vemos que se utiliza lo siguiente:

     PASO10.RC EQ 2
     PASO20.RC EQ 2
     PASO30.RC EQ 2

Tenemos que en las condiciones se pone el nombre del paso (PASO10, PASO20, ...) un punto y RC. Ésto es para saber el código con que termina un determinado paso, dicho código puede ser 0 o distinto de 0. En caso de ser distinto de 0, tenemos que un código menor que 8 sería un warning mientras que un código igual o superior a 8 sería un error.

A continuación está la comparación = o EQ. Finalmente el código con el que queremos hacer la comparación.

Aparte de =/EQ para ver igualdad tenemos otros elementos como:

  • LE - Less or Equal
  • LT - Less Than

LE es útil cuando queremos que una condición se ejecute cuando el código devuelto por un paso es menor o igual a un determinado valor.

LT es útil cuando queremos que una condición se ejecute cuando el código devuelto por un paso es menor que un determinado valor.

Como culturilla general os diré que las palabras INICIO1, ELSE1 y FIN1 que habéis visto para incluir el IF-ELSE-ENDIF se utiliza en algunas instalaciones pero en otras no es necesario ponerlas. ¿Cómo podemos saber si es necesario ponerlas o no? Muy fácil. Mediante la opción 3.14 podemos buscar la palabra IF (eso sí, la pondremos entre comillas simples) en la librería de jcl's de producción para ver jcl's de ejemplo y ver si en alguna de ellas se usan o no. En función de lo que encontremos pues las pondremos o no.