//BCHJOB JOB(JLAST) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da www.neroni.it */ /* LA JOB DESCRIPTION "NERONI2/NERONI2" DEVE PREESISTERE. PUO' ESSERE */ /* IDENTICA A QBATCH E PUO' ESSERE SOSTITUITA DA QBATCH O SIMILE. */ /* From System: "S65D69DA" */ /* From Library: "NERONI2" */ /* Unload Time: 2015-03-19 17:29 */ /* To File : "JLAST" */ /* To Library : "NERONI2" */ /* To Text : "Retrieve last spool number. 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 "JLAST.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:\JLAST.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JLAST.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(JLAST) 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/JLAST" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JLAST) MBR(JLAST.) 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/JLAST) CRTSRCPF FILE(NERONI2/JLAST) RCDLEN(112) + TEXT('Retrieve last spool number. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLAST) TOFILE(NERONI2/JLAST) + TOMBR(JLAST) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLAST) MBR(JLAST) + SRCTYPE(CMD) + TEXT('Retrieve last spool number. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLAST.) TOFILE(NERONI2/JLAST) + TOMBR(JLAST.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLAST) MBR(JLAST.) + SRCTYPE(CL) + TEXT('Retrieve last spool number. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLASTC) TOFILE(NERONI2/JLAST) + TOMBR(JLASTC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLAST) MBR(JLASTC) + SRCTYPE(CLLE) + TEXT('Retrieve last spool number. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLASTI) TOFILE(NERONI2/JLAST) + TOMBR(JLASTI) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLAST) MBR(JLASTI) + SRCTYPE(CMD) + TEXT('Retrieve last spool number. CmdInter') /*---------------------------------------------------------------------*/ //DATA FILE(JLAST) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* 31-03-2014 Claudio Neroni. Creato. */ /* Trasforma *LAST in spool file number effettivo. */ /*----------------------------------------------------------------------------*/ CMD PROMPT('Retrieve last spool number') PARM KWD(FILE) TYPE(*NAME) MIN(1) PROMPT('Spool + file name') PARM KWD(JOB) TYPE(JOB) DFT(*CURRENT) + SNGVAL((*CURRENT)) PROMPT('Job name') JOB: QUAL TYPE(*NAME) LEN(10) QUAL TYPE(*NAME) LEN(10) PROMPT('Job user') QUAL TYPE(*CHAR) LEN(6) PROMPT('Job number') PARM KWD(SPLNBR) TYPE(*CHAR) LEN(6) RTNVAL(*YES) + PROMPT('Spool number Var 6') PARM KWD(ERRTXT) TYPE(*CHAR) LEN(100) + RTNVAL(*YES) PROMPT('Error text Var 100') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JLAST.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JLAST.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 31-03-2014 Creato. */ /* JLAST */ /* Retrieve last spool number. CrtJs */ /* Prerequisiti: nessuno */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTPGM PGM(NERONI2/JLASTC) DLTCMD CMD(NERONI2/JLAST) DLTCMD CMD(NERONI2/JLASTI) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JLASTC) SRCFILE(JLAST) DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JLAST) PGM(JLASTC) SRCFILE(JLAST) ALLOW(*IPGM + *BPGM) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JLASTI) PGM(JLASTC) SRCFILE(JLAST) + ALLOW(*ALL) PRDLIB(NERONI2) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JLASTC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* 31-03-2014 Claudio Neroni. Creato. */ /* Trasforma *LAST in spool file number effettivo. */ /*----------------------------------------------------------------------------*/ PGM PARM(&SPLNAM &JOB &SPLNBRA &ERROR) /* Riceve Spool name. */ DCL VAR(&SPLNAM) TYPE(*CHAR) LEN(10) /* Riceve Job. */ DCL VAR(&JOB) TYPE(*CHAR) LEN(26) /* Riceve il Modo richiesto. */ /* Ritorna Spool number. */ DCL VAR(&SPLNBRA) TYPE(*CHAR) LEN(6) /* Ritorna Error text. */ DCL VAR(&ERROR) TYPE(*CHAR) LEN(100) /* Job name. */ DCL VAR(&JOBNAM) TYPE(*CHAR) LEN(10) /* Job user. */ DCL VAR(&JOBUSR) TYPE(*CHAR) LEN(10) /* Job number. */ DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) /* Message data. */ DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(2024) /* Porzione dei dati messaggio da trasformare in spool number. */ DCL VAR(&SPLNBRC) TYPE(*CHAR) LEN(4) /* Spool number. */ DCL VAR(&SPLNBRN) TYPE(*CHAR) LEN(6) /* Modo richiesto. */ DCL VAR(&MODE) TYPE(*CHAR) LEN(4) /* Intercetta tutti gli errori salvo quello dal quale ricavare i dati. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Trascrive il job nei suoi componenti. */ CHGVAR VAR(&JOBNAM) VALUE(%SST(&JOB 1 10)) CHGVAR VAR(&JOBUSR) VALUE(%SST(&JOB 11 10)) CHGVAR VAR(&JOBNBR) VALUE(%SST(&JOB 21 6)) /* Salva il modo richiesto. */ CHGVAR VAR(&MODE) VALUE(&SPLNBRA) /* Pulisce i parametri di ritorno. */ CHGVAR VAR(&SPLNBRA) VALUE(' ') CHGVAR VAR(&ERROR) VALUE(' ') /* Se richiesto job name *CURRENT, recupera e usa il lavoro corrente. */ IF COND(&JOBNAM *EQ *CURRENT) THEN(DO) RTVJOBA JOB(&JOBNAM) USER(&JOBUSR) NBR(&JOBNBR) ENDDO /* Finge la modifica dello spool file solo per ottemere i dati del messaggio. */ CHGSPLFA FILE(&SPLNAM) JOB(&JOBNBR/&JOBUSR/&JOBNAM) + SPLNBR(*LAST) OUTQ(MANCA/MANCA) /* Se si verifica l'errore desiderato. */ MONMSG MSGID(CPF3335) EXEC(DO) /* Riceve i dati dell'errore e ne ricava lo spool number. */ RCVMSG MSGTYPE(*LAST) RMV(*NO) MSGDTA(&MSGDTA) CHGVAR VAR(&SPLNBRC) VALUE(%SST(&MSGDTA 59 4)) CHGVAR VAR(&SPLNBRN) VALUE(%BIN(&SPLNBRC)) CHGVAR VAR(&SPLNBRA) VALUE(&SPLNBRN) /* Se si verifica l'errore desiderato. */ ENDDO /* Abbandona. */ GOTO CMDLBL(FINE) /* Per qualunque altro errore. */ ERRORE: /* Ritorna un testo di errore. */ CHGVAR VAR(&ERROR) VALUE('Error on spool file' + *BCAT &SPLNAM *BCAT 'nbr *LAST' *BCAT + 'job' *BCAT &JOBNBR *TCAT '/' *CAT + &JOBUSR *TCAT '/' *CAT &JOBNAM) /* Abbandona. */ GOTO CMDLBL(FINE) /* Fine. */ FINE: /* Se richiesto, manda un messaggio. */ IF COND(&MODE *EQ *MSG) THEN(DO) SNDPGMMSG MSG(&SPLNBRA *BCAT &ERROR) ENDDO ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JLASTI) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* 31-03-2014 Claudio Neroni. Creato. */ /* Trasforma *LAST in spool file number effettivo. */ /*----------------------------------------------------------------------------*/ CMD PROMPT('Retrieve last spool number') PARM KWD(FILE) TYPE(*NAME) MIN(1) PROMPT('Spool + file name') PARM KWD(JOB) TYPE(JOB) DFT(*CURRENT) + SNGVAL((*CURRENT)) PROMPT('Job name') JOB: QUAL TYPE(*NAME) LEN(10) QUAL TYPE(*NAME) LEN(10) PROMPT('Job user') QUAL TYPE(*CHAR) LEN(6) PROMPT('Job number') PARM KWD(SPLNBR) TYPE(*CHAR) LEN(6) CONSTANT(*MSG) PARM KWD(ERRTXT) TYPE(*CHAR) LEN(100) CONSTANT(*MSG) //ENDSRC //ENDBCHJOB