//BCHJOB JOB(JBRKACT) JOBD(QBATCH) OUTQ(QPRINT) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da www.neroni.it di Claudio Neroni */ /* SE L'USO DELLA JOB DESCRIPTION "QBATCH" TI E' IMPEDITO, */ /* UTILIZZANE UNA DIVERSA. */ /* From System: "IUBICSVI" */ /* From Library: "UTI" */ /* Unload Time: 2009-02-23 15:50 */ /* To File : "JBRKACT" */ /* To Library : "NERONI2" */ /* To Text : "Break Active Jobs. Src" */ /********* INIZIO ISTRUZIONI *******************************************/ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI RICARICARE I SORGENTI. */ /* 1) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* CREARE UN FILE SORGENTE DI LUNGHEZZA RECORD 112: */ /* CRTSRCPF FILE(NERONI2/STRINGHE) RCDLEN(112) */ /* 2) SPOSTARE IL FILE "JBRKACT.txt" NELL'INDIRIZZARIO */ /* DI UN PC CONNESSO IN RETE CON L'AS400 RICEVENTE */ /* (AD ES.: "c:\"). */ /* 3) DAL VIDEO COMANDI DEL PC CHIAMARE FTP: */ /* ftp nomeas400 */ /* 4) DIGITARE UTENTE E PASSWORD. */ /* 5) ESEGUIRE IL COMANDO DI COPIA DA FILE PC A MEMBRO AS400: */ /* put "c:\JBRKACT.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JBRKACT.mbr" */ /* 6) ABBANDONARE FTP: */ /* quit */ /* 7) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA COPIATA NEL MEMBRO SORGENTE: */ /* SBMDBJOB FILE(NERONI2/STRINGHE) MBR(JBRKACT) JOBQ(QBATCH) */ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI CREARE L'UTILITY. */ /* 8) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA O LE STRINGHE SORGENTE DI TIPO SEU "CL" */ /* (IL CUI NOME TERMINA SEMPRE CON ".") */ /* PRESENTI NEL FILE RICARICATO "NERONI2/JBRKACT" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JBRKACT) MBR(JBRKACT.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI *********************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Utility di Claudio Neroni') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JBRKACT) CRTSRCPF FILE(NERONI2/JBRKACT) RCDLEN(112) + TEXT('Break Active Jobs. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JBRKACT) TOFILE(NERONI2/JBRKACT) + TOMBR(JBRKACT) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JBRKACT) MBR(JBRKACT) + SRCTYPE(CMD) + TEXT('Break Active Jobs. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JBRKACT.) TOFILE(NERONI2/JBRKACT) + TOMBR(JBRKACT.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JBRKACT) MBR(JBRKACT.) + SRCTYPE(CL) + TEXT('Break Active Jobs. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JBRKACTC) TOFILE(NERONI2/JBRKACT) + TOMBR(JBRKACTC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JBRKACT) MBR(JBRKACTC) + SRCTYPE(CLLE) + TEXT('Break Active Jobs. Cpp') /*---------------------------------------------------------------------*/ //DATA FILE(JBRKACT) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Break Active Jobs') PARM KWD(MSG) TYPE(*CHAR) LEN(512) MIN(1) + PROMPT('Message text') PARM KWD(JOB) TYPE(*GENERIC) LEN(10) DFT(*ALL) + SPCVAL((*ALL)) PROMPT('Job name') PARM KWD(USR) TYPE(*GENERIC) LEN(10) DFT(*ALL) + SPCVAL((*ALL)) PROMPT('Job user') PARM KWD(MSGTYPE) TYPE(*CHAR) LEN(5) RSTD(*YES) + DFT(*INFO) VALUES(*INFO *INQ *LIST) + PROMPT('Message type') PARM KWD(RPYMSGQ) TYPE(RPYMSGQ) PROMPT('Message + queue to get reply') RPYMSGQ: QUAL TYPE(*NAME) DFT(QSYSOPR) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + MIN(0) PROMPT('library') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JBRKACT.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JBRKACT.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 00 + *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 12-02-2009 Creato. */ /* JBRKACT */ /* Break Active Jobs. */ /* Prerequisiti: nessuno */ /* Prerequisiti: JRSNMSG, JCPYCLR, JWAJ */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JBRKACT) DLTPGM PGM(NERONI2/JBRKACTC) /* Crea il comando. */ CRTCMD CMD(NERONI2/JBRKACT) PGM(NERONI2/JBRKACTC) SRCFILE(JBRKACT) + PRDLIB(NERONI2) /* Crea il command processing program. */ CRTBNDCL PGM(NERONI2/JBRKACTC) SRCFILE(JBRKACT) DBGVIEW(*ALL) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JBRKACTC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Break Active Jobs. Cpp */ /* Claudio Neroni 12-02-2009 Creato. */ /* */ PGM PARM(&MSG &JOB &USR &MSGTYPE &RPYMSGQQ) /* Riceve il Messaggio. */ DCL VAR(&MSG) TYPE(*CHAR) LEN(512) /* Riceve il Nome job generico. */ DCL VAR(&JOB) TYPE(*CHAR) LEN(10) /* Riceve il Nome utente generico. */ DCL VAR(&USR) TYPE(*CHAR) LEN(10) /* Riceve il Tipo messaggio. */ DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(5) /* Riceve la Coda qualificata a cui rispondere. */ DCL VAR(&RPYMSGQQ) TYPE(*CHAR) LEN(20) /* Coda a cui rispondere e libreria. */ DCL VAR(&RPYMSGQ) TYPE(*CHAR) LEN(10) DCL VAR(&RPYMSGQL) TYPE(*CHAR) LEN(10) /* Messaggio di servizio. */ DCL VAR(&SERV) TYPE(*CHAR) LEN(512) /* File di transito 1. */ DCLF FILE(JWAJ1) /* Estrae parametri. */ CHGVAR VAR(&RPYMSGQ) VALUE(%SST(&RPYMSGQQ 1 10)) CHGVAR VAR(&RPYMSGQL) VALUE(%SST(&RPYMSGQQ 11 10)) /* Cancella i file di transito. */ DLTF FILE(QTEMP/JBRKACTT) MONMSG MSGID(CPF0000) /* Scarica l'elenco dei lavori attivi. */ JWAJ TYPE(I) JOB(&JOB) USR(&USR) + OUTFILE(QTEMP/JBRKACTT) /* Reindirizza la lettura dei lavori attivi sul file temporaneo. */ OVRDBF FILE(JWAJ1) TOFILE(QTEMP/JBRKACTT) /* Inizio lettura. */ READBEG: /* Legge una riga dal file temporaneo. */ RCVF /* Se non ci sono altre righe, salta a fine lettura. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(READEND)) /* Se il lavoro è disconnesso, di gruppo o in richiesta sistema, */ /* ricicla. */ IF COND(&WAJAJS *EQ DSC *OR &WAJAJS *EQ GRP *OR + &WAJAJS *EQ SRQ) THEN(GOTO CMDLBL(READBEG)) /* Compone il messaggio di servizio. */ CHGVAR VAR(&SERV) VALUE('L''utente ' *CAT &WAJUSR + *CAT ' attivo nel lavoro ' *CAT &WAJNAM + *CAT ' riceve break') /* Spedisce il messaggio di servizio. */ SNDPGMMSG MSG(&SERV) /* Spedisce il messaggio di interruzione. */ IF COND(&MSGTYPE *EQ *INQ) THEN(DO) SNDBRKMSG MSG(&MSG) TOMSGQ(&WAJNAM) MSGTYPE(*INQ) + RPYMSGQ(&RPYMSGQL/&RPYMSGQ) MONMSG MSGID(CPF0000 MCH0000) ENDDO IF COND(&MSGTYPE *EQ *INFO) THEN(DO) SNDBRKMSG MSG(&MSG) TOMSGQ(&WAJNAM) MSGTYPE(*INFO) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ricicla. */ GOTO CMDLBL(READBEG) /* Fine lettura. */ READEND: /* Fine. */ ENDPGM: ENDPGM //ENDSRC //ENDBCHJOB