| Categoria : Administración
Autor : Leonardo Villalobos
Título : Recuperar entradas del Scheduler del
OS/400
Descripción del truco:
Este programa CLP, utiliza la API Qwclscde , para recuperar
las "entradas" del Planificador de Trabajos del OS/400.
Entre otras cosas, envia un mensaje, si no existen entradas.
Código
en formato texto
Fecha 09-01-2004
/* =================================================================== */
/* Nombre Del Programa: QWCLSCDE */
/* Tipo De Programa: */
/* Nombre Del Autor..: LEONARDO VILLALOBOS */
/* E-mail: */
/* Fecha De Creacion..: */
/* */
/* Proposito............: Recupera Entradas del Scheduler */
/* Para AS/400 */
/* */
/* Sumario Del Programa */
/* ------------------------------------------------------------------*/
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* Revision Del Sumario */
/* ------------------------------------------------------------------*/
/* */
/* */
/* */
/* */
/* ====================================================================*/
PGM
/* Variables para Manejo de Errores */
DCL &msgid *CHAR 7
DCL &msgf *CHAR 10
DCL &msgflib *CHAR 10
DCL &msgdta *CHAR 100
/* Variables de Trabajo */
DCL &BytesAv *DEC 5
DCL &Handle *CHAR 16
DCL &Err *CHAR 24
DCL &Err1 *CHAR 24
DCL &Usrspc *CHAR 20 +
Value('SCHE QTEMP ')
DCL &GenHd *CHAR 140
DCL &Offsetb *CHAR 4
DCL &StrPosb *CHAR 4
DCL &Hdroffb *CHAR 4
DCL &Hdrlenb *CHAR 4
DCL &Hdrinfo *CHAR 26
DCL &Lststs *CHAR 1
DCL &Infosts *CHAR 1
DCL &Jobnam *CHAR 10
DCL &Usrnm *CHAR 10
DCL &Entry *CHAR 6
DCL &Loop *DEC 8
DCL &Elenb *CHAR 4
DCL &Ljobe *CHAR 1156
/* =================================================================== */
/* Ejecuta Rutina de Manejo de Error */
/* =================================================================== */
MONMSG Cpf0000 EXEC(GOTO Error)
/* =================================================================== */
/* Elimina El Espacio de Usuario, Si existe */
/* =================================================================== */
CALL Qusdltus Parm(&Usrspc &Err1)
MONMSG Cpf0000
/* =================================================================== */
/* Crea El Espacio de Usuario */
/* =================================================================== */
CALL Quscrtus Parm(&Usrspc 'Listscde' +
X'00000100' ' ' '*ALL ' 'Sched. Job +
List Temp User Space ')
/* =================================================================== */
/* Ejecuta la Api para Las Entradas del Planificador de Trabajos */
/* =================================================================== */
Partlist:
CALL Qwclscde PARM(&Usrspc 'SCDL0200' +
'*ALL ' &handle &Err)
/* =================================================================== */
/* Valida si existe un Error en la Ejecuci¢n de la API */
/* =================================================================== */
CHGVAR &BytesAv (%Bin(&Err 5 4))
IF (&BytesAv > 0) DO
CHGVAR &Msgid (%Sst(&Err 9 7))
CHGVAR &Msgdta (%Sst(&Err 17 8))
SNDPGMMSG MSGID(&msgid) +
MSGF(Qsys/Qcpfmsg) +
MSGDTA(&msgdta) +
MSGTYPE(*Escape) +
TOPGMQ(*PRV)
RETURN
ENDDO
/* =================================================================== */
/* Ejecuta la Api para Recuperar las Entradas */
/* =================================================================== */
CALL Qusrtvus PARM(&Usrspc X'00000001' +
X'0000008C' &Genhd)
/* =================================================================== */
/* Recupera Informaci¢n de "Status" */
/* =================================================================== */
CHGVAR (&Lststs) (%Sst(&Genhd 104 1))
IF (&Lststs = 'I') (DO)
SNDPGMMSG MSGID(CPF9897) +
MSGF(QSYS/QCPFMSG) +
MSGDTA('Lista Incompleta en el "User Space",' +
|>'Visualice las Anotaciones......' +
) +
TOPGMQ(*PRV) +
MSGTYPE(*ESCAPE)
GOTO Alldone
ENDDO
/* =================================================================== */
/* Recupera # de Ent. desde "Header" */
/* =================================================================== */
CHGVAR &Loop (%Bin(&Genhd 133 4))
/* =================================================================== */
/* Comprueba Si existen Entradas en el Scheduler */
/* =================================================================== */
IF (&Loop = 0) (DO)
SNDPGMMSG MSGID(CPF9897) +
MSGF(QSYS/QCPFMSG) +
MSGDTA('No Existen Entradas el "Scheduler"') +
TOPGMQ(*PRV) +
MSGTYPE(*ESCAPE)
CALL Qusdltus Parm(&Usrspc &Err1)
MONMSG Cpf0000
ENDDO
/* =================================================================== */
/* Recupera Longitud de la Entrada y el "Offset", Estos Valores se */
/* utilizan para configurar la Posici¢n Inicial */
/* =================================================================== */
CHGVAR &Elenb (%Sst(&Genhd 137 4))
CHGVAR &Offsetb (%Sst(&Genhd 125 4))
CHGVAR (%Bin(&StrPosb)) (%Bin(&Offsetb) + 1)
/* =================================================================== */
/* Recuperan "Entradas" del "Scheduler", si Existen */
/* =================================================================== */
Startloop:
IF (&Loop = 0) (GOTO PARTCHK)
CALL Qusrtvus (&Usrspc &StrPosb &Elenb &Ljobe)
CHGVAR (&Infosts) (%Sst(&Ljobe 1 1))
CHGVAR (&jobnam) (%Sst(&Ljobe 2 10))
CHGVAR (&Entry) (%Sst(&Ljobe 12 10))
CHGVAR (&Usrnm) (%Sst(&Ljobe 547 10))
IF (&Infosts *EQ ' ') (DO)
CHGVAR (%Bin(&Strposb)) (%Bin(&Strposb) + %Bin(&Elenb))
CHGVAR &Loop (&Loop -1)
GOTO Startloop
ENDDO
RETURN
/* =================================================================== */
/* No Existen Entradas en el "Scheduler OS/400" */
/* =================================================================== */
Partchk:
IF (&Lststs = 'C') (DO)
GOTO Alldone
ENDDO
CHGVAR &Hdroffb (%Sst(&Genhd 121 4))
CHGVAR &Hdrlenb (%Sst(&Genhd 117 4))
CALL Qusrtvus (&Usrspc &Hdroffb &Hdrlenb &Hdrinfo)
CHGVAR &Handle (%Sst(&Hdrinfo 11 16))
GOTO Partlist
/* =================================================================== */
/* Rutina de Error */
/* =================================================================== */
Error:
RCVMSG MSGTYPE(*Last) +
MSGDTA(&msgdta) +
MSGID(&msgid) +
MSGF(&msgf) +
SNDMSGFLIB(&msgflib)
/* =================================================================== */
/* Evita un Ciclo */
/* =================================================================== */
MONMSG CPF0000
SNDPGMMSG MSGID(&msgid) +
MSGF(&msgflib/&msgf) +
MSGDTA(&msgdta) +
MSGTYPE(*Escape)
/* =================================================================== */
/* Evita un Ciclo */
/* =================================================================== */
MONMSG CPF0000
/* ====================================================================*/
/* Elimina El Espacio de Usuario Temporal que fue Creado */
/* ====================================================================*/
Alldone:
CALL Qusdltus PARM(&usrspc &Err)
MONMSG Cpf0000
ENDPGM
¿Tienes algún truco que quieras compartir con todos los
profesionales de Recursos iSeries AS400?.
Envianoslo y si resulta seleccionado te enviaremos
un vale de Amazon por valor de 50$
|