//BCHJOB JOB(JLLCMP) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) /* Open source from 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: "DEV720" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-05-31 17:12 */ /* To File : "JLLCMP" */ /* To Library : "NERONI2" */ /* To Text : "Compare libl from jobd. 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 "JLLCMP.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:\JLLCMP.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JLLCMP.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(JLLCMP) 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/JLLCMP" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JLLCMP) MBR(JLLCMP.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI ****************************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Claudio Neroni Utility') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JLLCMP) CRTSRCPF FILE(NERONI2/JLLCMP) RCDLEN(112) + TEXT('Compare libl from jobd. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLLCMP) TOFILE(NERONI2/JLLCMP) + TOMBR(JLLCMP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLLCMP) MBR(JLLCMP) + SRCTYPE(CMD) + TEXT('Compare libl from jobd. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLLCMP.) TOFILE(NERONI2/JLLCMP) + TOMBR(JLLCMP.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLLCMP) MBR(JLLCMP.) + SRCTYPE(CL) + TEXT('Compare libl from jobd. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLLCMPC) TOFILE(NERONI2/JLLCMP) + TOMBR(JLLCMPC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLLCMP) MBR(JLLCMPC) + SRCTYPE(CLLE) + TEXT('Compare libl from jobd. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLLCMPP) TOFILE(NERONI2/JLLCMP) + TOMBR(JLLCMPP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLLCMP) MBR(JLLCMPP) + SRCTYPE(PNLGRP) + TEXT('Compare libl from jobd. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLLCMPW) TOFILE(NERONI2/JLLCMP) + TOMBR(JLLCMPW) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLLCMP) MBR(JLLCMPW) + SRCTYPE(RPGLE) + TEXT('Compare libl from jobd. WrtOutfile') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JLLCMP1) TOFILE(NERONI2/JLLCMP) + TOMBR(JLLCMP1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JLLCMP) MBR(JLLCMP1) + SRCTYPE(PF) + TEXT('Compare libl from jobd. Outfile') /*----------------------------------------------------------------------------*/ //DATA FILE(JLLCMP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 15-01-2016 Creato. */ /* Compare libl from jobd. Cmd */ /* Compara liste librerie da descrizione lavori. Cmd */ CMD PROMPT('Compare library list from jobd') PARM KWD(JOBDFIRST) TYPE(JOBDFIRST) MIN(1) MAX(1) + PROMPT('First job description') JOBDFIRST: QUAL TYPE(*NAME) LEN(10) MIN(1) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL) + (*CURLIB)) PROMPT('library') PARM KWD(JOBDOTHER) TYPE(JOBDOTHER) MIN(1) MAX(9) + PROMPT('Other job descriptions') JOBDOTHER: QUAL TYPE(*NAME) LEN(10) MIN(1) QUAL TYPE(*NAME) DFT(*FIRSTLIB) + SPCVAL((*FIRSTLIB) (*LIBL) (*CURLIB)) + PROMPT('library') PARM KWD(OUTFILE) TYPE(OUTFILE) PROMPT('Output + file') OUTFILE: QUAL TYPE(*NAME) DFT(JLLCMP1T) QUAL TYPE(*NAME) DFT(QTEMP) PROMPT('library') PARM KWD(REFPGM) TYPE(*NAME) LEN(10) DFT(*CPP) + SPCVAL((*CPP)) PROMPT('Reference program + for messages') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JLLCMP.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JLLCMP.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 15-01-2016 Creato. */ /* JLLCMP */ /* Compare libl from jobd. */ /* Compara liste librerie da descrizione lavori. */ /* Prerequisiti: JLIBL JRSNMSG JRQT JTOCSV */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JLLCMP) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JLLCMPP) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ DLTF FILE(NERONI2/JLLCMP1) /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JLLCMP) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JLLCMPC) DLTPGM PGM(NERONI2/JLLCMPW) /* Crea i file fisici. */ CRTPF FILE(NERONI2/JLLCMP1) SRCFILE(JLLCMP) SIZE(*NOMAX) /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JLLCMP) PGM(JLLCMPC) SRCFILE(JLLCMP) + ALLOW(*ALL) MSGF(JLLCMP) HLPPNLGRP(JLLCMPP) + HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JLLCMP) TGTCMD(NERONI2/JLLCMP) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ /* JLLCMP */ CRTBNDCL PGM(NERONI2/JLLCMPC) SRCFILE(JLLCMP) LOG(*NO) + TGTRLS(*CURRENT) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JLLCMPW) SRCFILE(JLLCMP) DBGVIEW(*ALL) + TGTRLS(*CURRENT) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JLLCMP) TEXT('Compare libl from jobd. Msgf') /* Fotografia comandi (xxxA001). */ /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ /* Messaggi nei pgm del Cmd 1 (xxx0101). */ ADDMSGD MSGID(JLC0101) MSGF(NERONI2/JLLCMP) MSG('->Per il file di + emissione e'' vietato il nome del prototipo &1') + SECLVL('Per evitare cancellazioni indebite, per il + file di emissione non e'' permesso usare il nome "&1" + che corrisponde a quello del prototipo.') FMT((*CHAR 10)) ADDMSGD MSGID(JLC0102) MSGF(NERONI2/JLLCMP) MSG('->Non esiste la + libreria di emissione &1') SECLVL('Non esiste la libreria + "&1" che dovrebbe contenere il file di emissione del + comando JLLCMP.') FMT((*CHAR 10)) ADDMSGD MSGID(JLC0103) MSGF(NERONI2/JLLCMP) MSG('->Il file di + emissione &2/&1 ha tracciato imprevisto') SECLVL('Il + preesistente file "&2" nella libreria "&1" che dovra'' + contenere le liste librerie non ha il tracciato uguale + a quello previsto nel prototipo "&3".') FMT((*CHAR 10) + (*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JLC0104) MSGF(NERONI2/JLLCMP) MSG('->Descrizione + lavoro &2 non esiste in libreria &1') SECLVL('La + descrizione lavoro "&2" non esiste nella libreria + "&1".') FMT((*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JLC0105) MSGF(NERONI2/JLLCMP) MSG('->Jobd &2/&1 + Libl in bianco e percio'' errata') SECLVL('Dalla + descrizione lavoro "&1" nella libreria "&2" e'' stata + prelevata una lista librerie del tutto in bianco. + Probabile errore dell''API (Programma di interfaccia + del sistema) preposta alla funzione.') FMT((*CHAR 10) + (*CHAR 10)) /* Messaggi nei pgm del Cmd 2 (xxx0201). */ /* Messaggi dei Cmd (xxx1001). */ /* Messaggi del Vcp. */ /* Messaggi della Lista. */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JLLCMPP) SRCFILE(JLLCMP) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JLLCMPC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 15-01-2016 Creato. */ /* Compare libl from jobd. Cpp */ /* Compara liste librerie da descrizione lavori. Cpp */ /* Scarica in un file da portare in excel in separata sede. */ /* Il file ha 10 colonne e contiene in ogni colonna */ /* la lista librerie presente sulla job description */ /* corrispondente. */ /* Per scaricare si puo' usare: */ /* JTOCSV FROMFILE(LIBRERIA/FILE) */ /* */ PGM PARM(&JOBD1 &JOBD9 &OUTF &REFPGM) /* Riceve Prima Job description qualificata. */ DCL VAR(&JOBD1) TYPE(*CHAR) LEN(20) /* Prima Job description. Nome. */ DCL VAR(&JOBD1N) TYPE(*CHAR) LEN(10) /* Prima Job description. Libreria. */ DCL VAR(&JOBD1L) TYPE(*CHAR) LEN(10) /* Riceve fino a 9 Job description qualificate. */ DCL VAR(&JOBD9) TYPE(*CHAR) LEN(182) /* Numero Job description ricevute. */ DCL VAR(&JOBD9§) TYPE(*INT) /* Altra Job description. Nome. */ DCL VAR(&JOBD9N) TYPE(*CHAR) LEN(10) /* Indice do. */ DCL VAR(&XX) TYPE(*INT) /* Displacement del nome. */ DCL VAR(&DD) TYPE(*INT) /* Displacement della libreria. */ DCL VAR(&DDL) TYPE(*INT) /* Altra Job description. Libreria. */ DCL VAR(&JOBD9L) TYPE(*CHAR) LEN(10) /* Job description qualificata ricomposta. */ DCL VAR(&JOBD9R) TYPE(*CHAR) LEN(20) /* Riceve File di emissione qualificato. */ DCL VAR(&OUTF) TYPE(*CHAR) LEN(20) /* File di emissione. Nome. */ DCL VAR(&OUTFN) TYPE(*CHAR) LEN(10) /* File di emissione. Libreria. */ DCL VAR(&OUTFL) TYPE(*CHAR) LEN(10) /* Riceve Programma di riferimento per i messaggi. */ DCL VAR(&REFPGM) TYPE(*CHAR) LEN(10) /* Definisce i file prototipi e i relativi level check. */ DCL VAR(&PROTO1) TYPE(*CHAR) LEN(10) + VALUE(JLLCMP1) DCL VAR(&LVLCHKP1) TYPE(*CHAR) LEN(13) /* Definisce i level check dei file di input. */ DCL VAR(&LVLCHKI1) TYPE(*CHAR) LEN(13) /* Lista librerie recuperata dalla job description. */ DCL VAR(&LIBL) TYPE(*CHAR) LEN(2750) /* Libreria ove risiede la job description recuperata dalla jobd. */ DCL VAR(&LIBX) TYPE(*CHAR) LEN(10) /* Error id. */ DCL VAR(&EI) TYPE(*CHAR) LEN(7) /* Numero di colonna assegnato alla job description. */ DCL VAR(&COL) TYPE(*DEC) LEN(3) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&JOBD1N) VALUE(%SST(&JOBD1 1 10)) CHGVAR VAR(&JOBD1L) VALUE(%SST(&JOBD1 11 10)) CHGVAR VAR(&OUTFN) VALUE(%SST(&OUTF 1 10)) CHGVAR VAR(&OUTFL) VALUE(%SST(&OUTF 11 10)) /* Interpreta il numero di Job description ricevute. */ CHGVAR VAR(&JOBD9§) VALUE(%BIN(&JOBD9 1 2)) /* Se richiesto *CPP (Command Processing Program) come programma */ /* di riferimento dei messaggi, assume il nome del programma corrente. */ IF COND(&REFPGM *EQ *CPP) THEN(DO) JCALLER CALLER(&REFPGM) KINSHIP(*FATHER) ENDDO /* Esegue i controlli su Output file. */ DOUNTIL COND('1') /* Se il nome dell'Output file e' uguale a quello del prototipo, */ /* diagnostica e salta a rilascio. */ IF COND(&OUTFN *EQ &PROTO1) THEN(DO) SNDPGMMSG MSGID(JLC0101) MSGF(JLLCMP) MSGDTA(&PROTO1) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Se Output library non esiste, */ /* diagnostica e salta a rilascio. */ RTVLIBD LIB(&OUTFL) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JLC0102) MSGF(JLLCMP) MSGDTA(&OUTFL) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Se Output file non esiste, salta a fine controllo outfile. */ CHKOBJ OBJ(&OUTFL/&OUTFN) OBJTYPE(*FILE) MONMSG MSGID(CPF0000 MCH0000) EXEC(LEAVE) /* Recupera il level check dell'Output file e del prototipo. */ JRTVFD FILE(&OUTFN) LIB(&OUTFL) LVLCHK(&LVLCHKI1) JRTVFD FILE(&PROTO1) LVLCHK(&LVLCHKP1) /* Se l'Output file non ha lo stesso level check del prototipo, */ /* diagnostica e salta a rilascio. */ IF COND(&LVLCHKI1 *NE &LVLCHKP1) THEN(DO) SNDPGMMSG MSGID(JLC0103) MSGF(JLLCMP) MSGDTA(&OUTFL + *CAT &OUTFN *CAT &PROTO1) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Esegue i controlli su Output file. */ ENDDO /* Crea outfile. */ JCPYCLR FROMFILE(&PROTO1) TOFILE(&OUTFL/&OUTFN) /* Controlla l'esistenza della job description. */ CHKOBJ OBJ(&JOBD1L/&JOBD1N) OBJTYPE(*JOBD) /* Se la job description non esiste, */ /* diagnostica e salta a rilascio. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JLC0104) MSGF(JLLCMP) MSGDTA(&JOBD1L + *CAT &JOBD1N) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Chiama il recupero della lista librerie dalla job description. */ /* Interfaccia verso API presente in tool JLIBL. */ CALL PGM(JLIBLD) PARM(&JOBD1 &LIBL &LIBX &EI) /* Se la lista librerie e' in bianco, messaggia e rilascia. */ IF COND(&LIBL *EQ ' ') THEN(DO) SNDPGMMSG MSGID(JLC0105) MSGF(JLLCMP) MSGDTA(&JOBD1) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Aggiusta il nome della libreria col valore di ritorno. */ CHGVAR VAR(&JOBD1L) VALUE(&LIBX) /* Assegna la colonna di output alla lista librerie corrente. */ CHGVAR VAR(&COL) VALUE(1) /* Chiama caricamento in memoria della prima lista librerie recuperata. */ CALL PGM(JLLCMPW) PARM(NEW &COL &JOBD1N &JOBD1L + &LIBL) /* Esamina l'elenco delle Job description. */ DOFOR VAR(&XX) FROM(1) TO(&JOBD9§) /* Calcola displacement. */ CHGVAR VAR(&DD) VALUE(3 + (&XX - 1) * 20) CHGVAR VAR(&DDL) VALUE(&DD + 10) /* Estrae nome Job description. */ CHGVAR VAR(&JOBD9N) VALUE(%SST(&JOBD9 &DD 10)) /* Estrae libreria job description. */ CHGVAR VAR(&JOBD9L) VALUE(%SST(&JOBD9 &DDL 10)) /* Se la libreria deve essere uguale alla prima, la assume. */ IF COND(&JOBD9L *EQ *FIRSTLIB) THEN(CHGVAR + VAR(&JOBD9L) VALUE(&JOBD1L)) /* Ricompone il nome qualificato. */ CHGVAR VAR(&JOBD9R) VALUE(&JOBD9N *CAT &JOBD9L) /* Elabora una Job description. */ DO /* Controlla l'esistenza della job description. */ CHKOBJ OBJ(&JOBD9L/&JOBD9N) OBJTYPE(*JOBD) /* Se la job description non esiste, */ /* diagnostica e salta a rilascio. */ MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JLC0104) MSGF(JLLCMP) MSGDTA(&JOBD9L + *CAT &JOBD9N) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Chiama il recupero della lista librerie dalla job description. */ CALL PGM(JLIBLD) PARM(&JOBD9R &LIBL &LIBX &EI) /* Se la lista librerie e' in bianco, messaggia e rilascia. */ IF COND(&LIBL *EQ ' ') THEN(DO) SNDPGMMSG MSGID(JLC0105) MSGF(JLLCMP) MSGDTA(&JOBD9R) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Aggiusta il nome della libreria col valore di ritorno. */ CHGVAR VAR(&JOBD9L) VALUE(&LIBX) /* Assegna la colonna di output alla lista librerie corrente. */ CHGVAR VAR(&COL) VALUE(&XX + 1) /* Chiama l'aggiunta in memoria della lista librerie recuperata. */ CALL PGM(JLLCMPW) PARM(ADD &COL &JOBD9N &JOBD9L + &LIBL) /* Elabora una Job description. */ ENDDO /* Esamina l'elenco delle Job description. */ ENDDO /* Reindirizza il file di emissione. */ OVRDBF FILE(&PROTO1) TOFILE(&OUTFL/&OUTFN) /* Chiama il riempimento del file di emissione. */ CALL PGM(JLLCMPW) PARM(WRI) /* Cancella reindirizzamento. */ DLTOVR FILE(&PROTO1) /* Invita a vedere l'outfile. */ JRQT CMD(RUNQRY QRYFILE((&OUTFL/&OUTFN)) + RCDSLT(*YES)) REFPGM(&REFPGM) /* Invita a scaricare l'outfile. */ JRQT CMD(JTOCSV FROMFILE(&OUTFL/&OUTFN) + RMVBLANK(*TRAILING)) REFPGM(&REFPGM) /* Label di esecuzione delle attivita' finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) + MSGDTA(JLLCMP) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attivita' finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JLLCMPP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. :IMPORT NAME='*' PNLGRP=JPNL. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JLLCMP :H2.Compare library list from jobd :P.Compara fino a 10 liste librerie da descrizioni lavori :P.Scarica le liste in un file da portare in excel in separata sede. Il file ha 10 colonne e contiene in ogni colonna la lista librerie presente sulla job description corrispondente. :P.Il comando e' nato per facilitare il confronto delle liste librerie che fanno parte di descrizioni lavoro diverse. Le liste librerie vengono fotografate in un file IFS in formato csv che puo' essere letto e manipolato con EXCEL. :XMP. Il comando riceve i nomi delle job description da confrontare. Al termine dell'esecuzione emette due inviti. Il primo a consultare il file di emissione su AS400. :HP2. /**/RUNQRY QRYFILE((QTEMP/JLLCMP1T)) RCDSLT(*YES) :EHP2. Il secondo a scaricare il file di emissione sull'IFS del medesimo AS400. :HP2. /**/JTOCSV FROMFILE(QTEMP/JLLCMP1T) RMVBLANK(*TRAILING) :EHP2. Con un FTP chiamato da pc o se l'IFS e' definito come disco PC, copia il file sul pc ed aprilo con Excel. Non aprirlo direttamente su IFS con Excel perche' normalmente l'apertura dura un tempo esagerato. :EXMP. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/JOBDFIRST'. :H3.First job description (JOBDFIRST) - name :P.Nome della prima descrizione lavoro da confrontare. :P.Valore obbligatorio. :PARML. :PT.nome-descrizione-lavoro :PD.Nome di una descrizione lavoro. :EPARML. :H3.First job description (JOBDFIRST) - library :P.Nome della libreria in cui risiede la descrizione lavoro. :P.Valori permessi: :PARML. :PT.:PK DEF.*LIBL:EPK.€ :PD.La descrizione lavoro viene cercata in lista librerie. :PT.*CURLIB :PD.La descrizione lavoro viene cercata nella libreria corrente. :PT.nome-libreria :PD.La descrizione lavoro viene cercata nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/JOBDOTHER'. :H3.Other job descriptions (JOBDOTHER) - name :P.Nome della altre descrizioni lavoro da confrontare. :P.Fino a nove elementi, il primo obbligatorio. :PARML. :PT.nome-descrizione-lavoro :PD.Nome di una descrizione lavoro. :EPARML. :H3.Other job description (JOBDOTHER) - library :P.Nome della libreria in cui risiede la descrizione lavoro. :P.Valori permessi: :PARML. :PT.:PK DEF.*FIRSTLIB:EPK. :PD.La descrizione lavoro viene cercata nella sressa libreria nella quale si trova la prima descrizione lavoro. :PT.*LIBL :PD.La descrizione lavoro viene cercata in lista librerie. :PT.*CURLIB :PD.La descrizione lavoro viene cercata nella libreria corrente. :PT.nome-libreria :PD.La descrizione lavoro viene cercata nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/OUTFILE'. :H3.Output file (OUTFILE) - file :P.Nome del file fisico ricevente l'elenco comparativo delle librerie. :P.Non e' permesso il nome del prototipo "JLLCMP1". :P.Se il file di emissione preesiste rispetto alla richiesta corrente, per evitare la cancellazione di file estranei al comando, si verifica il level check del file che deve essere identico a quello del prototipo. :P.Valori permessi: :PARML. :PT.:PK DEF.JLLCMP1T:EPK. :PD.Il file di emissione prende il nome di default JLLCMP1T. :PT.nome-file-emissione :PD.Il nome indicato viene usato per il file di emissione. :EPARML. :H3.Output file (OUTFILE) - library :P.Nome della libreria in cui risiede il file fisico ricevente l'elenco comparativo delle librerie. :P.Valori permessi: :PARML. :PT.:PK DEF.QTEMP:EPK. :PD.Il file di emissione viene creato in libreria "QTEMP". :PT.nome-libreria :PD.Il file di emissione viene creato nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/refpgm'. :IMHELP NAME='refpgm'. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. :XH3.Esempi per JLLCMP :P.:HP2.Esempio 1: Genera il file che permette di confrontare le liste librerie di tre job description.:EHP2. :XMP. Con i soli parametri necessari: :HP2. JLLCMP JOBDFIRST(JOBDUNO) JOBDOTHER(JOBDDUE JOBDTRE) :EHP2. Anche con i parametri di default: :HP2. JLLCMP JOBDFIRST(JOBDUNO) JOBDOTHER(JOBDDUE JOBDTRE) OUTFILE(QTEMP/JLLCMP1T) REFPGM(*CPP) :EHP2. :EXMP. :P.Questo comando genera il file fisico QTEMP/JLLCMP1T che contiene l'immagine delle liste librerie comparate. Il comando genera un log di cui si riporta esempio visibile al meglio se la chiamata avviene dal video comandi QCMD. :XMP. :HP2. > JLLCMP JOBDFIRST(JOBDUNO) JOBDOTHER(JOBDDUE JOBDTRE) > /**/RUNQRY QRYFILE((QTEMP/JLLCMP1T)) RCDSLT(*YES) > /**/JTOCSV FROMFILE(QTEMP/JLLCMP1T) RMVBLANK(*TRAILING) :EHP2. :EXMP. :P.I messaggi che iniziano con /**/ sono comandi non eseguiti ma duplicabili ed eseguibili per completare le attivita' di confronto preparate dal comando JLLCMP. :P.Tramite il RUNQRY il file puo' essere visionato estemporaneamente. :XMP. :HP2. Jobd 01 Jobd 02 Jobd 03 library library library JOBDUNO JOBDDUE JOBDTRE NERONI2 NERONI2 NERONI2 ---------- ---------- -------- QTEMP QTEMP QTEMP NERONI1 NERONI2 NERONI1 NERONI2 NERONI8 NERONI2 NERONI3 NERONI4 NERONI3 NERONI4 NERONI1 NERONI4 NERONI5 QGPL NERONI6 QGPL NERONI7 NERONI8 QGPL :EHP2. :EXMP. :P.Tramite il comando JTOCSV, il file puo' essere scaricato sotto forma di csv su un indirizzario IFS. :P.Con un FTP o se l'IFS e' definito come disco pc, lo scarico puo' essere portato su pc e da li' aperto con EXCEL. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. &MSG(CPX0005,QCPFMSG). JLLCMP - Help :XH3.&MSG(CPX0005,QCPFMSG). JLLCMP :P.:HP3.&MSG(CPX0006,QCPFMSG). *DIAG:EHP3. seguiti da :HP3.*ESCAPE CPF0001:EHP3. :P.Durante esecuzione :DL COMPACT. :DT.JLC0101 :DD.&MSG(JLC0101,JLLCMP,*LIBL,nosub). :DT.JLC0102 :DD.&MSG(JLC0102,JLLCMP,*LIBL,nosub). :DT.JLC0103 :DD.&MSG(JLC0103,JLLCMP,*LIBL,nosub). :DT.JLC0104 :DD.&MSG(JLC0104,JLLCMP,*LIBL,nosub). :DT.JLC0105 :DD.&MSG(JLC0105,JLLCMP,*LIBL,nosub). :EDL. :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JLLCMPW) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 15-01-2016 Creato. * Compare libl from jobd. WrtOutfile * Compara liste librerie da descrizione lavori. Scrive emissione * Memorizza le liste librerie provenienti dalle job description * e, all'ultima chiamata, * emette il file riassuntivo da scaricare per excel. * *--------------------------------------------------------------------------------------------- * Compare libl from jobd. Outfile FJLLCMP1 uf a e disk usropn *--------------------------------------------------------------------------------------------- * Definisce schiera per la ridenominazione dei campi. D ll s 10 dim(10) *--------------------------------------------------------------------------------------------- * Schiera di 10 liste librerie. D libl s 2750 dim(10) * Schiera di 10 job description. D jobd s 10 dim(10) * Schiera di 10 librerie. D jobdl s 10 dim(10) *--------------------------------------------------------------------------------------------- * Indici. D xx s 3 0 D yy s 3 0 * Displacement. D dd s 5 0 *--------------------------------------------------------------------------------------------- * Ridefinisce campi come elementi di schiera. IL1R 01 I l101 ll(01) I l102 ll(02) I l103 ll(03) I l104 ll(04) I l105 ll(05) I l106 ll(06) I l107 ll(07) I l108 ll(08) I l109 ll(09) I l110 ll(10) *--------------------------------------------------------------------------------------------- * Scambia parametri. C *entry plist * Modalita' di funzionamento. C parm ppmod 3 * Numero colonna nel file di emissione C parm ppcol 3 0 * Nome job description. C parm ppjobd 10 * Libreria job description. C parm ppjobdl 10 * Lista librerie. C parm pplibl 2750 *--------------------------------------------------------------------------------------------- * Se corre modo NEW. C if ppmod = 'NEW' * Pulisce le schiere. C clear jobd C clear jobdl C clear libl * Se corre modo NEW. C endif *--------------------------------------------------------------------------------------------- * Se corre modo NEW o ADD. C if ppmod = 'NEW' or ppmod = 'ADD' * Accantona nelle schiere i parametri ricevuti * in attesa dell'emissione finale. C eval jobd(ppcol) = ppjobd C eval jobdl(ppcol) = ppjobdl C eval libl(ppcol) = pplibl * Se corre modo NEW o ADD. C endif *--------------------------------------------------------------------------------------------- * Se corre modo WRI. C if ppmod = 'WRI' * Prenota chiusura. C seton lr * Apre il file di emissione. C open JLLCMP1 * Trascrive le job description nei campi del record di emissione. C eval ll = jobd * Scrive il record. C write L1R * Trascrive le job description lib nei campi del record di emissione. C eval ll = jobdl * Scrive il record. C write L1R * Tira una riga. C eval ll = *all'-' * Scrive il record. C write L1R * Emette tanti record quante sono le librerie * nella lista librerie piu' lunga. C do 250 xx 3 0 * Pulisce il record di emissione. C clear L1R * Calcola displacement della libreria lungo la lista librerie. C eval dd = 1 + (xx - 1) * 11 * Assume record vuoto. C setoff 99 * Esamina le dieci librerie nella posizione dell'indice xx. C do 10 yy 3 0 * Trascrive la libreria nel record di emissione. C eval ll(yy) = %subst(libl(yy):dd:10) * Annota record valorizzato. C if ll(yy) <> *blank C seton 99 C endif * Esamina le dieci librerie nella posizione dell'indice xx. C enddo * Se record vuoto, abbandona. C n99 leave * Scrive il record. C write L1R * Emette tanti record quante sono le librerie * nella lista librerie piu' lunga. C enddo * Se corre modo WRI. C endif *--------------------------------------------------------------------------------------------- * Ritorna. C return *--------------------------------------------------------------------------------------------- //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JLLCMP1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 15-01-2016 Creato. * Compare libl from jobd. Outfile * Compara liste librerie da descrizione lavori. File di emissione * Il file ha 10 colonne e contiene in ogni colonna * la lista librerie presente sulla job description corrispondente. * Da portare in excel in separata sede. * Per scaricare su IFS si puo' usare: * JTOCSV FROMFILE(LIBRERIA/FILE) * A R L1R A TEXT('Compare + A library list from jobd.') A L101 10 A COLHDG('Jobd 01' 'library') A L102 10 A COLHDG('Jobd 02' 'library') A L103 10 A COLHDG('Jobd 03' 'library') A L104 10 A COLHDG('Jobd 04' 'library') A L105 10 A COLHDG('Jobd 05' 'library') A L106 10 A COLHDG('Jobd 06' 'library') A L107 10 A COLHDG('Jobd 07' 'library') A L108 10 A COLHDG('Jobd 08' 'library') A L109 10 A COLHDG('Jobd 09' 'library') A L110 10 A COLHDG('Jobd 10' 'library') //ENDSRC //ENDBCHJOB