En esta entrada vamos a añadir dos nuevas funciones al panel de errores de OPC (5.4). La primera consiste en añadir la hora del sistema. Nos puede venir bien para saber si el panel se ha quedado “pillado” cuando trabajamos monitorizando procesos en error. También vamos a añadir una nueva opción al panel para ver la salida de un job fallado sin tener que ir a buscarlo al spool.
Para hacer la parte de ver las salidas del spool, usaremos un REXX al que llamaremos desde el panel. Para saber dónde debemos guardarlo para poder ejecutarlo, tendremos que mirar en el miembro de nuestro procedimiento de logon de TSO (por ejemplo, ISPFPROC, DBSPROC9, etc.) y ver las librerías que tenemos disponibles en la DD “SYSPROC”.
En este caso, yo usaré la librería ADCD.Z113.PROCLIB para guardarlo. El REXX que usaremos, de nombre OPCSPOOL, es el siguiente:
/* REXX */
PARSE ARG JOBID ' ' JOBNAME
ENCONTRADO=0
ADDRESS TSO
"PROFILE NOPREFIX"
"DELETE" USERID()".OPC.SALIDA SCRATCH NONVSAM"
"ALLOCATE DATASET("USERID()".OPC.SALIDA) NEW DIR(0) DSORG(PS)
BLOCK(3200) SPACE(1,1) RECFM(V,B) LRECL(240) BLKSIZE(3120) REUSE"
RC=ISFCALLS('ON')
/* ACCESS THE ST PANEL */
ADDRESS SDSF "ISFEXEC ST"
LRC=RC
CALL MSGRTN
IF LRC<>0 THEN
EXIT 20
ISFPRTBLKSIZE=3120
ISFPRTLRECL=240
ISFPRTRECFM=VBA
ISFPRTPRIMARY=1
ISFPRTSECONDARY=1
ISFPRTSPACETYPE=CYLS
ISFPRTDSNAME=USERID().OPC.SALIDA
ISFPRTDISP=OLD
DO IX=1 TO JNAME.0
IF JNAME.IX = JOBNAME & JOBID.IX = JOBID THEN
DO
ADDRESS SDSF "ISFACT ST TOKEN('"TOKEN.IX"') PARM(NP XDC)"
ENCONTRADO=1
LRC=RC
CALL MSGRTN
ADDRESS ISPEXEC "BROWSE DATASET('"USERID()".OPC.SALIDA')"
IF LRC<>0 THEN
EXIT 20
END
END
IF ENCONTRADO = 0 THEN
SAY "JOB NO ENCONTRADO EN EL SPOOL"
EXIT
/* SUBROUTINE TO LIST ERROR MESSAGES */
MSGRTN: PROCEDURE EXPOSE ISFMSG ISFMSG2.
/* THE ISFMSG VARIABLE CONTAINS A SHORT MESSAGE */
IF ISFMSG<>"" THEN
SAY "ISFMSG IS:" ISFMSG
/* THE ISFMSG2 STEM CONTAINS ADDITIONAL DESCRIPTIVE */
/* ERROR MESSAGES */
DO IX=1 TO ISFMSG2.0
SAY "ISFMSG2."IX "IS:" ISFMSG2.IX
END
RETURN
Este REXX recibe en JobID y el JobName que queremos buscar, crea un dataset que contendrá la salida, busca en la opción ST de SDSF el job que coincida con los datos que le hemos pasado y, si lo encuentra, copia la salida de ese job al dataset que hemos creado en el REXX. Si no lo encuentra, mostrará un mensaje indicando que no se ha encontrado.
Una vez hemos guardado el REXX en la librería correspondiente. Vamos a ir a modificar el panel de OPC. Para saber el nombre del panel que tenemos que modificar, vamos a la opción 5.4 de OPC y escribimos “panelid”.
Arriba a la izquierda, veremos que se llama “EQQMEP1L”.
Ahora vamos a la librería que contiene los paneles, en mi caso, TWS860.SEQQPENU. Para saber cómo se llama tu librería que contiene los paneles de OPC, deberás revisar tu procedimiento de logon de TSO (por ejemplo, ISPFPROC) y mirar la DD “ISPPLIB”. Ahí debe estar incluida la librería que contiene el panel EQQMEP1L.
Entramos en la librería de paneles, en mi caso, TWS860.SEQQPENU.
Editamos el miembro EQQMEP1L.
NOTA: Recomiendo hacer una copia del panel antes de modificarlo, por si acaso.
Bajamos hasta la línea que pone “%I,O,J,L,RC,FSR,FJR,FSC,RI,C,MH,MR,SJR”, en mi caso, la línea 94. Añadimos una línea nueva con el texto “%S+Buscar en Spool”.
NOTA: El texto “%V+Buscar en Virtual” no hace falta ponerlo ya que no lo vamos a usar.
En la línea siguiente a la que hemos añadido (la que pone “<LAYOUT ID…”), añadiremos, al final de la línea, el texto <HORA &ZTIME, para que aparezca la hora del sistema en el panel.
Seguimos bajando hasta encontrar la línea que pone “&delgrp = 'DG' /* Delete group */” (línea 145) e insertamos una nueva línea. Pondremos el texto “&bspool = 'S' /* BUSCAR SPOOL */”. Esto sirve para asignar al comando de línea “S” la acción que debe realizar.
Seguimos bajando hasta encontrar la línea que contiene el texto “&delgrp ,'MOD(EQQMMMQX,GDEL,&maaid,…” y añadimos una nueva línea. Pondremos el texto “&bspool , 'CMD(%OPCSPOOL &opjes &opjbn)' /* BUSCAR SPOOL */”. Esto sirve para que, cuando pongamos “S” en uno de los jobs fallados en OPC, llame al REXX que hemos guardado anteriormente y le pase el JobID y el JobName.
Ya hemos terminado de hacer las modificaciones en el panel. Lo guardamos, salimos de la sesión de TSO y volvemos a entrar para poder ver los cambios que hemos realizado.
Al entrar en la opción 5.4 de OPC, vamos que ya aparece la hora y la opción nueva que hemos añadido. Ponemos una “S” en uno de los jobs fallados.
Aparecerá lo siguiente, pulsamos intro.
Ya veremos la salida del job, si está en el spool.
NOTA: Observamos que la librería que contiene la salida se llama, en este caso, IBMUSER.OPC.SALIDA.
Si no queremos que salga tanta traza en rojo cuando buscamos una salida, en el REXX, podemos comentar la línea “CALL MSGRTN” y saldrá de la siguiente manera:
Si queremos ver uno que ya no tenemos en el spool, aparecerá el siguiente mensaje.
Hasta aquí todo lo relacionado con esta entrada.