//BCHJOB JOB(JTOTXT) 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 15:07 */ /* To File : "JTOTXT" */ /* To Library : "NERONI2" */ /* To Text : "Unload database to TXT. 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 "JTOTXT.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:\JTOTXT.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JTOTXT.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(JTOTXT) 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/JTOTXT" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JTOTXT) MBR(JTOTXT.) 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/JTOTXT) CRTSRCPF FILE(NERONI2/JTOTXT) RCDLEN(112) + TEXT('Unload database to TXT. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JTOTXT) TOFILE(NERONI2/JTOTXT) + TOMBR(JTOTXT) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JTOTXT) MBR(JTOTXT) + SRCTYPE(CMD) + TEXT('Unload database to TXT. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JTOTXT.) TOFILE(NERONI2/JTOTXT) + TOMBR(JTOTXT.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JTOTXT) MBR(JTOTXT.) + SRCTYPE(CL) + TEXT('Unload database to TXT. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JTOTXTC) TOFILE(NERONI2/JTOTXT) + TOMBR(JTOTXTC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JTOTXT) MBR(JTOTXTC) + SRCTYPE(CLLE) + TEXT('Unload database to TXT. Cpp') /*----------------------------------------------------------------------------*/ //DATA FILE(JTOTXT) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Unload Database to TXT') PARM KWD(FROMFILE) TYPE(FROMFILE) MIN(1) + PROMPT('From Database File') FROMFILE: QUAL TYPE(*NAME) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + MIN(0) PROMPT('in library') PARM KWD(TOTXT) TYPE(*PNAME) LEN(256) DFT(*DFT) + SPCVAL((*DFT) (*FROMFILE)) PROMPT('To TXT + File (no extension)') PARM KWD(TODIR) TYPE(*PNAME) LEN(256) + DFT('/home/mydir') SPCVAL((*UF)) + PROMPT('To Directory') PARM KWD(WRKLIB) TYPE(*NAME) LEN(10) DFT(QTEMP) + SPCVAL((QTEMP)) PROMPT('Work Library') PARM KWD(MSGTYPE) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*DIAG) VALUES(*DIAG *ESCAPE) + PROMPT('Message type on error') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JTOTXT.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JTOTXT.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 10-05-2007 Creato. */ /* JTOTXT */ /* Scarica Database in TXT. */ /* Prerequisiti: JZONF */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JTOTXT) DLTPGM PGM(NERONI2/JTOTXTC) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JTOTXTC) SRCFILE(JTOTXT) TGTRLS(*CURRENT) + DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JTOTXT) PGM(JTOTXTC) SRCFILE(JTOTXT) PRDLIB(NERONI2) CRTPRXCMD CMD(QGPL/JTOTXT) TGTCMD(NERONI2/JTOTXT) AUT(*USE) + REPLACE(*YES) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JTOTXTC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Scarica Database in TXT. Cpp */ /* Claudio Neroni 24-09-2008 Creato. */ /* Claudio Neroni 08-01-2015 Modificato. */ /* Differenziato messaggio finale di errore. */ /* Ora è possibile richiedere rilascio. */ /* */ PGM PARM(&FROMFILEQ &TOTXT &TODIR &WRKLIB &MSGTYPE) /* Riceve Nome qualificato del file originale. */ DCL VAR(&FROMFILEQ) TYPE(*CHAR) LEN(20) /* Riceve Nome TXT di destinazione. */ DCL VAR(&TOTXT) TYPE(*CHAR) LEN(256) /* Riceve Nome indirizzario di destinazione. */ DCL VAR(&TODIR) TYPE(*CHAR) LEN(256) /* Riceve Libreria di lavoro. */ DCL VAR(&WRKLIB) TYPE(*CHAR) LEN(10) /* Riceve Tipo messaggi se errore. */ DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) /* Libreria del file da scaricare. */ DCL VAR(&FROMLIB) TYPE(*CHAR) LEN(10) /* File da scaricare. */ DCL VAR(&FROMFILE) TYPE(*CHAR) LEN(10) /* Indirizzo e Nome del file txt. */ DCL VAR(&TOSTMF) TYPE(*CHAR) LEN(200) /* Messaggio. */ DCL VAR(&MSG) TYPE(*CHAR) LEN(512) /* Utente corrente. */ DCL VAR(&CURUSER) TYPE(*CHAR) LEN(10) /* Intercetta tutti gli errori imprevisti. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&FROMFILE) VALUE(%SST(&FROMFILEQ 1 10)) CHGVAR VAR(&FROMLIB) VALUE(%SST(&FROMFILEQ 11 10)) /* Recupera Utente corrente. */ RTVJOBA CURUSER(&CURUSER) /* Se richiesto il valore speciale "*UF" dell'indizzario di scarico, */ /* costruisce un percorso. */ IF COND(&TODIR *EQ *UF) THEN(DO) CHGVAR VAR(&TODIR) VALUE('/webufhtml/' *CAT + &CURUSER *TCAT '/XX') ENDDO /* Controlla l'esistenza dell'indirizzario di scarico. */ CHKIN OBJ(&TODIR) MONMSG MSGID(CPFA0DA) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSG('L''indirizzario IFS' *BCAT &TODIR *BCAT + 'non esiste.') GOTO CMDLBL(ERRORE) ENDDO /* Controlla l'esistenza del file. */ CHKOBJ OBJ(&FROMLIB/&FROMFILE) OBJTYPE(*FILE) + MBR(*FIRST) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSG('Il file' *BCAT &FROMLIB *TCAT '/' *TCAT + &FROMFILE *BCAT 'non esiste.') GOTO CMDLBL(ERRORE) ENDDO /* Controlla l'esistenza della libreria di lavoro. */ CHKOBJ OBJ(QSYS/&WRKLIB) OBJTYPE(*LIB) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSG('La libreria di lavoro' *BCAT &WRKLIB + *BCAT 'non esiste.') GOTO CMDLBL(ERRORE) ENDDO /* Se la libreria del file originale è *LIBL, */ /* trasforma *LIBL in un nome di libreria. */ IF COND(&FROMLIB *EQ *LIBL) THEN(DO) RTVOBJD OBJ(&FROMFILE) OBJTYPE(*FILE) RTNLIB(&FROMLIB) ENDDO /* Se la libreria del file originale è uguale alla libreria */ /* di lavoro, errore. */ IF COND(&FROMLIB *EQ &WRKLIB) THEN(DO) SNDPGMMSG MSG('La libreria di lavoro' *BCAT &WRKLIB + *BCAT 'non può essere la libreria del + file originale.') GOTO CMDLBL(ERRORE) ENDDO /* Se il nome dello scarico è *FROMFILE, lo assume. */ IF COND(&TOTXT *EQ *FROMFILE) THEN(CHGVAR + VAR(&TOTXT) VALUE(&FROMFILE)) /* Compone il nome dello scarico. */ IF COND(&TOTXT *EQ *DFT) THEN(CHGVAR + VAR(&TOSTMF) VALUE(&TODIR *TCAT '/' *TCAT + &FROMLIB *TCAT '-' *TCAT &FROMFILE *TCAT + '.txt')) ELSE CMD(CHGVAR VAR(&TOSTMF) VALUE(&TODIR *TCAT + '/' *TCAT &TOTXT *TCAT '.txt')) /* Crea il disimpaccato. */ JZONF FILE(&FROMLIB/&FROMFILE) OUTLIB(&WRKLIB) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSG('File non trascritto:' *BCAT &FROMLIB + *TCAT '/' *TCAT &FROMFILE) GOTO CMDLBL(ERRORE) ENDDO ADDPFM FILE(&WRKLIB/&FROMFILE) MBR(&FROMFILE) /* Copia i dati dal file originale al disimpaccato. */ OVRDBF FILE(INPUT) TOFILE(&FROMLIB/&FROMFILE) + MBR(*FIRST) NBRRCDS(1000) OVRDBF FILE(OUTPUT) TOFILE(&WRKLIB/&FROMFILE) + MBR(*FIRST) CPYF FROMFILE(INPUT) TOFILE(OUTPUT) + MBROPT(*REPLACE) FMTOPT(*MAP *DROP) DLTOVR FILE(INPUT) DLTOVR FILE(OUTPUT) /* Copia i dati nel file piatto. */ CPYF FROMFILE(&WRKLIB/&FROMFILE) + TOFILE(QTEMP/JZONFFLAT) FROMMBR(*FIRST) + MBROPT(*REPLACE) FMTOPT(*NOCHK) /* Copia i dati dal file piatto all'IFS. */ CPYTOIMPF FROMFILE(QTEMP/JZONFFLAT) TOSTMF(&TOSTMF) + MBROPT(*REPLACE) STMFCODPAG(*PCASCII) + RCDDLM(*CRLF) DTAFMT(*FIXED) STRDLM(*NONE) /* Fornisce autorità pubblica sul file scaricato. */ CHGAUT OBJ(&TOSTMF) USER(*PUBLIC) DTAAUT(*RWX) + OBJAUT(*ALL) /* Compone il messaggio di completamento. */ CHGVAR VAR(&MSG) VALUE('Copiato il file di + database' *BCAT &FROMLIB *TCAT '/' *TCAT + &FROMFILE *BCAT 'nel file TXT' *BCAT &TOSTMF) /* Invia il messaggio di completamento. */ SNDPGMMSG MSG(&MSG) MSGTYPE(*COMP) MONMSG MSGID(CPF0000 MCH0000) /* Salta a fine programma. */ GOTO CMDLBL(FINE) /* Errore. */ ERRORE: /* Manda messaggio in caso di errore. */ SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JTOTXT) + MSGTYPE(&MSGTYPE) MONMSG MSGID(CPF0000 MCH0000) /* Fine. */ FINE: ENDPGM //ENDSRC //ENDBCHJOB