//BCHJOB JOB(JAC2) 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-17 16:20 */ /* To File : "JAC2" */ /* To Library : "NERONI2" */ /* To Text : "Check Active Job 2. 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 "JAC2.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:\JAC2.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JAC2.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(JAC2) 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/JAC2" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JAC2) MBR(JAC2.) 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/JAC2) CRTSRCPF FILE(NERONI2/JAC2) RCDLEN(112) + TEXT('Check Active Job 2. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(CHKACTJOB2) TOFILE(NERONI2/JAC2) + TOMBR(CHKACTJOB2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JAC2) MBR(CHKACTJOB2) + SRCTYPE(TXT) + TEXT('Check Active Job 2. Richard Cranston (original)') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JAC2) TOFILE(NERONI2/JAC2) + TOMBR(JAC2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JAC2) MBR(JAC2) + SRCTYPE(CMD) + TEXT('Check Active Job 2. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JAC2.) TOFILE(NERONI2/JAC2) + TOMBR(JAC2.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JAC2) MBR(JAC2.) + SRCTYPE(CL) + TEXT('Check Active Job 2. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JAC2C) TOFILE(NERONI2/JAC2) + TOMBR(JAC2C) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JAC2) MBR(JAC2C) + SRCTYPE(RPGLE) + TEXT('Check Active Job 2. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JAC2I) TOFILE(NERONI2/JAC2) + TOMBR(JAC2I) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JAC2) MBR(JAC2I) + SRCTYPE(CMD) + TEXT('Check Active Job 2. CmdInter') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JAC2T) TOFILE(NERONI2/JAC2) + TOMBR(JAC2T) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JAC2) MBR(JAC2T) + SRCTYPE(CLLE) + TEXT('Check Active Job 2. Test') /*---------------------------------------------------------------------*/ //DATA FILE(CHKACTJOB2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') http://search400.techtarget.com/tip/0,289483,sid3_gci1178276_mem1,00.html?ShortReg=1&mboxConv=search 400_RegActivate_Submit& http://search400.techtarget.com/tip/0,289483,sid3_gci1178276_mem1,00.html Wondering how to check to see if a Job is active? This utility program checks to see if a Job is active and returns 'y/n' flag. Code *--------------------------------------------------------------------- * Program: CHKACTJOB *--------------------------------------------------------------------- * Programmer: Richard Cranston * Description: Calling program passes the JobName and ActiveJobFlag * If JobName is active, ActiveJobFlag = 'Y' *--------------------------------------------------------------------- *--------------------------------------------------------------------- * Stand alone Fields & Data Structures *--------------------------------------------------------------------- D JobNameEntry S 10 D JobRunning S 1 D StringPos S 10I 0 Inz D StrLength S 10I 0 Inz D SizOfSpace S 10I 0 Inz(1024) D UserSpace DS Inz D SpaceName 10 Inz('JOBSPACE') D SpaceLib 10 Inz('QTEMP') D QualJobNam DS Inz D JobName 10 D UserName 10 D JobNumber 6 D Error DS Inz D BytesProv 10I 0 D BytesAvail 10I 0 D MessageID 7 D NotUsed 1 D MsgData 100 * Create User Space Parms D ExtAtr S 10 Inz('TEMPSPACE') D InitialVal S 1 Inz D Authority S 10 Inz('*ALL') D TextSpace S 50 Inz D ReplaceSpc S 10 Inz('*YES') * List Jobs API Parms D ListFmtNam S 8 Inz('JOBL0100') D JobStatus S 10 Inz('*ALL') * List Job Information API Parms D RecVar DS Inz D BytesRet 10I 0 D BytesAval 10I 0 D JobNam 10 D UserNam 10 D JobNum 6 D IntJobID 16 D JobSts 10 D Jobtype 1 D Jobsubtyp 1 D Reserved 2 D EndSev 10I 0 D LogSev 10I 0 D LogLvl 1 D LogTxt 10 * User Space Generic Header Definition D GenericStc DS Inz D UserArea 64 D SizGeneric 10I 0 D RlsLevel 4 D FormatName 8 D APIused 10 D DateTime 13 D InfoStatus 1 D SizUsrSpac 10I 0 D InpOffset 10I 0 D InpSize 10I 0 D HdrOffset 10I 0 D HdrSize 10I 0 D LstOffset 10I 0 D LstSize 10I 0 D NumLstEnt 10I 0 D SizeLstEnt 10I 0 D temp1 10I 0 D temp2 2 D temp3 3 D temp4 1 D temp5 42 D temp6 256 D temp7 128 * List Data Section of Jobs API User Space D ListData DS Inz D Job 10 D User 10 D Number 6 D InternalID 16 D Status 10 *--------------------------------------------------------------------- * Entry Parameters *--------------------------------------------------------------------- C *Entry PList C Parm JobNameEntry C Parm JobRunning JobRunning *--------------------------------------------------------------------- * Main Routine *--------------------------------------------------------------------- C Eval JobName = JobNameEntry C Eval UserName = '*ALL' C Eval JobNumber = '*ALL' * Create User Space API C Call 'QUSCRTUS' C Parm UserSpace C Parm ExtAtr C Parm SizOfSpace C Parm InitialVal C Parm Authority C Parm TextSpace * List Jobs API C Call 'QUSLJOB' C Parm UserSpace C Parm ListFmtNam C Parm QualJobNam C Parm JobStatus * Retrieve Generic Header Section of the User Space C Eval StrLength = %len(GenericStc) C Call 'QUSRTVUS' C Parm UserSpace C Parm 1 StringPos C Parm StrLength C Parm GenericStc * Retrieve ListData Section C Eval StrLength = SizeLstEnt Size each List Entry C Eval StringPos = LstOffset + 1 + Last Record C (StrLength * (NumLstEnt - 1)) C Call 'QUSRTVUS' C Parm UserSpace C Parm StringPos C Parm StrLength C Parm ListData Last job information * Set ActiveJobFlag C If Status = '*ACTIVE' C Eval JobRunning = 'Y' C Else C Eval JobRunning = 'N' C EndIF * Delete UserSpace C Call 'QUSDLTUS' C Parm UserSpace C Parm Error C Eval *inlr = *On Example of Calling Program: DCL VAR(&SYSJOB) TYPE(*CHAR) LEN(10) + VALUE('SAVACT') DCL VAR(&ACTFLG) TYPE(*CHAR) LEN(1) VALUE('N') CALL PGM(CHKACTJOB) PARM(&SYSJOB &ACTFLG) IF COND(&ACTFLG *EQ 'N') THEN(CALL PGM(SOMEPGM)) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JAC2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Check Active Job') PARM KWD(JOB) TYPE(*NAME) MIN(1) PROMPT('Job name') PARM KWD(ACTIVE) TYPE(*CHAR) LEN(1) RTNVAL(*YES) + MIN(1) PROMPT('Active Y/N Var 1') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JAC2.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JAC2.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 00 + *SECLVL) MSGQ(*USRPRF) /* Richard Cranston 04-04-2006 Creato. */ /* http://search400.techtarget.com/tip/0,289483,sid3_gci1178276_mem1,00.html */ /* JAC2 */ /* Check Active Job 2. */ /* Prerequisiti: nessuno */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JAC2) DLTCMD CMD(NERONI2/JAC2I) DLTPGM PGM(NERONI2/JAC2C) DLTPGM PGM(NERONI2/JAC2T) /* Crea i comandi. */ CRTCMD CMD(NERONI2/JAC2) PGM(NERONI2/JAC2C) SRCFILE(JAC2) + ALLOW(*IPGM *BPGM) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JAC2I) PGM(NERONI2/JAC2T) SRCFILE(JAC2) ALLOW(*ALL) + PRDLIB(NERONI2) /* Crea il command processing program. */ CRTBNDRPG PGM(NERONI2/JAC2C) SRCFILE(JAC2) DBGVIEW(*ALL) /* Crea il test program. */ CRTBNDCL PGM(NERONI2/JAC2T) SRCFILE(JAC2) DBGVIEW(*ALL) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JAC2C) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * http://search400.techtarget.com/tip/0,289483,sid3_gci1178276_mem1,00.html * Program: CHKACTJOB *--------------------------------------------------------------------- * Programmer: Richard Cranston * Description: Calling program passes the JobName and ActiveJobFlag * If JobName is active, ActiveJobFlag = 'Y' *--------------------------------------------------------------------- *--------------------------------------------------------------------- * Stand alone Fields & Data Structures *--------------------------------------------------------------------- D JobNameEntry S 10 D JobRunning S 1 D StringPos S 10I 0 Inz D StrLength S 10I 0 Inz D SizOfSpace S 10I 0 Inz(1024) D UserSpace DS Inz D SpaceName 10 Inz('JOBSPACE') D SpaceLib 10 Inz('QTEMP') D QualJobNam DS Inz D JobName 10 D UserName 10 D JobNumber 6 D Error DS Inz D BytesProv 10I 0 D BytesAvail 10I 0 D MessageID 7 D NotUsed 1 D MsgData 100 * Create User Space Parms D ExtAtr S 10 Inz('TEMPSPACE') D InitialVal S 1 Inz D Authority S 10 Inz('*ALL') D TextSpace S 50 Inz D ReplaceSpc S 10 Inz('*YES') * List Jobs API Parms D ListFmtNam S 8 Inz('JOBL0100') D JobStatus S 10 Inz('*ALL') * List Job Information API Parms D RecVar DS Inz D BytesRet 10I 0 D BytesAval 10I 0 D JobNam 10 D UserNam 10 D JobNum 6 D IntJobID 16 D JobSts 10 D Jobtype 1 D Jobsubtyp 1 D Reserved 2 D EndSev 10I 0 D LogSev 10I 0 D LogLvl 1 D LogTxt 10 * User Space Generic Header Definition D GenericStc DS Inz D UserArea 64 D SizGeneric 10I 0 D RlsLevel 4 D FormatName 8 D APIused 10 D DateTime 13 D InfoStatus 1 D SizUsrSpac 10I 0 D InpOffset 10I 0 D InpSize 10I 0 D HdrOffset 10I 0 D HdrSize 10I 0 D LstOffset 10I 0 D LstSize 10I 0 D NumLstEnt 10I 0 D SizeLstEnt 10I 0 D temp1 10I 0 D temp2 2 D temp3 3 D temp4 1 D temp5 42 D temp6 256 D temp7 128 * List Data Section of Jobs API User Space D ListData DS Inz D Job 10 D User 10 D Number 6 D InternalID 16 D Status 10 *--------------------------------------------------------------------- * Entry Parameters *--------------------------------------------------------------------- C *Entry PList C Parm JobNameEntry C Parm JobRunning JobRunning *--------------------------------------------------------------------- * Main Routine *--------------------------------------------------------------------- C Eval JobName = JobNameEntry C Eval UserName = '*ALL' C Eval JobNumber = '*ALL' * Create User Space API C Call 'QUSCRTUS' C Parm UserSpace C Parm ExtAtr C Parm SizOfSpace C Parm InitialVal C Parm Authority C Parm TextSpace * List Jobs API C Call 'QUSLJOB' C Parm UserSpace C Parm ListFmtNam C Parm QualJobNam C Parm JobStatus * Retrieve Generic Header Section of the User Space C Eval StrLength = %len(GenericStc) C Call 'QUSRTVUS' C Parm UserSpace C Parm 1 StringPos C Parm StrLength C Parm GenericStc * Retrieve ListData Section C Eval StrLength = SizeLstEnt Size each List Entry C Eval StringPos = LstOffset + 1 + Last Record C (StrLength * (NumLstEnt - 1)) C Call 'QUSRTVUS' C Parm UserSpace C Parm StringPos C Parm StrLength C Parm ListData Last job information * Set ActiveJobFlag C If Status = '*ACTIVE' C Eval JobRunning = 'Y' C Else C Eval JobRunning = 'N' C EndIF * Delete UserSpace C Call 'QUSDLTUS' C Parm UserSpace C Parm Error C Eval *inlr = *On //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JAC2I) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Check Active Job') PARM KWD(JOB) TYPE(*NAME) MIN(1) PROMPT('Job name') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JAC2T) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Example of Calling Program: */ PGM PARM(&SYSJOB) DCL VAR(&SYSJOB) TYPE(*CHAR) LEN(10) DCL VAR(&ACTFLG) TYPE(*CHAR) LEN(1) VALUE('N') CALL PGM(JAC2C) PARM(&SYSJOB &ACTFLG) SNDPGMMSG MSG('Lavoro' *BCAT &SYSJOB *BCAT 'attivo:' + *BCAT &ACTFLG) ENDPGM //ENDSRC //ENDBCHJOB