//BCHJOB JOB(JWUJ) 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: 2014-09-12 17:13 */ /* To File : "JWUJ" */ /* To Library : "NERONI2" */ /* To Text : "Work User Jobs Outfile. 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 "JWUJ.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:\JWUJ.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JWUJ.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(JWUJ) 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/JWUJ" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JWUJ) MBR(JWUJ.) 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/JWUJ) CRTSRCPF FILE(NERONI2/JWUJ) RCDLEN(112) + TEXT('Work User Jobs Outfile. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWUJ) TOFILE(NERONI2/JWUJ) + TOMBR(JWUJ) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWUJ) MBR(JWUJ) + SRCTYPE(CMD) + TEXT('Work User Jobs Outfile. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWUJ.) TOFILE(NERONI2/JWUJ) + TOMBR(JWUJ.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWUJ) MBR(JWUJ.) + SRCTYPE(CL) + TEXT('Work User Jobs Outfile. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWUJC) TOFILE(NERONI2/JWUJ) + TOMBR(JWUJC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWUJ) MBR(JWUJC) + SRCTYPE(CLLE) + TEXT('Work User Jobs Outfile. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWUJD) TOFILE(NERONI2/JWUJ) + TOMBR(JWUJD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWUJ) MBR(JWUJD) + SRCTYPE(RPGLE) + TEXT('Work User Jobs Outfile. Exe') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWUJ1) TOFILE(NERONI2/JWUJ) + TOMBR(JWUJ1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWUJ) MBR(JWUJ1) + SRCTYPE(PF) + TEXT('Work User Jobs Outfile. OutFile') /*---------------------------------------------------------------------*/ //DATA FILE(JWUJ) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Work User Jobs Outfile. Cmd */ /* Claudio Neroni 16-02-2009 Creato. */ CMD PROMPT('Work User Jobs Outfile') PARM KWD(STATUS) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*ALL) VALUES(*ALL *ACTIVE *JOBQ + *OUTQ) PROMPT('Job status') PARM KWD(TYPE) TYPE(*CHAR) LEN(1) RSTD(*YES) + DFT(*) VALUES(* A B I M R S W X) + PROMPT('Job type') PARM KWD(OUTFILE) TYPE(OUTFILE) PROMPT('Output + File') OUTFILE: QUAL TYPE(*NAME) DFT(JWUJT) QUAL TYPE(*NAME) DFT(QTEMP) MIN(0) PROMPT('in + library') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JWUJ.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JWUJ.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 16-02-2009 Creato. */ /* JWUJ */ /* Work User Jobs Outfile. */ /* Prerequisiti: JRSNMSG, JCPYCLR */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JWUJ) DLTPGM PGM(NERONI2/JWUJC) DLTPGM PGM(NERONI2/JWUJD) DLTF FILE(NERONI2/JWUJ1) /* Crea il file di lavoro. */ CRTPF FILE(NERONI2/JWUJ1) SRCFILE(JWUJ) SIZE(*NOMAX) /* Crea il comando. */ CRTCMD CMD(NERONI2/JWUJ) PGM(NERONI2/JWUJC) SRCFILE(JWUJ) + PRDLIB(NERONI2) /* Crea il command processing program. */ CRTBNDCL PGM(NERONI2/JWUJC) SRCFILE(JWUJ) DBGVIEW(*ALL) /* Crea l'esecutore. */ CRTBNDRPG PGM(NERONI2/JWUJD) SRCFILE(JWUJ) DBGVIEW(*ALL) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JWUJC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Work User Jobs Outfile. Cpp */ /* Claudio Neroni 16-02-2009 Creato. */ PGM PARM(&STATUS &TYPE &OUTFILEQ) /* Riceve Stato lavoro. */ DCL VAR(&STATUS) TYPE(*CHAR) LEN(10) /* Riceve Tipo lavoro. */ DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) /* Riceve Nome qualificato del file di emissione. */ DCL VAR(&OUTFILEQ) TYPE(*CHAR) LEN(20) /* File di emissione. */ DCL VAR(&OUTFILE) TYPE(*CHAR) LEN(10) /* Libreria del File di emissione. */ DCL VAR(&OUTLIB) TYPE(*CHAR) LEN(10) /* Testo di errore in chiamata api. */ DCL VAR(&ERR) TYPE(*CHAR) LEN(100) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&OUTFILE) VALUE(%SST(&OUTFILEQ 1 10)) CHGVAR VAR(&OUTLIB) VALUE(%SST(&OUTFILEQ 11 10)) /* Crea il file di emissione. */ JCPYCLR FROMFILE(JWUJ1) TOFILE(&OUTLIB/&OUTFILE) /* Ridirige la scrittura sul file di emissione. */ OVRDBF FILE(JWUJ1) TOFILE(&OUTLIB/&OUTFILE) /* Chiama il riempimento del file di emissione. */ CALL PGM(JWUJD) PARM(&STATUS &TYPE &ERR) /* Se errore nella chiamata delle api, segnala e salta a errore. */ IF COND(&ERR *NE ' ') THEN(DO) SNDPGMMSG MSG(&ERR) GOTO CMDLBL(cpf0001) ENDDO /* Messaggia per esito felice. */ SNDPGMMSG MSG('Creato in' *BCAT &OUTLIB *TCAT '/' + *TCAT &OUTFILE *BCAT 'l''elenco dei + lavori utente stato "' *TCAT &STATUS + *TCAT '" di tipo "' *TCAT &TYPE *TCAT '".') /* Salta all'esecuzione delle attivitą finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attivitą 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(JWUJ) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG RMV(*NO) MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attivitą finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JWUJD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Work User Jobs Outfile. Exe * Claudio Neroni 16-02-2009 Creato. *--------------------------------------------------------------------------------------------- * Output file. Fjwuj1 o e disk *--------------------------------------------------------------------------------------------- * Qualified user space name D userspace ds D userspacename 10 inz('JWUJU') D userspacelib 10 inz('QTEMP') Dusattrib S 10 INZ('temporary') Dussize S 9b 0 INZ(265535) Dusinitvalu S 1 INZ(x'00') Dusauth S 10 INZ('*ALL') Dustext S 50 INZ('Work User Jobs Outfile. + D UsrSpc') *--------------------------------------------------------------------------------------------- * API generic Header D apigenhdr DS D apihdrinizio 1 124 D apihdrofst 125 128b 0 D apihdrcnt 133 136b 0 D apihdrlen 137 140b 0 *--------------------------------------------------------------------------------------------- * API Error Structure Dapierror DS D apierrprv 1 4b 0 INZ(67) D apierrrcv 5 8b 0 D apierrid 9 15 D apierrpdt 16 67 *--------------------------------------------------------------------------------------------- * List Job Data structure D jobds DS D jobnam 10 D jobusr 10 D jobnum 6 D jobite 16 D jobsta 10 D jobtyp 1 D jobsub 1 D jobfil 2 D jobjis 1 D jobre1 3 D jobret 9b 0 D joblfi 9b 0 D jobkef 9b 0 D jobtod 1 D jobre2 3 D joblen 9b 0 D jobajs 4 *--------------------------------------------------------------------------------------------- * Program Status Data Structure D psds SDS D psdsuser 254 263 *--------------------------------------------------------------------------------------------- * Qualified job name D quajob ds D quajobnam 10 INZ('*ALL') D quajobusr 10 INZ('*ALL') D quajobnum 6 INZ('*ALL') Dusformat S 8 Djobstatus S 10 Djobtype S 1 Dfldnum S 9b 0 INZ(1) Dfldarr S 9b 0 INZ(0101) Dusstart S 9b 0 Dusheadlen S 9b 0 Dindex S 5 0 INZ(0) *--------------------------------------------------------------------------------------------- * Scambia parametri. C *entry plist * Receive Job Status. C parm ppsta 10 * Receive Job Type. C parm pptyp 1 * Return Error. C parm pperr 100 *--------------------------------------------------------------------------------------------- * Clear error. C clear pperr * Delete user space. C CALL 'QUSDLTUS' 50 C PARM userspace C PARM apierror * Create user space. C CALL 'QUSCRTUS' 99 C PARM userspace C PARM usattrib C PARM ussize C PARM usinitvalu C PARM usauth C PARM ustext C if *in99 C eval pperr='Create User Space Error' C goto endpgm C endif * List jobs to user space. C CALL 'QUSLJOB' 99 C PARM userspace C PARM 'JOBL0200' usformat C PARM quajob C PARM ppsta jobstatus C PARM apierror C PARM pptyp jobtype C PARM fldnum C PARM fldarr C if *in99 C eval pperr='List Jobs Error' C goto endpgm C endif * Retrieve Generic Header. C EVAL usstart = 1 C EVAL usheadlen = 140 C CALL 'QUSRTVUS' 99 C PARM userspace C PARM usstart C PARM usheadlen C PARM apigenhdr C if *in99 C eval pperr='Retrieve Generic Header Error' C goto endpgm C endif * Calculate first displacement. C EVAL usstart = apihdrofst + 1 * Retrieve all jobs information. C DO apihdrcnt index * Retrieve job information. C CALL 'QUSRTVUS' 99 C PARM userspace C PARM usstart C PARM apihdrlen C PARM jobds C if *in99 C eval pperr='Retrieve Job Information Error' C goto endpgm C endif * Fill out record. C eval wujseq = index C eval wujnam = jobnam C eval wujusr = jobusr C eval wujnum = jobnum C eval wujsta = jobsta C eval wujtyp = jobtyp C eval wujsub = jobsub C eval wujjis = jobjis C eval wujajs = jobajs * Write out record. C write wuj * Calculate new displacement. C EVAL usstart = usstart + apihdrlen * Retrieve all jobs information. C ENDDO * Delete user space C CALL 'QUSDLTUS' 99 C PARM userspace C PARM apierror C if *in99 C eval pperr='Delete User Space Error' C goto endpgm C endif * End Program. C endpgm tag * Exit C seton lr *--------------------------------------------------------------------------------------------- //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JWUJ1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Work User Jobs Outfile. Outfile * Claudio Neroni 16-02-2009 Creato. A R WUJ A TEXT('Work User Jobs Outfile') A WUJSEQ 9 0 A COLHDG('List' + A 'sequence') A WUJNAM 10 A COLHDG('Job' + A 'name') A WUJUSR 10 A COLHDG('Job' + A 'user') A WUJNUM 6 A COLHDG('Job' + A 'number') A WUJSTA 10 A COLHDG('Job' + A 'status') A WUJTYP 1 A COLHDG('Job' + A 'type') A WUJSUB 1 A COLHDG('Job' + A 'subtype') A WUJJIS 1 A COLHDG('Job' + A 'information' + A 'status') A WUJAJS 4 A COLHDG('Active' + A 'job' + A 'status') //ENDSRC //ENDBCHJOB