/* REXX */ /* Extrae las fechas de entrada al spool, inicio y fin de */ /* ejecucion de los jobs del spool (ST) */ /* Escrito por: JFG */ /* Fecha: 02/10/2017 */ /* Modificado: 02/04/2018 */ rc=isfcalls('ON') /* Prefijamos el nombre de los jobs para que aparezcan todos */ isfprefix="**" /* Cambiamos el OWNER de los jobs para que aparezcan todos */ isfowner="*" /* Seleccionar las columnas que vamos a usar */ isfcols="jname jobid queue retcode dater timer datee timee timen daten" /* Filtrar las salidas por jobid JOB* y estado PRINT */ isffilter = "jobid eq JOB* queue eq PRINT" /* Relacion entre los filtros jobid y queue = AND */ isffiltermode = "AND" /* Ordenar por columnas Rd-Date y Rd-Time en ascendente */ isfsort = "dater A timer A" /* Accede al panel ST de SDSF. Opcion DELAYED para usar todas las columnas del panel. Opcion ALTERNATE para que funcione isfsort con los campos St-Date (datee) y St-Time (timee) */ Address SDSF "ISFEXEC ST (DELAYED ALTERNATE)" /* Comprobamos si se ha producido algun error en el acceso. */ lrc=rc if lrc<>0 then do call msgrtn exit 20 end /* Guardar el numero maximo de lineas y creamos la cabecera del fichero de salida. x2c(05)->Es la tabulacion en hexadecimal al exportar a Excel */ numrows=isfrows cabecera="JobName "||x2c(05)||"JobID "||x2c(05)||"F Submit "||, x2c(05)||"H Submit "||"F Ini Ejec"||x2c(05)||"H Ini Ejec ", ||x2c(05)||"F Fin Ejec"||x2c(05)||"H Fin Ejec "||x2c(05)||"MAX-RC" /* Guardar la cabecera en una cola para escribirla en fichero */ queue cabecera /* Recorrer los jobs del panel ST*/ do ix=1 to numrows /* Formatear fecha de entrada al spool a dd/mm/yyyy */ fechaS=fechaGre(DATER.ix) /* Formatear fecha inicio de ejecucion a dd/mm/yyyy */ if DATEE.ix <> '' then fechaI=fechaGre(DATEE.ix) else fechaI='00/00/0000' /* Formatear fecha fin de ejecucion a dd/mm/yyyy */ if DATEN.ix <> '' then fechaF=fechaGre(DATEN.ix) else fechaF='00/00/0000' /* Guardar JobName JobID Fecha y Hora de inicio y fin */ datos=JNAME.ix||x2c(05)||JOBID.ix||x2c(05)||fechaS||, x2c(05)||TIMER.ix||x2c(05)||fechaI||x2c(05)||TIMEE.ix||, x2c(05)||fechaF||x2c(05)||TIMEN.ix||x2c(05)||RETCODE.ix /* Guardar los datos en una cola para escribir en fichero */ queue datos end rc=isfcalls('OFF') Address TSO "PROFILE NOPREFIX" /* Comprobar si existe la libreria de salida */ LIBRERIA=SYSDSN(USERID().JOBS.SPOOL) if LIBRERIA <> "OK" then do /* Si no existe, la crea */ "ALLOCATE F(FICH) DA("USERID()".JOBS.SPOOL) NEW TRACKS DSORG(PS) SPACE(2,2) RECFM(F,B) LRECL(120) BLKSIZE(800)" "FREE F(FICH)" end /* Grabar la informacion de la cola en la libreria de salida */ "ALLOCATE F(FICH) DA("USERID()".JOBS.SPOOL) OLD" "EXECIO "queued()" DISKW FICH (FINIS" "FREE F(FICH)" Say "Comprobar salida en libreria "USERID()".JOBS.SPOOL" Exit /* Funcion para formatear la fecha juliana a dd/mm/yyyy */ fechaGre: PARSE ARG fecha /* Formatear de yyyy.ddd a yyddd */ fecha=Translate('34678',fecha,'12345678') /* Pasar fecha juliana a yyyymmdd */ fecha=DATE('S',fecha,'J') /* Formatear fecha yyyymmdd a dd/mm/yyyy */ fecha=Translate('78/56/1234',fecha,'12345678') return fecha /* Subrutina generica para controlar los errores */ 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