Resumen

Construir un JCL completo que compile, prepare archivos y ejecute un programa COBOL para generar un reporte es una de las tareas más representativas del trabajo en entornos mainframe. Aquí se recorre paso a paso todo el proceso: desde la creación de los data sets de entrada, pasando por las utilerías IEFBR14 e IEBGENER, hasta la codificación del paso que lanza el programa y produce el reporte final.

¿Cómo se crean los archivos de entrada para el programa?

Antes de escribir el JCL es necesario tener listos los archivos que el programa va a leer. Tras iniciar sesión en el emulador [0:24], se accede a la opción 3.4 del menú y se abre la carpeta Platsi JCLs. Desde una ventana auxiliar (start) se ingresa a utilities > data set para crear dos archivos:

  • ERK01.ALUMNOS.BECAS: contendrá los registros de alumnos beneficiarios.
  • ERK01.ALUMNOS.BECA: archivo vacío que servirá para demostrar el comportamiento del programa cuando no encuentra registros.

Ambos se definen con formato fijo bloqueado (FB), longitud de registro de 50, tamaño de bloque de 19050, volumen MBSCAT, unidad tracks, espacio primario de 75 y secundario de 2 [1:17].

¿Qué estructura tiene el JCL que ejecuta el reporte?

Dentro de la carpeta Platsi.JCL se crea un nuevo miembro llamado JCLPGM1 [2:27]. La estructura del JCL se organiza en varios pasos con objetivos bien definidos.

¿Cómo se define la tarjeta JOB y el paso de compilación?

El JCL inicia con el nombre REPORT01 y la tarjeta JOB que referencia al programa PGM UNIV [2:55]. Los parámetros de la tarjeta JOB incluyen:

  • CLASS=A: clase de ejecución.
  • MSGCLASS=H: dirige los mensajes al spool para visualizar el resultado.
  • REGION=8M: memoria virtual máxima.
  • TIME=1440: tiempo máximo de ejecución.
  • NOTIFY: envía notificación al usuario al concluir.
  • MSGLEVEL=(1,1): muestra todas las líneas del JCL en el spool [3:32].

El paso de compilación se codifica con EXEC COBOL, que invoca el procedure encargado de compilar y hacer el link-edit. Se indica la ubicación del programa fuente en ERK01.PLATZI.SRC y la carpeta de módulos de carga en ERK01.PLATZI.LOAD [4:14].

¿Para qué se usa IEFBR14 en los pasos de borrado?

La utilería IEFBR14 se emplea para preparar los archivos de salida antes de la ejecución. El paso 01 borra y recrea el archivo ERK01.REPORTE.BECAS, donde se alojará el contenido del reporte. La disposición indica que, si termina con éxito, se catalogue el archivo, y si falla, se elimine. Se define en unidad 3350, espacio en tracks con longitud cero por tratarse de una inicialización [5:12].

El paso 02 repite la misma lógica para el archivo ERK01.ORDENA.ALUMNOS, que guardará el respaldo del archivo de entrada con los alumnos beneficiarios [6:35].

¿Cómo funciona IEBGENER para respaldar el archivo de entrada?

El paso 03 utiliza IEBGENER para copiar el contenido de ERK01.ALUMNOS.BECAS hacia ERK01.ORDENA.ALUMNOS. Este paso se ejecuta solo si el paso 02 finalizó con un código de retorno menor o igual a 9, lo que se controla mediante el parámetro COND [7:40]. La disposición del archivo de salida se configura para catalogar en caso de éxito y eliminar en caso de error.

¿Cómo se codifica el paso que ejecuta el programa y genera el reporte?

El paso 04 es el corazón del JCL. Se ejecuta el programa PGM UNIV y recibe como parámetro la fecha de ejecución (por ejemplo, 05042021) encerrada entre apóstrofos [9:25]. Los componentes de este paso son:

  • STEPLIB: apunta a ERK01.PLATZI.LOAD para localizar el módulo de carga.
  • SYSOUT=*: redirige la salida estándar al spool.
  • ALUMNO: DD que referencia el archivo de entrada ERK01.ALUMNOS.BECAS con disposición OLD, indicando que ya existe y no se modificará.
  • REPORTE: DD que apunta a ERK01.REPORTE.BECAS con disposición de catalogar en éxito y delete en error.
  • UNIT=SYSDA: asignación automática de unidad de disco.
  • SPACE=(TRK,(10,5),RLSE): espacio en tracks con liberación automática del espacio no utilizado [10:48].

Por último, se define el DCB (Data Control Block) con formato FB (fijo bloqueado), longitud de registro de 80 y tamaño de bloque de 27200 [11:30].

Con esto queda completa la codificación del JCL. Cada paso cumple una función específica: compilar, limpiar archivos, respaldar datos y ejecutar el programa que produce el reporte. Si tienes dudas sobre algún parámetro o quieres compartir cómo adaptaste este JCL a tu entorno, deja tu comentario.