/* REXX */ /* ESCRITO POR: JFG */ /* FECHA: 13/10/2017 */ /* DESCRIPCION: */ /* PANEL PARA FILTRAR LOS PROCESOS */ /* DEL SPOOL SEGUN LOS CRITERIOS */ /* ELEGIDOS. */ /* EL RESULTADO SE MUESTRA EN UNA */ /* TABLA Y SE GUARDA EN UN DATASET */ /* */ ADDRESS TSO "PROFILE NOPREFIX" /* COMPROBAR SI EXISTE LA LIBRERIA DE USUARIO PARA LOS PANELES */ LIBRERIA=SYSDSN(USERID().PANELES) /* SI EXISTE, SE CONCATENA A LAS LIBRERIAS ISPPLIB */ IF LIBRERIA = "OK" THEN ISPEXEC "LIBDEF ISPPLIB DATASET ID("USERID()".PANELES)" DO FOREVER /* CREAR TABLA TEMPORAL (NOWRITE) PARA EL RESULTADO */ ADDRESS ISPEXEC "TBCREATE JOBTABLE KEYS(ZCODIGO)", "NAMES(JOBNM,JOBID,FECINI,HORAINI,FECFIN,HORAFIN) NOWRITE" /* MOSTRAR PANEL PRINCIPAL */ ADDRESS ISPEXEC "DISPLAY PANEL(SPLPPRIN) CURSOR(ZCMD)" IF RC <> 0 THEN EXIT RC=ISFCALLS('ON') /* INICIALIZAR VARIABLES */ JOBNM='*' TIPO='*' ESTADO='*' DESFEC='01/01/1970' DESHOR='00:00:00.00' /* FECHA DIA SIGUIENTE EN FORMATO MM/DD/YYYY */ HASFEC=DATE('S',DATE('BASE')+1,'BASE') HASFEC=TRANSLATE('45/67/0123',HASFEC,'01234567') HASHOR='23:59:59.00' /* ASIGNAR LOS VALORES DEL PANEL A LAS VARIABLES */ IF ZJOBNM<>'' THEN JOBNM=ZJOBNM IF ZTIPRAD=1 THEN TIPO="JOB" IF ZTIPRAD=2 THEN TIPO="STC" IF ZESTRAD=1 THEN ESTADO="PRINT" IF ZESTRAD=2 THEN ESTADO="EXECUTION" /* FECHA FORMATO YYYY/MM/DD A MM/DD/YYYY */ IF ZDESFEC<>'' THEN DESFEC=TRANSLATE('56/89/0123',ZDESFEC,'0123456789') IF ZDESHOR<>'' THEN DESHOR=ZDESHOR /* FECHA FORMATO YYYY/MM/DD A MM/DD/YYYY */ IF ZHASFEC<>'' THEN HASFEC=TRANSLATE('56/89/0123',ZHASFEC,'0123456789') IF ZHASHOR<>'' THEN HASHOR=ZHASHOR /* DEFINIR FILTRO DE BUSQUEDA */ ISFFILTER = "JNAME EQ "JOBNM" JTYPE EQ "TIPO" QUEUE EQ "ESTADO ISFFILTER = ISFFILTER" DATEE GE "DESFEC" TIMEE GE 00:00:00" ISFFILTER = ISFFILTER" DATEE LE "HASFEC /* DEFINIR RELACION ENTRE LOS FILTROS */ ISFFILTERMODE = "AND" /* ORDENAR POR FECHA Y HORA DE INICIO DE FORMA ASCENDENTE */ ISFSORT = "DATEE A TIMEE A" /* ACCEDER AL PANEL ST PARA SACAR LOS DATOS */ ADDRESS SDSF "ISFEXEC ST (DELAYED ALTERNATE)" NUMROWS=ISFROWS /* ESCRIBIR CABECERA DEL FICHERO PARA EL RESULTADO */ CABECERA="JOBNAME "||X2C(05)||"JOBID "||X2C(05)||"F INICIO "||, X2C(05)||"H INICIO "||X2C(05)||"F FIN "||X2C(05)||"H FIN" QUEUE CABECERA /* FECHA FORMATO MM/DD/YYYY A MM/DD/YY */ DESFEC=TRANSLATE('01/34/89',DESFEC,'0123456789') /* FECHA FORMATO MM/DD/YY A BASE */ DESFECB=DATE('BASE',DESFEC,'U') /* FECHA FORMATO MM/DD/YYYY A MM/DD/YY */ HASFEC=TRANSLATE('01/34/89',HASFEC,'0123456789') /* FECHA FORMATO MM/DD/YY A BASE */ HASFECB=DATE('BASE',HASFEC,'U') /* RECORER RESULTADOS */ DO IX=1 TO NUMROWS /* FLAG RESULTADO VALIDO */ ESCRIBIR=0 FECHAI=DATEE.IX FECHAF=DATEN.IX /* SI FECHA INICIO VACIO, PONEMOS 01/01/1970 */ IF FECHAI='' THEN FECHAI='1970.001' /* FECHA FORMATO YYYY.DDD A DD/MM/YY */ FECHAI=FECHAGRE(FECHAI) /* SI FECHA FIN VACIO, PONEMOS 01/01/1970 */ IF FECHAF='' THEN FECHAF='1970.001' /* FECHA FORMATO YYYY.DDD A DD/MM/YY */ FECHAF=FECHAGRE(FECHAF) /* FECHA INICIO FORMATO DD/MM/YY A BASE */ FECHAIB=DATE('BASE',FECHAI,'E') /* PASAR HORAS A SEGUNDOS */ SEGINI=HORASEC(TIMEE.IX) SEGDES=HORASEC(DESHOR) SEGHAS=HORASEC(HASHOR) /* SI FECHAS INICIO, DESDE Y HASTA SON IGUALES */ IF (FECHAIB=DESFECB & DESFECB=HASFECB) THEN DO /* SI LOS SEGUNDOS DE INICIO > SEG. DESDE Y < SEG. HASTA */ IF (SEGINI >= SEGDES & SEGINI <= SEGHAS) THEN /* ESCRIBIR PORQUE ESTA DENTRO DEL EL RANGO */ ESCRIBIR=1 END /* SI FECHAS INICIO, DESDE Y HASTA NO SON IGUALES */ ELSE DO /* SI FECHA INICIO = DESDE Y HORA INICIO >= HORA DESDE */ IF (FECHAIB = DESFECB & SEGINI >= SEGDES) THEN /* ESCRIBIR PORQUE ESTA DENTRO DEL EL RANGO */ ESCRIBIR=1 /* SI FECHA INICIO > DESDE Y FECHA INICIO > HASTA */ IF (FECHAIB>DESFECB & FECHAIB "OK" THEN DO "ALLOCATE F(FICH) DA("USERID()".STATS.SPOOL) NEW CYL DSORG(PS) SPACE(2,2) RECFM(F,B) LRECL(80) BLKSIZE(800)" "FREE F(FICH)" END "ALLOCATE F(FICH) DA("USERID()".STATS.SPOOL) OLD" /* ESCRIBIMOS LA COLA QUE CONTIENE EL RESULTADO */ "EXECIO "QUEUED()" DISKW FICH (FINIS" /* LIBERAMOS EL DATASET */ "FREE F(FICH)" /* NOS POSICIONAMOS AL PRINCIPIO DE LA TABLA */ ADDRESS ISPEXEC "TBTOP JOBTABLE" DO FOREVER /* MOSTRAR EL PANEL CON LA TABLA QUE CREAMOS */ ADDRESS ISPEXEC "TBDISPL JOBTABLE PANEL(SPLPTABL)" IF RC <> 0 THEN DO /* SI SALIMOS DEL PANEL, CERRAMOS LA TABLA */ ADDRESS ISPEXEC "TBCLOSE JOBTABLE" LEAVE END END END /* */ /* FUNCION PARA FORMATEAR LA FECHA JULIANA A DD/MM/YY */ /* */ 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/YY */ FECHA=TRANSLATE('78/56/34',FECHA,'12345678') RETURN FECHA /* */ /* FUNCION PARA PASAR DE HORAS, MIN Y SEG A SEGUNDOS */ /* */ HORASEC: PARSE ARG HORA /* PASAMOS LAS HORAS A SEGUNDOS */ HORAS=3600*TRANSLATE('01',HORA,'01234567') /* PASAMOS LOS MINUTOS A SEGUNDOS */ MINUTO=60*TRANSLATE('34',HORA,'01234567') /* SUMAMOS TODO PARA OBTENER LOS SEGUNDOS */ SEGUNDOS=HORAS+MINUTO+TRANSLATE('67',HORA,'01234567') RETURN SEGUNDOS /* */ /* 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