//BCHJOB JOB(JWJQJ) 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: "S65D69DA" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-07-26 18:39 */ /* To File : "JWJQJ" */ /* To Library : "NERONI2" */ /* To Text : "Work with Job Queue Jobs. 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 "JWJQJ.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:\JWJQJ.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JWJQJ.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(JWJQJ) 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/JWJQJ" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JWJQJ) MBR(JWJQJ.) 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/JWJQJ) CRTSRCPF FILE(NERONI2/JWJQJ) RCDLEN(112) + TEXT('Work with Job Queue Jobs. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWJQJ) TOFILE(NERONI2/JWJQJ) + TOMBR(JWJQJ) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWJQJ) MBR(JWJQJ) + SRCTYPE(CMD) + TEXT('Work with Job Queue Jobs. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWJQJ.) TOFILE(NERONI2/JWJQJ) + TOMBR(JWJQJ.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWJQJ) MBR(JWJQJ.) + SRCTYPE(CL) + TEXT('Work with Job Queue Jobs. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWJQJC) TOFILE(NERONI2/JWJQJ) + TOMBR(JWJQJC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWJQJ) MBR(JWJQJC) + SRCTYPE(RPGLE) + TEXT('Work with Job Queue Jobs. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWJQJE) TOFILE(NERONI2/JWJQJ) + TOMBR(JWJQJE) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWJQJ) MBR(JWJQJE) + SRCTYPE(RPGLE) + TEXT('Work with Job Queue Jobs. UIM Exit Program') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWJQJH) TOFILE(NERONI2/JWJQJ) + TOMBR(JWJQJH) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWJQJ) MBR(JWJQJH) + SRCTYPE(PNLGRP) + TEXT('Work with Job Queue Jobs. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWJQJP) TOFILE(NERONI2/JWJQJ) + TOMBR(JWJQJP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWJQJ) MBR(JWJQJP) + SRCTYPE(PNLGRP) + TEXT('Work with Job Queue Jobs. Display') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JWJQJV) TOFILE(NERONI2/JWJQJ) + TOMBR(JWJQJV) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JWJQJ) MBR(JWJQJV) + SRCTYPE(RPGLE) + TEXT('Work with Job Queue Jobs. Validity checking pgm') /*----------------------------------------------------------------------------*/ //DATA FILE(JWJQJ) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /*-------------------------------------------------------------------*/ /* */ /* Compile options: */ /* */ /* CrtCmd Cmd( WRKJOBQJOB ) */ /* Pgm( CBX158 ) */ /* SrcMbr( CBX158X ) */ /* VldCkr( CBX158V ) */ /* Allow( *INTERACT *IPGM *IREXX *IMOD ) */ /* AlwLmtUsr( *NO ) */ /* HlpPnlGrp( CBX158H ) */ /* HlpId( *CMD ) */ /* */ /*-------------------------------------------------------------------*/ Cmd Prompt( 'Work with Job Queue Jobs' ) Parm JOBQ Q0001 + Min( 1 ) + Prompt( 'Job queue' ) Q0001: Qual *Name + Expr( *YES ) Qual *Name + Dft( *LIBL ) + SpcVal(( *LIBL ) ( *CURLIB )) + Expr( *YES ) + Prompt( 'Library' ) //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWJQJ.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JWJQJ.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) /* Carsten Flensburg 23-07-2006 Creato. */ /* http://systeminetwork.com/article/apis-example-uim-work-management-apis-part-3 */ /* Claudio Neroni 22-02-2009 Modifiche marginali. */ /* Cambiati nomi, eliminato pgm compilazione, creata stringa. */ /* JWJQJ */ /* Work with Job Queue Jobs. */ /* Prerequisiti: nessuno */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JWJQJH) DLTPNLGRP PNLGRP(NERONI2/JWJQJP) DLTCMD CMD(NERONI2/JWJQJ) DLTPGM PGM(NERONI2/JWJQJC) DLTPGM PGM(NERONI2/JWJQJE) DLTPGM PGM(NERONI2/JWJQJV) /* Cancella i moduli. */ DLTMOD MODULE(NERONI2/JWJQJC) DLTMOD MODULE(NERONI2/JWJQJE) DLTMOD MODULE(NERONI2/JWJQJV) /* Crea i moduli. */ CRTRPGMOD MODULE(NERONI2/JWJQJC) SRCFILE(JWJQJ) DBGVIEW(*ALL) CRTRPGMOD MODULE(NERONI2/JWJQJE) SRCFILE(JWJQJ) DBGVIEW(*ALL) CRTRPGMOD MODULE(NERONI2/JWJQJV) SRCFILE(JWJQJ) DBGVIEW(*ALL) /* Crea gli oggetti. */ CRTPGM PGM(NERONI2/JWJQJC) ACTGRP(*NEW) CRTPGM PGM(NERONI2/JWJQJE) ACTGRP(*CALLER) CRTPGM PGM(NERONI2/JWJQJV) ACTGRP(*CALLER) CRTPNLGRP PNLGRP(NERONI2/JWJQJH) SRCFILE(JWJQJ) CRTPNLGRP PNLGRP(NERONI2/JWJQJP) SRCFILE(JWJQJ) CRTCMD CMD(NERONI2/JWJQJ) PGM(JWJQJC) SRCFILE(JWJQJ) + VLDCKR(JWJQJV) ALLOW(*INTERACT *IPGM *IREXX *IMOD) + ALWLMTUSR(*NO) HLPPNLGRP(JWJQJH) HLPID(*CMD) + PRDLIB(NERONI2) /* Prova. */ DLTPGM PGM(NERONI2/JWJQJALL) CRTPGM PGM(NERONI2/JWJQJALL) MODULE(NERONI2/JWJQJC + NERONI2/JWJQJV NERONI2/JWJQJE) DLTPGM PGM(NERONI2/JWJQJC) DLTPGM PGM(NERONI2/JWJQJE) DLTPGM PGM(NERONI2/JWJQJV) /* Cancella i moduli. */ DLTMOD MODULE(NERONI2/JWJQJC) DLTMOD MODULE(NERONI2/JWJQJE) DLTMOD MODULE(NERONI2/JWJQJV) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWJQJC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') ** ** Program . . : CBX158 ** Description : Work with Job Queue Jobs - CPP ** Author . . : Carsten Flensburg ** Published . : Club Tech iSeries Programming Tips Newsletter ** Date . . . : July 13, 2006 ** ** ** ** CrtRpgMod Module( CBX158 ) ** DbgView( *LIST ) ** ** CrtPgm Pgm( CBX158 ) ** Module( CBX158 ) ** ActGrp( *NEW ) ** Aut( *USE ) ** **-- Header specifications: --------------------------------------------** H Option( *SrcStmt ) **-- API error data structure: D ERRC0100 Ds Qualified D BytPrv 10i 0 Inz( %Size( ERRC0100 )) D BytAvl 10i 0 D MsgId 7a D 1a D MsgDta 128a **-- Global constants: D OFS_MSGDTA c 16 ** D BIN_SGN c 0 D NUM_ZON c 2 D CHAR_NLS c 4 D SORT_ASC c '1' **-- UIM constants: D PNLGRP_Q c 'JWJQJP *LIBL ' D PNLGRP c 'JWJQJP ' D SCP_AUT_RCL c -1 D RDS_OPT_INZ c 'N' D PRM_IFC_0 c 0 D CLO_NORM c 'M' D FNC_EXIT c -4 D FNC_CNL c -8 D KEY_F05 c 5 D KEY_F17 c 17 D KEY_F18 c 18 D RTN_ENTER c 500 D HLP_WDW c 'N' D POS_TOP c 'TOP' D POS_BOT c 'BOT' D LIST_COMP c 'ALL' D LIST_SAME c 'SAME' D EXIT_SAME c '*SAME' D TRIM_SAME c 'S' **-- Global variables: D SysDts s z D KeyDtaVal s 32a D Idx s 10i 0 ** D ObjNam_q Ds D ObjNam 10a D ObjLib 10a **-- UIM variables: D UIM Ds Qualified D AppHdl 8a D LstHdl 4a D EntHdl 4a D FncRqs 10i 0 D EntLocOpt 4a D LstPos 4a **-- List attributes structure: D LstAtr Ds Qualified D LstCon 4a D ExtPgmVar 10a D DspPos 4a D AlwTrim 1a **-- UIM Panel exit program record: D ExpRcd Ds Qualified D ExitPg 20a Inz( 'JWJQJE *LIBL' ) **-- UIM Panel header record: D HdrRcd Ds Qualified D SysDat 7a D SysTim 6a D TimZon 10a D JobQue 10a D JobQueLib 10a D JobQueSts 1a D ActSbs 10a **-- UIM List entry: D LstEnt Ds Qualified D Option 5i 0 D JobId 26a D JobNam 10a D JobUsr 10a CN00-D**JobNbr 6s 0 CN00+D JobNbr 6 D JobTyp 1a D JobSts1 7a D JobSts2 7a D JobPty 2a D EntDat 7a D EntTim 6a D CurUsr 10a D SbmJob 10a D SbmUsr 10a CN00-D**SbmNbr 6s 0 CN00+D SbmNbr 6 ** D LstEntPos Ds LikeDs( LstEnt ) **-- List API parameters: D LstApi Ds Qualified Inz D RtnRcdNbr 10i 0 Inz( 1 ) D NbrFldRtn 10i 0 Inz( %Elem( LstApi.KeyFld )) D KeyFld 10i 0 Dim( 10 ) **-- Job queue information: D OJBQ0100 Ds Qualified Inz D JobQue 10a D JobQueLib 10a D JobQueSts 1a D ActSbs 10a D ActSbsLib 10a D 3a D NbrJobOnQue 10i 0 D SeqNbr 10i 0 D MaxAct 10i 0 D CurAct 10i 0 D QueDsc 50a **-- Filter information: D FltInf Ds Qualified D FltInfLen 10i 0 Inz( %Size( FltInf )) D JobQue_q 20a D JobQue 10a Overlay( JobQue_q: 1 ) D JobQueLib 10a Overlay( JobQue_q: 11 ) D ActSbs 10a **-- Job information: D OLJB0200 Ds 512 Qualified D JobId 26a D JobNam 10a Overlay( JobId: 1 ) D UsrPrf 10a Overlay( JobId: 11 ) CN00-D**JobNbr 6s 0 Overlay( JobId: 21 ) CN00+D JobNbr 6 Overlay( JobId: 21 ) D JobIdInt 16a D Status 10a D JobTyp 1a D JobSubTyp 1a D 2a D JobInfSts 1a D 3a D Data 128a **-- Job information key fields: D KeyDta Ds Qualified D JobQue_q 20a D JobPty 2a D SbsNam_q 20a D ActJobSts 4a D CurUsr 10a D JobEntDts 13a D JobEntDat 7a Overlay( JobEntDts: 1 ) D JobEntTim 6a Overlay( JobEntDts: 8 ) D JobTypE 10i 0 D RunPty 10i 0 D JobQueSts 10a D SbmJob_q 26a D SbmJobNam 10a Overlay( SbmJob_q: 1 ) D SbmJobUsr 10a Overlay( SbmJob_q: 11 ) CN00-D** SbmJobNbr 6s 0 Overlay( SbmJob_q: 21 ) CN00+D SbmJobNbr 6 Overlay( SbmJob_q: 21 ) **-- Key information: D KeyInf Ds Qualified D FldNbrRtn 10i 0 D KeyStr 20a Dim( %Elem( LstApi.KeyFld )) D FldInfLen 10i 0 Overlay( KeyStr: 1 ) D KeyFld 10i 0 Overlay( KeyStr: 5 ) D DtaTyp 1a Overlay( KeyStr: 9 ) D 3a Overlay( KeyStr: 10 ) D DtaLen 10i 0 Overlay( KeyStr: 13 ) D DtaOfs 10i 0 Overlay( KeyStr: 17 ) **-- Sort information: D SrtInf Ds Qualified D NbrKeys 10i 0 Inz( 0 ) D SrtStr 12a Dim( 4 ) D KeyFldOfs 10i 0 Overlay( SrtStr: 1 ) D KeyFldLen 10i 0 Overlay( SrtStr: 5 ) D KeyFldTyp 5i 0 Overlay( SrtStr: 9 ) D SrtOrd 1a Overlay( SrtStr: 11 ) D Rsv 1a Overlay( SrtStr: 12 ) **-- List information: D LstInf Ds Qualified D RcdNbrTot 10i 0 D RcdNbrRtn 10i 0 D Handle 4a D RcdLen 10i 0 D InfSts 1a D Dts 13a D LstSts 1a D 1a D InfLen 10i 0 D Rcd1 10i 0 D 40a **-- Selection information: D OLJS0200 Ds Qualified D JobNam 10a Inz( '*ALL' ) D UsrPrf 10a Inz( '*ALL' ) D JobNbr 6a Inz( '*ALL' ) D JobTyp 1a Inz( '*' ) D 1a D OfsPriSts 10i 0 Inz( 108 ) D NbrPriSts 10i 0 Inz( 2 ) D OfsActSts 10i 0 Inz( 128 ) D NbrActSts 10i 0 Inz( 0 ) D OfsJbqSts 10i 0 Inz( 136 ) D NbrJbqSts 10i 0 Inz( 0 ) D OfsJbqNam 10i 0 Inz( 146 ) D NbrJbqNam 10i 0 Inz( 1 ) D OfsCurUsr 10i 0 Inz( 166 ) D NbrCurUsr 10i 0 Inz( 0 ) D OfsSvrTyp 10i 0 Inz( 176 ) D NbrSvrTyp 10i 0 Inz( 0 ) D OfsActSbs 10i 0 Inz( 206 ) D NbrActSbs 10i 0 Inz( 0 ) D OfsMemPool 10i 0 Inz( 216 ) D NbrMemPool 10i 0 Inz( 0 ) D OfsJobTypE 10i 0 Inz( 220 ) D NbrJobTypE 10i 0 Inz( 0 ) D OfsJobNamQ 10i 0 Inz( 228 ) D NbrJobNamQ 10i 0 Inz( 0 ) ** D PriSts 10a Dim( 2 ) D ActSts 4a Dim( 2 ) D JbqSts 10a Dim( 1 ) D JbqNam 20a Dim( 1 ) D CurUsr 10a Dim( 1 ) D SvrTyp 30a Dim( 1 ) D ActSbs 10a Dim( 1 ) D MemPool 10i 0 Dim( 1 ) D JobTypE 10i 0 Dim( 1 ) D JobNamQ 26a Dim( 1 ) **-- Open list of job queues: D LstJobQs Pr ExtPgm( 'QSPOLJBQ' ) D RcvVar 65535a Options( *VarSize ) D RcvVarLen 10i 0 Const D FmtNam 8a Const D LstInf 80a D FltInf 32a Const Options( *VarSize ) D SrtInf 1024a Const Options( *VarSize ) D NbrRcdRtn 10i 0 Const D Error 1024a Options( *VarSize ) **-- Open list of jobs: D LstJobs Pr ExtPgm( 'QGYOLJOB' ) D RcvVar 65535a Options( *VarSize ) D RcvVarLen 10i 0 Const D FmtNam 8a Const D RcvVarDfn 65535a Options( *VarSize ) D RcvDfnLen 10i 0 Const D LstInf 80a D NbrRcdRtn 10i 0 Const D SrtInf 1024a Const Options( *VarSize ) D JobSltInf 1024a Const Options( *VarSize ) D JobSltLen 10i 0 Const D NbrFldRtn 10i 0 Const D KeyFldRtn 10i 0 Const Options( *VarSize ) Dim( 32 ) D Error 1024a Options( *VarSize ) D JobSltFmt 8a Const Options( *NoPass ) D ResStc 1a Const Options( *NoPass ) D GenRtnDta 32a Options( *NoPass: *VarSize ) D GenRtnDtaLn 10i 0 Const Options( *NoPass ) **-- Get open list entry: D GetOplEnt Pr ExtPgm( 'QGYGTLE' ) D RcvVar 65535a Options( *VarSize ) D RcvVarLen 10i 0 Const D Handle 4a Const D LstInf 80a D NbrRcdRtn 10i 0 Const D RtnRcdNbr 10i 0 Const D Error 1024a Options( *VarSize ) **-- Close list: D CloseLst Pr ExtPgm( 'QGYCLST' ) D Handle 4a Const D Error 1024a Options( *VarSize ) **-- Retrieve object description: D RtvObjD Pr ExtPgm( 'QUSROBJD' ) D RcvVar 32767a Options( *VarSize ) D RcvVarLen 10i 0 Const D FmtNam 8a Const D ObjNamQ 20a Const D ObjTyp 10a Const D Error 32767a Options( *VarSize ) **-- Copy memory: D memcpy Pr * ExtProc( '_MEMMOVE' ) D MemOut * Value D MemInp * Value D MemSiz 10u 0 Value **-- Send program message: D SndPgmMsg Pr ExtPgm( 'QMHSNDPM' ) D MsgId 7a Const D MsgFq 20a Const D MsgDta 128a Const D MsgDtaLen 10i 0 Const D MsgTyp 10a Const D CalStkE 10a Const Options( *VarSize ) D CalStkCtr 10i 0 Const D MsgKey 4a D Error 32767a Options( *VarSize ) **-- Open display application: D OpnDspApp Pr ExtPgm( 'QUIOPNDA' ) D AppHdl 8a D PnlGrp_q 20a Const D AppScp 10i 0 Const D ExtPrmIfc 10i 0 Const D FulScrHlp 1a Const D Error 32767a Options( *VarSize ) D OpnDtaRcv 128a Options( *NoPass: *VarSize ) D OpnDtaRcvLen 10i 0 Const Options( *NoPass ) D OpnDtaRcvAvl 10i 0 Options( *NoPass ) **-- Display panel: D DspPnl Pr ExtPgm( 'QUIDSPP' ) D AppHdl 8a Const D FncRqs 10i 0 D PnlNam 10a Const D ReDspOpt 1a Const D Error 32767a Options( *VarSize ) D UsrTsk 1a Const Options( *NoPass ) D CalStkCnt 10i 0 Const Options( *NoPass ) D CalMsgQue 256a Const Options( *NoPass: *VarSize ) D MsgKey 4a Const Options( *NoPass ) D CsrPosOpt 1a Const Options( *NoPass ) D FinLstEnt 4a Const Options( *NoPass ) D ErrLstEnt 4a Const Options( *NoPass ) D WaitTim 10i 0 Const Options( *NoPass ) D CalMsgQueLen 10i 0 Const Options( *NoPass ) D CalQlf 20a Const Options( *NoPass ) **-- Put dialog variable: D PutDlgVar Pr ExtPgm( 'QUIPUTV' ) D AppHdl 8a Const D VarBuf 32767a Const Options( *VarSize ) D VarBufLen 10i 0 Const D VarRcdNam 10a Const D Error 32767a Options( *VarSize ) **-- Get dialog variable: D GetDlgVar Pr ExtPgm( 'QUIGETV' ) D AppHdl 8a Const D VarBuf 32767a Options( *VarSize ) D VarBufLen 10i 0 Const D VarRcdNam 10a Const D Error 32767a Options( *VarSize ) **-- Add list entry: D AddLstEnt Pr ExtPgm( 'QUIADDLE' ) D AppHdl 8a Const D VarBuf 32767a Const Options( *VarSize ) D VarBufLen 10i 0 Const D VarRcdNam 10a Const D LstNam 10a Const D EntLocOpt 4a Const D LstEntHdl 4a D Error 32767a Options( *VarSize ) **-- Get list entry: D GetLstEnt Pr ExtPgm( 'QUIGETLE' ) D AppHdl 8a Const D VarBuf 32767a Const Options( *VarSize ) D VarBufLen 10i 0 Const D VarRcdNam 10a Const D LstNam 10a Const D PosOpt 4a Const D CpyOpt 1a Const D SltCri 20a Const D SltHdl 4a Const D ExtOpt 1a Const D LstEntHdl 4a D Error 32767a Options( *VarSize ) **-- Retrieve list attributes: D RtvLstAtr Pr ExtPgm( 'QUIRTVLA' ) D AppHdl 8a Const D LstNam 10a Const D AtrRcv 32767a Options( *VarSize ) D AtrRcvLen 10i 0 Const D Error 32767a Options( *VarSize ) **-- Set list attributes: D SetLstAtr Pr ExtPgm( 'QUISETLA' ) D AppHdl 8a Const D LstNam 10a Const D LstCon 4a Const D ExtPgmVar 10a Const D DspPos 4a Const D AlwTrim 1a Const D Error 32767a Options( *VarSize ) **-- Delete list: D DltLst Pr ExtPgm( 'QUIDLTL' ) D AppHdl 8a Const D LstNam 10a Const D Error 32767a Options( *VarSize ) **-- Close application: D CloApp Pr ExtPgm( 'QUICLOA' ) D AppHdl 8a Const D CloOpt 1a Const D Error 32767a Options( *VarSize ) **-- Get object library: D GetObjLib Pr 10a D PxObjNam_q 20a Const D PxObjTyp 10a Const **-- Send escape message: D SndEscMsg Pr 10i 0 D PxMsgId 7a Const D PxMsgF 10a Const D PxMsgDta 512a Const Varying D JWJQJC Pr D PxJobQue_q LikeDs( ObjNam_q ) ** D JWJQJC Pi D PxJobQue_q LikeDs( ObjNam_q ) /Free OpnDspApp( UIM.AppHdl : PNLGRP_Q : SCP_AUT_RCL : PRM_IFC_0 : HLP_WDW : ERRC0100 ); If ERRC0100.BytAvl > *Zero; If ERRC0100.BytAvl < OFS_MSGDTA; ERRC0100.BytAvl = OFS_MSGDTA; EndIf; SndEscMsg( ERRC0100.MsgId : 'QCPFMSG' : %Subst( ERRC0100.MsgDta: 1: ERRC0100.BytAvl - OFS_MSGDTA ) ); EndIf; PutDlgVar( UIM.AppHdl: ExpRcd: %Size( ExpRcd ): 'EXPRCD': ERRC0100 ); ExSr BldHdrRcd; ExSr BldJobLst; DoU UIM.FncRqs = FNC_EXIT Or UIM.FncRqs = FNC_CNL; DspPnl( UIM.AppHdl: UIM.FncRqs: PNLGRP: RDS_OPT_INZ: ERRC0100 ); Select; When UIM.FncRqs = RTN_ENTER; Leave; When UIM.FncRqs = KEY_F17; ExSr PosLstTop; When UIM.FncRqs = KEY_F18; ExSr PosLstBot; EndSl; GetDlgVar( UIM.AppHdl: HdrRcd: %Size( HdrRcd ): 'HDRRCD': ERRC0100 ); If UIM.FncRqs = KEY_F05 And UIM.EntLocOpt = 'NEXT'; ExSr GetLstPos; ExSr DltUsrLst; EndIf; If UIM.FncRqs = KEY_F05; ExSr BldJobLst; ExSr SetLstPos; EndIf; ExSr BldHdrRcd; EndDo; CloApp( UIM.AppHdl: CLO_NORM: ERRC0100 ); *InLr = *On; Return; BegSr BldJobLst; ExSr InzApiPrm; UIM.EntLocOpt = 'FRST'; LstApi.RtnRcdNbr = 1; LstJobs( OLJB0200 : %Size( OLJB0200 ) : 'OLJB0200' : KeyInf : %Size( KeyInf ) : LstInf : -1 : SrtInf : OLJS0200 : %Size( OLJS0200 ) : LstApi.NbrFldRtn : LstApi.KeyFld : ERRC0100 : 'OLJS0200' ); If ERRC0100.BytAvl = *Zero And LstInf.RcdNbrTot > *Zero; ExSr PrcLstEnt; DoW LstInf.RcdNbrTot > LstApi.RtnRcdNbr; LstApi.RtnRcdNbr += 1; GetOplEnt( OLJB0200 : %Size( OLJB0200 ) : LstInf.Handle : LstInf : 1 : LstApi.RtnRcdNbr : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Leave; EndIf; ExSr PrcLstEnt; EndDo; EndIf; CloseLst( LstInf.Handle: ERRC0100 ); SetLstAtr( UIM.AppHdl : 'DTLLST' : LIST_COMP : EXIT_SAME : POS_TOP : TRIM_SAME : ERRC0100 ); EndSr; BegSr PrcLstEnt; Clear KeyDta; For Idx = 1 To KeyInf.FldNbrRtn; KeyDtaVal = %SubSt( OLJB0200 : KeyInf.DtaOfs(Idx) + 1 : KeyInf.DtaLen(Idx) ); Select; When KeyInf.KeyFld(Idx) = 101; KeyDta.ActJobSts = KeyDtaVal; When KeyInf.KeyFld(Idx) = 305; KeyDta.CurUsr = KeyDtaVal; When KeyInf.KeyFld(Idx) = 402; KeyDta.JobEntDts = KeyDtaVal; When KeyInf.KeyFld(Idx) = 1004; KeyDta.JobQue_q = KeyDtaVal; When KeyInf.KeyFld(Idx) = 1005; KeyDta.JobPty = KeyDtaVal; When KeyInf.KeyFld(Idx) = 1016; memcpy( %Addr( KeyDta.JobTypE ) : %Addr( KeyDtaVal ) : %Size( KeyDta.JobTypE ) ); When KeyInf.KeyFld(Idx) = 1802; memcpy( %Addr( KeyDta.RunPty ) : %Addr( KeyDtaVal ) : %Size( KeyDta.RunPty ) ); When KeyInf.KeyFld(Idx) = 1903; KeyDta.JobQueSts = KeyDtaVal; When KeyInf.KeyFld(Idx) = 1904; KeyDta.SbmJob_q = KeyDtaVal; When KeyInf.KeyFld(Idx) = 1906; KeyDta.SbsNam_q = KeyDtaVal; EndSl; If KeyDta.JobQue_q > *Blanks And KeyDta.JobQue_q <> PxJobQue_q; Leave; EndIf; EndFor; If KeyDta.JobQue_q = PxJobQue_q; ExSr PutLstEnt; EndIf; EndSr; BegSr PutLstEnt; LstEnt.Option = *Zero; LstEnt.JobId = OLJB0200.JobId; LstEnt.JobNam = OLJB0200.JobNam; LstEnt.JobUsr = OLJB0200.UsrPrf; LstEnt.JobNbr = OLJB0200.JobNbr; LstEnt.JobTyp = OLJB0200.JobTyp; LstEnt.JobSts1 = OLJB0200.Status; LstEnt.JobPty = KeyDta.JobPty; LstEnt.EntDat = KeyDta.JobEntDat; LstEnt.EntTim = KeyDta.JobEntTim; LstEnt.SbmJob = KeyDta.SbmJobNam; LstEnt.SbmUsr = KeyDta.SbmJobUsr; LstEnt.SbmNbr = KeyDta.SbmJobNbr; Select; When OLJB0200.Status = '*ACTIVE'; LstEnt.CurUsr = KeyDta.CurUsr; LstEnt.JobSts2 = KeyDta.ActJobSts; When OLJB0200.Status = '*JOBQ'; LstEnt.CurUsr = OLJB0200.UsrPrf; LstEnt.JobSts2 = KeyDta.JobQueSts; Other; LstEnt.CurUsr = OLJB0200.UsrPrf; LstEnt.JobSts2 = *Blanks; EndSl; AddLstEnt( UIM.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : UIM.EntLocOpt : UIM.LstHdl : ERRC0100 ); UIM.EntLocOpt = 'NEXT'; EndSr; BegSr GetLstPos; RtvLstAtr( UIM.AppHdl: 'DTLLST': LstAtr: %Size( LstAtr ): ERRC0100 ); If LstAtr.DspPos <> 'TOP'; GetLstEnt( UIM.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : 'HNDL' : 'Y' : *Blanks : LstAtr.DspPos : 'N' : UIM.EntHdl : ERRC0100 ); LstEntPos = LstEnt; EndIf; EndSr; BegSr SetLstPos; If LstAtr.DspPos <> 'TOP'; LstEnt = LstEntPos; PutDlgVar( UIM.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : ERRC0100 ); GetLstEnt( UIM.AppHdl : LstEnt : %Size( LstEnt ) : '*NONE' : 'DTLLST' : 'FSLT' : 'N' : 'EQ JOBID' : LstAtr.DspPos : 'N' : UIM.EntHdl : ERRC0100 ); If ERRC0100.BytAvl = *Zero; SetLstAtr( UIM.AppHdl : 'DTLLST' : LIST_SAME : EXIT_SAME : UIM.EntHdl : TRIM_SAME : ERRC0100 ); EndIf; EndIf; EndSr; BegSr PosLstTop; SetLstAtr( UIM.AppHdl : 'DTLLST' : LIST_SAME : EXIT_SAME : POS_TOP : TRIM_SAME : ERRC0100 ); EndSr; BegSr PosLstBot; SetLstAtr( UIM.AppHdl : 'DTLLST' : LIST_SAME : EXIT_SAME : POS_BOT : TRIM_SAME : ERRC0100 ); EndSr; BegSr BldHdrRcd; SysDts = %Timestamp(); HdrRcd.SysDat = %Char( %Date( SysDts ): *CYMD0 ); HdrRcd.SysTim = %Char( %Time( SysDts ): *HMS0 ); HdrRcd.TimZon = '*SYS'; ExSr GetJobQueInf; HdrRcd.JobQue = OJBQ0100.JobQue; HdrRcd.JobQueLib = OJBQ0100.JobQueLib; HdrRcd.JobQueSts = OJBQ0100.JobQueSts; HdrRcd.ActSbs = OJBQ0100.ActSbs; PutDlgVar( UIM.AppHdl: HdrRcd: %Size( HdrRcd ): 'HDRRCD': ERRC0100 ); EndSr; BegSr GetJobQueInf; FltInf.JobQue_q = PxJobQue_q; FltInf.ActSbs = *Blanks; SrtInf.NbrKeys = *Zero; LstJobQs( OJBQ0100 : %Size( OJBQ0100 ) : 'OJBQ0100' : LstInf : FltInf : SrtInf : -1 : ERRC0100 ); If ERRC0100.BytAvl > *Zero Or LstInf.RcdNbrTot = *Zero; Reset OJBQ0100; EndIf; CloseLst( LstInf.Handle: ERRC0100 ); EndSr; BegSr DltUsrLst; DltLst( UIM.AppHdl: 'DTLLST': ERRC0100 ); EndSr; BegSr InzApiPrm; OLJS0200.PriSts(1) = '*ACTIVE'; OLJS0200.PriSts(2) = '*JOBQ'; OLJS0200.JbqNam(1) = PxJobQue_q; SrtInf.NbrKeys = 4; SrtInf.KeyFldOfs(1) = 43; SrtInf.KeyFldLen(1) = %Size( OLJB0200.Status ); SrtInf.KeyFldTyp(1) = CHAR_NLS; SrtInf.SrtOrd(1) = SORT_ASC; SrtInf.Rsv(1) = x'00'; SrtInf.KeyFldOfs(2) = 61; SrtInf.KeyFldLen(2) = %Size( KeyDta.JobQue_q ); SrtInf.KeyFldTyp(2) = CHAR_NLS; SrtInf.SrtOrd(2) = SORT_ASC; SrtInf.Rsv(2) = x'00'; SrtInf.KeyFldOfs(3) = 81; SrtInf.KeyFldLen(3) = %Size( KeyDta.JobPty ); SrtInf.KeyFldTyp(3) = CHAR_NLS; SrtInf.SrtOrd(3) = SORT_ASC; SrtInf.Rsv(3) = x'00'; SrtInf.KeyFldOfs(4) = 21; SrtInf.KeyFldLen(4) = %Size( OLJB0200.JobNbr ); SrtInf.KeyFldTyp(4) = NUM_ZON; SrtInf.SrtOrd(4) = SORT_ASC; SrtInf.Rsv(4) = x'00'; LstApi.KeyFld(1) = 1004; LstApi.KeyFld(2) = 1005; LstApi.KeyFld(3) = 402; LstApi.KeyFld(4) = 1906; LstApi.KeyFld(5) = 101; LstApi.KeyFld(6) = 305; LstApi.KeyFld(7) = 1016; LstApi.KeyFld(8) = 1802; LstApi.KeyFld(9) = 1903; LstApi.KeyFld(10) = 1904; EndSr; BegSr *InzSr; If PxJobQue_q.ObjLib = '*LIBL'; PxJobQue_q.ObjLib = GetObjLib( PxJobQue_q: '*JOBQ' ); EndIf; EndSr; /End-Free **-- Get object library: P GetObjLib B D Pi 10a D PxObjNam_q 20a Const D PxObjTyp 10a Const ** D OBJD0100 Ds Qualified D BytRtn 10i 0 D BytAvl 10i 0 D ObjNam 10a D ObjLib 10a D ObjTyp 10a D ObjLibRtn 10a D ObjASP 10i 0 D ObjOwn 10a D ObjDmn 2a /Free RtvObjD( OBJD0100 : %Size( OBJD0100 ) : 'OBJD0100' : PxObjNam_q : PxObjTyp : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Return *Blanks; Else; Return OBJD0100.ObjLibRtn; EndIf; /End-Free P GetObjLib E **-- Send escape message: P SndEscMsg B D Pi 10i 0 D PxMsgId 7a Const D PxMsgF 10a Const D PxMsgDta 512a Const Varying ** D MsgKey s 4a /Free SndPgmMsg( PxMsgId : PxMsgF + '*LIBL' : PxMsgDta : %Len( PxMsgDta ) : '*ESCAPE' : '*PGMBDY' : 1 : MsgKey : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Return -1; Else; Return 0; EndIf; /End-Free P SndEscMsg E //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWJQJE) FILETYPE(*SRC) ENDCHAR('//ENDSRC') ** ** Program . . : CBX158E ** Description : Work with Job Queue Jobs - UIM Exit Program ** Author . . : Carsten Flensburg ** Published . : Club Tech iSeries Programming Tips Newsletter ** Date . . . : July 13, 2006 ** ** ** ** Compile options: ** CrtRpgMod Module( CBX158E ) ** DbgView( *LIST ) ** ** CrtPgm Pgm( CBX158E ) ** Module( CBX158E ) ** ActGrp( *CALLER ) ** ** **-- Control specification: --------------------------------------------** H Option( *SrcStmt ) **-- System information: D PgmSts SDs Qualified D PgmNam *Proc D CurJob 10a Overlay( PgmSts: 244 ) D UsrPrf 10a Overlay( PgmSts: 254 ) D JobNbr 6a Overlay( PgmSts: 264 ) D CurUsr 10a Overlay( PgmSts: 358 ) **-- API error data structure: D ERRC0100 Ds Qualified D BytPrv 10i 0 Inz( %Size( ERRC0100 )) D BytAvl 10i 0 D MsgId 7a D 1a D MsgDta 512a **-- Global constants: D NULL c '' D NO_ENT c x'00000000' **-- UIM variables: D UIM Ds Qualified D EntHdl 4a **-- UIM constants: D APP_PRTF c 'QPRINT *LIBL' D ODP_SHR c 'N' D SPLF_NAM c 'PJOBQJOB' D SPLF_USRDTA c 'WRKJOBQJOB' D EJECT_NO c 'N' D CLO_NRM c 'M' D RES_OK c 0 D RES_ERR c 1 **-- UIM Panel header record: D HdrRcd Ds Qualified D SysDat 7a D SysTim 6a D TimZon 10a D JobQue 10a D JobQueLib 10a D JobQueSts 1a D ActSbs 10a **-- UIM API return structures: **-- Cursor record: D CsrRcd Ds Qualified D CsrEid 4a D CsrVar 10a D CsrNam 10a D CsrLst 10a D CsrPos 5i 0 **-- UIM List entry: D LstEnt Ds Qualified D Option 5i 0 D JobId 26a D JobNam 10a D JobUsr 10a D JobNbr 6s 0 D JobTyp 1a D JobSts1 7a D JobSts2 7a D JobPty 2a D EntDat 7a D EntTim 6a D CurUsr 10a D SbmJob 10a D SbmUsr 10a D SbmNbr 6s 0 **-- UIM exit program interfaces: **-- Parm interface: D UimExit Ds 70 Qualified D StcLvl 10i 0 D 8a D TypCall 10i 0 D AppHdl 8a **-- Function key - call: D Type1 Ds Qualified D StcLvl 10i 0 D 8a D TypCall 10i 0 D AppHdl 8a D PnlNam 10a D FncKey 10i 0 **-- Action list option/Pull-down field choice: D Type5 Ds Qualified D StcLvl 10i 0 D 8a D TypCall 10i 0 D AppHdl 8a D PnlNam 10a D LstNam 10a D LstEntHdl 4a D OptNbr 10i 0 D FncQlf 10i 0 D ActRes 10i 0 D PdwFldNam 10a **-- Get list entry: D GetLstEnt Pr ExtPgm( 'QUIGETLE' ) D AppHdl 8a Const D VarBuf 32767a Const Options( *VarSize ) D VarBufLen 10i 0 Const D VarRcdNam 10a Const D LstNam 10a Const D PosOpt 4a Const D CpyOpt 1a Const D SltCri 20a Const D SltHdl 4a Const D ExtOpt 1a Const D LstEntHdl 4a D Error 32767a Options( *VarSize ) **-- Update list entry: D UpdLstEnt Pr ExtPgm( 'QUIUPDLE' ) D AppHdl 8a Const D VarBuf 32767a Const Options( *VarSize ) D VarBufLen 10i 0 Const D VarRcdNam 10a Const D LstNam 10a Const D Option 4a Const D LstEntHdl 4a D Error 32767a Options( *VarSize ) **-- Remove list entry: D RmvLstEnt Pr ExtPgm( 'QUIRMVLE' ) D AppHdl 8a Const D LstNam 10a Const D ExtOpt 1a Const D LstEntHdl 4a D Error 32767a Options( *VarSize ) **-- Get dialog variable: D GetDlgVar Pr ExtPgm( 'QUIGETV' ) D AppHdl 8a Const D VarBuf 32767a Options( *VarSize ) D VarBufLen 10i 0 Const D VarRcdNam 10a Const D Error 32767a Options( *VarSize ) **-- Put dialog variable: D PutDlgVar Pr ExtPgm( 'QUIPUTV' ) D AppHdl 8a Const D VarBuf 32767a Const Options( *VarSize ) D VarBufLen 10i 0 Const D VarRcdNam 10a Const D Error 32767a Options( *VarSize ) **-- Print panel: D PrtPnl Pr ExtPgm( 'QUIPRTP' ) D AppHdl 8a Const D PrtPnlNam 10a Const D EjtOpt 1a Const D Error 32767a Options( *VarSize ) **-- Add print application: D AddPrtApp Pr ExtPgm( 'QUIADDPA' ) D AppHdl 8a Const D PrtDevF_q 20a Const D AltFilNam 10a Const D ShrOpnDtaPth 1a Const D UsrDta 10a Const D Error 32767a Options( *VarSize ) D OpnDtaRcv 128a Options( *NoPass: *VarSize ) D OpnDtaRcvLen 10i 0 Const Options( *NoPass ) D OpnDtaRcvAvl 10i 0 Options( *NoPass ) **-- Remove print application: D RmvPrtApp Pr ExtPgm( 'QUIRMVPA' ) D AppHdl 8a Const D CloOpt 1a Const D Error 32767a Options( *VarSize ) **-- Process commands: D PrcCmds Pr ExtPgm( 'QCAPCMD' ) D SrcCmd 32702a Const Options( *VarSize ) D SrcCmdLen 10i 0 Const D OptCtlBlk 20a Const D OptCtlBlkLn 10i 0 Const D OptCtlBlkFm 8a Const D ChgCmd 32767a Options( *VarSize ) D ChgCmdLen 10i 0 Const D ChgCmdLenAv 10i 0 D Error 32767a Options( *VarSize ) **-- Send program message: D SndPgmMsg Pr ExtPgm( 'QMHSNDPM' ) D MsgId 7a Const D MsgFq 20a Const D MsgDta 128a Const D MsgDtaLen 10i 0 Const D MsgTyp 10a Const D CalStkE 10a Const Options( *VarSize ) D CalStkCtr 10i 0 Const D MsgKey 4a D Error 32767a Options( *VarSize ) **-- Process command: D PrcCmd Pr 7a D CmdStr 1024a Const Varying **-- Send completion message: D SndCmpMsg Pr 10i 0 D PxMsgDta 512a Const Varying **-- Send escape message: D SndEscMsg Pr 10i 0 D PxMsgId 7a Const D PxMsgF 10a Const D PxMsgDta 512a Const Varying **-- Entry parameters: D JWJQJE Pr D PxUimExit LikeDs( UimExit ) ** D JWJQJE Pi D PxUimExit LikeDs( UimExit ) /Free Select; When PxUimExit.TypCall = 1; Type1 = PxUimExit; Select; When Type1.FncKey = 6; ExSr JobQueAct; When Type1.FncKey = 21; ExSr PrtJobPnl; When Type1.FncKey = 22; ExSr RunCsrAct; EndSl; When PxUimExit.TypCall = 5; Type5 = PxUimExit; If Type5.ActRes = RES_OK; Select; When Type5.OptNbr = 2; ExSr ChgLstEnt; When Type5.OptNbr = 3; ExSr HldLstEnt; When Type5.OptNbr = 4; ExSr DltLstEnt; When Type5.OptNbr = 6; ExSr RlsLstEnt; EndSl; EndIf; EndSl; Return; BegSr JobQueAct; GetDlgVar( Type1.AppHdl: HdrRcd: %Size( HdrRcd ): 'HDRRCD': ERRC0100); Select; When HdrRcd.JobQueSts = '1'; PrcCmd( 'HLDJOBQ JOBQ(' + %TrimR( HdrRcd.JobQueLib ) + '/' + %TrimR( HdrRcd.JobQue ) + ')' ); HdrRcd.JobQueSts = '0'; When HdrRcd.JobQueSts = '0'; PrcCmd( 'RLSJOBQ JOBQ(' + %TrimR( HdrRcd.JobQueLib ) + '/' + %TrimR( HdrRcd.JobQue ) + ')' ); HdrRcd.JobQueSts = '1'; EndSl; PutDlgVar( Type1.AppHdl: HdrRcd: %Size( HdrRcd ): 'HDRRCD': ERRC0100); EndSr; BegSr PrtJobPnl; AddPrtApp( Type1.AppHdl : APP_PRTF : SPLF_NAM : ODP_SHR : SPLF_USRDTA : ERRC0100 ); PrtPnl( Type1.AppHdl : 'PRTHDR' : EJECT_NO : ERRC0100 ); PrtPnl( Type1.AppHdl : 'PRTLST' : EJECT_NO : ERRC0100 ); RmvPrtApp( Type1.AppHdl : CLO_NRM : ERRC0100 ); SndCmpMsg( 'List has been printed.' ); EndSr; BegSr RunCsrAct; GetDlgVar( Type1.AppHdl : CsrRcd : %Size( CsrRcd ) : 'CSRRCD' : ERRC0100 ); If CsrRcd.CsrEid = NO_ENT Or CsrRcd.CsrVar <> 'JOBNAM'; SndEscMsg( 'CPD9820': 'QCPFMSG': NULL ); Else; GetLstEnt( Type1.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : 'HNDL' : 'Y' : *Blanks : CsrRcd.CsrEid : 'N' : UIM.EntHdl : ERRC0100 ); If LstEnt.JobSts1 <> '*ACTIVE'; SndEscMsg( 'CPD9820': 'QCPFMSG': NULL ); Else; PrcCmd( 'WRKACTJOB JOB(' + %TrimR( LstEnt.JobNam ) + ')' ); EndIf; EndIf; EndSr; BegSr ChgLstEnt; GetLstEnt( Type5.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : 'HNDL' : 'Y' : *Blanks : Type5.LstEntHdl : 'N' : UIM.EntHdl : ERRC0100 ); LstEnt.JobSts2 = 'Chg'; UpdLstEnt( Type5.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : 'SAME' : UIM.EntHdl : ERRC0100 ); EndSr; BegSr HldLstEnt; GetLstEnt( Type5.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : 'HNDL' : 'Y' : *Blanks : Type5.LstEntHdl : 'N' : UIM.EntHdl : ERRC0100 ); LstEnt.JobSts2 = 'Hld'; UpdLstEnt( Type5.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : 'SAME' : UIM.EntHdl : ERRC0100 ); EndSr; BegSr DltLstEnt; RmvLstEnt( Type5.AppHdl : 'DTLLST' : 'Y' : Type5.LstEntHdl : ERRC0100 ); EndSr; BegSr RlsLstEnt; GetLstEnt( Type5.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : 'HNDL' : 'Y' : *Blanks : Type5.LstEntHdl : 'N' : UIM.EntHdl : ERRC0100 ); LstEnt.JobSts2 = 'Rls'; UpdLstEnt( Type5.AppHdl : LstEnt : %Size( LstEnt ) : 'DTLRCD' : 'DTLLST' : 'SAME' : UIM.EntHdl : ERRC0100 ); EndSr; /End-Free **-- Process command: --------------------------------------------------** P PrcCmd B Export D Pi 7a D PxCmdStr 1024a Const Varying **-- Local variables: D CpOptCtlBlk Ds D CpTypPrc 10i 0 Inz( 2 ) D CpDBCS 1a Inz( '0' ) D CpPmtAct 1a Inz( '2' ) D CpCmdStx 1a Inz( '0' ) D CpMsgRtvKey 4a Inz( *Allx'00' ) D CpRsv 9a Inz( *Allx'00' ) ** D CpChgCmd s 32767a D CpChgCmdAvl s 10i 0 /Free PrcCmds( PxCmdStr : %Len( PxCmdStr ) : CpOptCtlBlk : %Size( CpOptCtlBlk ) : 'CPOP0100' : CpChgCmd : %Size( CpChgCmd ) : CpChgCmdAvl : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Return ERRC0100.MsgId; Else; Return *Blanks; EndIf; /End-Free P PrcCmd E **-- Send completion message: P SndCmpMsg B D Pi 10i 0 D PxMsgDta 512a Const Varying ** D MsgKey s 4a /Free SndPgmMsg( 'CPF9897' : 'QCPFMSG *LIBL' : PxMsgDta : %Len( PxMsgDta ) : '*COMP' : '*PGMBDY' : 1 : MsgKey : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Return -1; Else; Return 0; EndIf; /End-Free ** P SndCmpMsg E **-- Send escape message: P SndEscMsg B D Pi 10i 0 D PxMsgId 7a Const D PxMsgF 10a Const D PxMsgDta 512a Const Varying ** D MsgKey s 4a /Free SndPgmMsg( PxMsgId : PxMsgF + '*LIBL' : PxMsgDta : %Len( PxMsgDta ) : '*ESCAPE' : '*PGMBDY' : 1 : MsgKey : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Return -1; Else; Return 0; EndIf; /End-Free P SndEscMsg E //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWJQJH) FILETYPE(*SRC) ENDCHAR('//ENDSRC') .*-----------------------------------------------------------------------** .* .* Compile options: .* .* CrtPnlGrp PnlGrp( CBX158H ) .* SrcFile( QPNLSRC ) .* SrcMbr( CBX158H ) .* .*-----------------------------------------------------------------------** :PNLGRP. .* Command help section: :HELP NAME='JWJQJ'.Work with Job Queue Jobs - Help :P. The Work with Job Queue Jobs (JWJQJ) allows you to work with all jobs that have been submitted through the specified job queue and that have not yet completed. This implies that only jobs that are currently on the specified job queue, or have been on that job queue and are currently active, will be included in the list of jobs to work with. :P. The jobs are listed in job status followed by job queue priority and job number order. :EHELP. :HELP NAME='JWJQJ/JOBQ'.Job queue (JOBQ) - Help :XH3.Job queue (JOBQ) :P. Specify the name of the job queue whose jobs are to be worked with. :P. This is a required parameter. :P. :XH3.Library :P. Specify the name of the library where the job queue is located. :P. The possible values are: :P. :PARML. :PT.:PK DEF.*LIBL:EPK. :PD. All libraries in the library list for the current thread are searched until a match is found. :PT.:PK.*CURLIB:EPK. :PD. The current library for the thread is searched. If no library is specified as the current library for the thread, the QGPL library is searched. :PT.:PV.library-name:EPV. :PD. Specify the library where the job queue is located. :EPARML. :EHELP. .* Panel help section: :HELP NAME=HLPFKEYS. Function Keys - Help :XH3.Function keys :EHELP. :HELP NAME=HLPENT. :PARML. :PT.Enter :PD.Submits information on the display for processing. :EPARML. :EHELP. :HELP NAME=HLPF1. :PARML. :PT.F1=Help :PD.Provides additional information about using the display. :EPARML. :EHELP. :HELP NAME=HLPF3. :PARML. :PT.F3=Exit :PD.Ends the current task and returns you to the display from which the task was started. :EPARML. :EHELP. :HELP NAME=HLPF4. :PARML. :PT.F4=Prompt :PD.Provides assistance in entering or selecting a command. :EPARML. :EHELP. :HELP NAME=HLPF5. :PARML. :PT.F5=Refresh :PD.Shows the display you are viewing with updated information. :EPARML. :EHELP. :HELP NAME='HLPF6/JBQHLD'. :PARML. :PT.F6=Hold job queue :PD.Executes the Hold Job Queue (HLDJOBQ) command against the specified job queue. :EPARML. :EHELP. :HELP NAME='HLPF6/JBQRLS'. :PARML. :PT.F6=Release job queue :PD.Executes the Release Job Queue (RLSJOBQ) command against the specified job queue. :EPARML. :EHELP. :HELP NAME=HLPF9. :PARML. :PT.F9=Retrieve :PD.Displays the last command you entered on the command line and any parameters you included. Pressing this key once, shows the last command you ran. Pressing this key twice, shows the command you ran before that and so on. :EPARML. :EHELP. :HELP NAME='HLPF10'. :PARML. :PT.F10=Work with subsystem jobs :PD.Executes the Work with Subsystem Jobs (WRKSBSJOB) command against the subsystem that currently has the specified job queue allocated. :EPARML. :EHELP. :HELP NAME='HLPF11/VIEW1'. :PARML. :PT.F11=Display job origin :PD.Shows the list again displaying job origin information. :EPARML. :EHELP. :HELP NAME='HLPF11/VIEW2'. :PARML. :PT.F11=Display job status :PD.Shows the list again displaying job status information. :EPARML. :EHELP. :HELP NAME=HLPF12. :PARML. :PT.F12=Cancel :PD.Cancels processing of any options or changes you have made to the current display and returns you to the previous menu or display. :EPARML. :EHELP. :HELP NAME=HLPF17. :PARML. :PT.F17=Top :PD.Positions the display to the top of the list. :EPARML. :EHELP. :HELP NAME=HLPF18. :PARML. :PT.F18=Bottom :PD.Positions the display to the bottom of the list. :EPARML. :EHELP. :HELP NAME='HLPF20'. :PARML. :PT.F20=Work with job schedule entries :PD.Provides a view of job schedule entries for this job queue. That is, schedule information on future jobs that are to be submitted to job queue is displayed. When you choose this option, the Work with Job Schedule Entries (WRKJOBSCDE) command is run. :EPARML. :EHELP. :HELP NAME=HLPF21. :PARML. :PT.F21=Print list :PD.Prints the current list, including information from both views. The spooled file is sent to the output queue and can be viewed using the WRKJOB or WRKSPLF command. :EPARML. :EHELP. :HELP NAME=HLPF22. :PARML. :PT.F22=Work with active jobs :PD.Place the cursor on a job name and press F22 to have the WRKACTJOB command run for the specified job name. Only jobs currently having status *ACTIVE can have this function performed. :EPARML. :EHELP. :HELP NAME=HLPF24. :PARML. :PT.F24=More keys :PD.Changes the keys shown at the bottom of the display. When you press this key, additional function keys are displayed at the bottom of the display. :EPARML. :EHELP. :HELP NAME=HLPHLP. :PARML. :PT.Help :PD.Provides additional information about using the display. :EPARML. :EHELP. :HELP NAME=HLPPGD. :PARML. :PT.Page Down (Roll Up) :PD.Moves the information displayed forward to show additional information. :EPARML. :EHELP. :HELP NAME=HLPPGU. :PARML. :PT.Page Up (Roll Down) :PD.Moves the information displayed backward to show additional information. :EPARML. :EHELP. :HELP NAME=HLPPRT. :PARML. :PT.Print :PD.Prints information currently shown on the display. :EPARML. :EHELP. :HELP NAME='JWJQJ/'.Work with Job Queue Jobs - Help :P. The Work with Job Queue Jobs display shows the names, status and job initiation information of the jobs submitted through the specified job queue. :P. You can type an option next to one or more jobs. Then, when the Enter key is pressed, the function associated with the number you typed is performed for that job. :P. If you press the Enter key without typing any other data, you are returned to the previous menu or display. :P. You can type parameters on the command line if you want to override the defaults for the option(s) you typed. Typing parameters is valid only if you used one of the options. For example, you typed option 4 next to one or more jobs and you want to type OPTION(*IMMED) to change from the default, OPTION(*CNTRLD). :P. To run a command, type the command and press the Enter key. For assistance in typing the command, type the command and press F4. For assistance in selecting a command, press F4 without typing anything. :P. If you see More ... on the lower right side of your display, there is more information to view. Press Page Down (Roll Up) to move toward the end of the information. Press Page Up (Roll Down) to move toward the beginning of the information. :P. If you see Bottom instead of More ..., you are at the end of the list. :P. :EHELP. :HELP NAME='JWJQJ/JBQNAM'. Job queue - Help :XH3.Job queue :P. The name of the job queue whose jobs are listed. :EHELP. :HELP NAME='JWJQJ/JBQLIB'. Library - Help :XH3.Library :P. The library containing the specified job queue. :EHELP. :HELP NAME='JWJQJ/JBQSTS'. Job queue status - Help :XH3.Job queue status :P. The current status of the specified job queue. :EHELP. :HELP NAME='JWJQJ/ACTSBS'. Subsystem - Help :XH3.Subsystem :P. The name of the subsystem currently allocating the specified job queue. :EHELP. :HELP NAME='JWJQJ/OPTCHG'. :PARML. :PT.2=Change :PD.Use this option to run the Change Job (CHGJOB) command. If no value is specified on the Parameter's input field, current paramters are shown when you press the F4 (prompt) key. However, when values have been specified on the Parameters input field, the command is run without the prompt appearing when you press the key. :P. Similarly, when you press F4, the specified values are highlighted and current values are shown for the remaining parameters. The default of *SAME is shown only for parameters that do not make sense for the job). :P. 'Chg' is placed as the new value in the second part of the status field if the command runs successfully. It does not replace the entire status. :EPARML. :EHELP. :HELP NAME='JWJQJ/OPTHLD'. :PARML. :PT.3=Hold :PD.Use this option to hold the job. However, the job's spooled files are not held unless the default for the Hold spooled files (SPLFILE) parameter is overridden by using the Parameter's input field. :P. 'Hld' is placed as the new value in the second part of the status field if the command runs successfully. It does not replace the entire status. :EPARML. :EHELP. :HELP NAME='JWJQJ/OPTEND'. :PARML. :PT.4=End :PD.Use this option to run the End Job (ENDJOB) command. However, the job's spooled files are not deleted unless the default for the Delete spooled files (SPLFILE) parameter is overridden by using the Parameter's input field. Unless the OPTION parameter is overriden using the Parameter's input field, a controlled end is performed as if the End Job (ENDJOB) command were typed with all the default parameter assumed. :P. 'End' is placed as the new value in the second part of the status field if the command runs successfully. It does not replace the entire status. :EPARML. :EHELP. :HELP NAME='JWJQJ/OPTWRK'. :PARML. :PT.5=Work with :PD.This option runs the Work with Job (WRKJOB) command, which displays the Work with Job Menu. The Work with Job Menu allows you to select options to work with for the selected job. :P. In addition, the Work with Job Menu allows you to select options to change, end, hold, or release the job. :EPARML. :EHELP. :HELP NAME='JWJQJ/OPTRLS'. :PARML. :PT.6=Release :PD.Use this option to run the Release Job (RLSJOB) command, which releases the job if it is in the held condition. :P. 'Rls' is placed as the new value in the second part of the status field if the command runs successfully. It does not replace the entire status. :EPARML. :EHELP. :HELP NAME='JWJQJ/OPTSPL'. :PARML. :PT.8=Spooled files :PD.This option runs the Work with Job (WRKJOB) command, which displays the job's spooled output files. :EPARML. :EHELP. :HELP NAME='JWJQJ/OPTION'. Option - Help :XH3.Opt :P. Type the number of the option you want to specify. :EHELP. :HELP name='JWJQJ/JOBNAM'. Job - Help :XH3.Job :P. The simple name of the job. :EHELP. :HELP name='JWJQJ/JOBUSR'. User - Help :XH3.User :P. The user name identifies the user profile under which the job is started. :EHELP. :HELP name='JWJQJ/CURUSR'. Current user - Help :XH3.Current user :P. The user profile under which the job is currently running. The current user profile can be different from the user profile that initiated the job. :EHELP. :HELP name='JWJQJ/JOBTYP'. Type - Help :XH3.Type :P. The type of active job. Possible values are: :UL COMPACT. :LI.ASJ: Autostart :LI.BCH: Batch :LI.BCI: Batch Immediate :LI.EVK: Started by a procedure start request :LI.INT: Interactive :LI.M36: Advanced 36 server job :LI.MRT: Multiple requester terminal :LI.PJ: Prestart job :LI.PDJ: Print driver job :LI.RDR: Reader :LI.SBS: Subsystem monitor :LI.SYS: System :LI.WTR: Writer :EUL. :EHELP. :HELP name='JWJQJ/JOBPTY'. Job priority - Help :XH3.Job priority :P. Specifies the job queue scheduling priority. The highest priority is 1 and the lowest priority is 9. :EHELP. :HELP name='JWJQJ/JOBSTS'. Status - Help :XH3.Status :P. The current status of the job (in two fields). :EHELP. :HELP name='JWJQJ/ENTTIM'. Entered time - Help :XH3.Entered time :P. Specifies the time when the job was entered into the system. :EHELP. :HELP name='JWJQJ/SBMUSR'. Submitted by - Help :XH3.Submitted by :P. The user profile that submitted the job. :EHELP. :HELP name='JWJQJ/ENTDTS'. Entered system - Help :XH3.Entered system :P. The date and time when the job was entered into the system. :EHELP. :HELP name='JWJQJ/SBMBY'. Submitted by - Help :XH3.Submitted by :P. The name of the job and the user profile that submitted the job. :EHELP. :HELP name='CNFPNL/OPTION'. Opt - Help :XH3.Opt :P. This is the option field showing the end job option which causes the confirmation panel to be displayed. For this panel, the option number will always be 4. :EHELP. :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWJQJP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') .*-----------------------------------------------------------------------** .* .* Compile options: .* .* CrtPnlGrp PnlGrp( CBX158P ) .* SrcFile( QPNLSRC ) .* SrcMbr( *PNLGRP ) .* .*-----------------------------------------------------------------------** :PNLGRP. :COPYR. (C) Club Tech iSeries Programming Tips 2006. MODIFICATO Claudio Neroni .*-- Import help panel group: :IMPORT NAME='*' PNLGRP=JWJQJH. .*-- Class definitions: :CLASS NAME=CLACTION BASETYPE=ACTION WIDTH=1. :ECLASS. :CLASS NAME=CLEXITPG BASETYPE='CHAR 20'. :ECLASS. :CLASS NAME=CLCSREID BASETYPE='CHAR 4'. :ECLASS. :CLASS NAME=CLCSRVAL BASETYPE='CHAR 10'. :ECLASS. :CLASS NAME=CLCSRPOS BASETYPE='BIN 15'. :ECLASS. :CLASS NAME=CLOBJNAM BASETYPE='CHAR 10'. :ECLASS. :CLASS NAME=CLALTVIEW BASETYPE='BIN 15'. :ECLASS. :CLASS NAME=CLTIMZON BASETYPE='TIME ZONE'. :ECLASS. :CLASS NAME=CLTIME BASETYPE='TIME'. :ECLASS. :CLASS NAME=CLDATE BASETYPE='DATE 2'. :ECLASS. :CLASS NAME=CLCMDPRM BASETYPE='CHAR 255'. :ECLASS. :CLASS NAME=CLJOBID BASETYPE='CHAR 26'. :ECLASS. :CLASS NAME=CLJOBPTY BASETYPE='CHAR 2'. :ECLASS. :CLASS NAME=CLJOBNBR BASETYPE='ZONED 6 0'. :ECLASS. :CLASS NAME=CLJOBST2 BASETYPE='CHAR 7' WIDTH=7. :ECLASS. :CLASS NAME=CLACTSBS BASETYPE='CHAR 10'. :TL. :TI VALUE='" "'.*INACTIVE :ETL. :ECLASS. :CLASS NAME=CLJBQSTS BASETYPE='CHAR 1' WIDTH=9. :TL. :TI VALUE='"0"'.HLD :TI VALUE='"1"'.RLS :TI VALUE='"2"'.Damaged :TI VALUE='"3"'.Undefined :ETL. :ECLASS. :CLASS NAME=CLJOBTYP BASETYPE='CHAR 1' WIDTH=3. :TL. :TI VALUE='"A"'.ASJ :TI VALUE='"B"'.BCH :TI VALUE='"I"'.INT :TI VALUE='"M"'.SBS :TI VALUE='"R"'.RDR :TI VALUE='"S"'.SYS :TI VALUE='"W"'.WTR :TI VALUE='"X"'.SCP :TI VALUE='" "'. :ETL. :ECLASS. :CLASS NAME=CLJOBST1 BASETYPE='CHAR 7' WIDTH=7. :TL. :TI VALUE='"*JOBQ"' .JOBQ :TI VALUE='"*ACTIVE"'.ACTIVE :TI VALUE='"*OUTQ"' .OUTQ :ETL. :ECLASS. .*-- Variable definitions: :VAR NAME=OPTION CLASS=CLACTION. :VAR NAME=CSREID CLASS=CLCSREID. :VAR NAME=CSRVAR CLASS=CLCSRVAL. :VAR NAME=CSRNAM CLASS=CLCSRVAL. :VAR NAME=CSRLST CLASS=CLCSRVAL. :VAR NAME=CSRPOS CLASS=CLCSRPOS. :VAR NAME=EXITPG CLASS=CLEXITPG. :VAR NAME=DATE CLASS=CLDATE. :VAR NAME=TIMZON CLASS=CLTIMZON. :VAR NAME=CMDPRM CLASS=CLCMDPRM. :VAR NAME=ALTVIEW CLASS=CLALTVIEW. :VAR NAME=JBQNAM CLASS=CLOBJNAM. :VAR NAME=JBQLIB CLASS=CLOBJNAM. :VAR NAME=ACTSBS CLASS=CLACTSBS. :VAR NAME=JBQSTS CLASS=CLJBQSTS. :VAR NAME=JOBID CLASS=CLJOBID. :VAR NAME=JOBNAM CLASS=CLOBJNAM. :VAR NAME=JOBUSR CLASS=CLOBJNAM. :VAR NAME=JOBNBR CLASS=CLJOBNBR. :VAR NAME=JOBPTY CLASS=CLJOBPTY. :VAR NAME=JOBTYP CLASS=CLJOBTYP. :VAR NAME=JOBST1 CLASS=CLJOBST1. :VAR NAME=JOBST2 CLASS=CLJOBST2. :VAR NAME=ENTDAT CLASS=CLDATE. :VAR NAME=ENTTIM CLASS=CLTIME. :VAR NAME=CURUSR CLASS=CLOBJNAM. :VAR NAME=SBMJOB CLASS=CLOBJNAM. :VAR NAME=SBMUSR CLASS=CLOBJNAM. :VAR NAME=SBMNBR CLASS=CLJOBNBR. .*-- Variable record definitions: :VARRCD NAME=EXPRCD VARS='EXITPG'. :VARRCD NAME=CSRRCD VARS='CSREID CSRVAR CSRNAM CSRLST CSRPOS'. :VARRCD NAME=HDRRCD VARS='DATE TIMZON JBQNAM JBQLIB JBQSTS ACTSBS'. :VARRCD NAME=DTLRCD VARS='OPTION JOBID JOBNAM JOBUSR JOBNBR JOBTYP JOBST1 JOBST2' VARS='JOBPTY ENTDAT ENTTIM CURUSR SBMJOB SBMUSR SBMNBR'. .*-- List definition: :LISTDEF NAME=DTLLST VARS='OPTION JOBID JOBNAM JOBUSR JOBNBR JOBTYP JOBST1 JOBST2' VARS='JOBPTY ENTDAT ENTTIM CURUSR SBMUSR SBMJOB SBMNBR' MSGID=CPI0944 MSGF='QCPFMSG'. :LISTDEF NAME=CNFLST VARS='OPTION JOBID JOBNAM JOBUSR JOBNBR JOBTYP JOBST1 JOBST2' VARS='JOBPTY ENTDAT ENTTIM CURUSR SBMUSR SBMJOB'. .*-- Conditions: :COND NAME=SBSACT EXPR='ACTSBS *NE " "'. :COND NAME=JBQRLS EXPR='JBQSTS *EQ "1"'. :COND NAME=JBQHLD EXPR='JBQSTS *EQ "0"'. :COND NAME=VIEW1 EXPR='ALTVIEW = 0'. :COND NAME=VIEW2 EXPR='ALTVIEW = 1'. :TT NAME=PNLTT CONDS= 'JBQHLD JBQRLS VIEW1 VIEW2'. :TTROW VALUES=' 1 0 1 0 '. :TTROW VALUES=' 1 0 0 1 '. :TTROW VALUES=' 0 1 1 0 '. :TTROW VALUES=' 0 1 0 1 '. :ETT. .*-- Key definitions - main panel: :KEYL NAME=FKEYS HELP=HLPFKEYS. :KEYI KEY=ENTER HELP=HLPENT ACTION=ENTER. :KEYI KEY=F1 HELP=HLPF1 ACTION=HELP. :KEYI KEY=F3 HELP=HLPF3 ACTION='EXIT SET' VARUPD=NO .F3=Exit :KEYI KEY=F4 HELP=HLPF4 PRIORITY=30 ACTION=PROMPT .F4=Prompt :KEYI KEY=F5 HELP=HLPF5 PRIORITY=20 ACTION='RETURN 5' .F5=Refresh :KEYI KEY=F6 HELP='HLPF6/JBQHLD' COND=JBQRLS ACTION='CALL EXITPG' PRIORITY=20 .F6=Hold job queue :KEYI KEY=F6 HELP='HLPF6/JBQRLS' COND=JBQHLD ACTION='CALL EXITPG' PRIORITY=20 .F6=Release job queue :KEYI KEY=F9 HELP=HLPF9 PRIORITY=30 ACTION=RETRIEVE .F9=Retrieve :KEYI KEY=F10 HELP=HLPF10 PRIORITY=20 COND=SBSACT ACTION='CMD WRKSBSJOB SBS(&ACTSBS)' .F10=Work with subsystem jobs :KEYI KEY=F11 HELP='HLPF11/VIEW1' ACTION=CHGVIEW COND=VIEW1 PRIORITY=20 .F11=Display job origin :KEYI KEY=F11 HELP='HLPF11/VIEW2' ACTION=CHGVIEW COND=VIEW2 PRIORITY=20 .F11=Display job status :KEYI KEY=F12 HELP=HLPF12 ACTION='CANCEL SET' VARUPD=NO .F12=Cancel :KEYI KEY=F17 HELP=HLPF17 PRIORITY=40 ACTION='RETURN 17' VARUPD=NO .F17=Top :KEYI KEY=F18 HELP=HLPF18 PRIORITY=40 ACTION='RETURN 18' VARUPD=NO .F18=Bottom :KEYI KEY=F20 HELP=HLPF20 PRIORITY=40 ACTION='CMD WRKJOBSCDE JOBQ(&JBQLIB/&JBQNAM)' .F20=Work with job schedule entries :KEYI KEY=F21 HELP=HLPF21 ACTION='CALL EXITPG' PRIORITY=20 .F21=Print list :KEYI KEY=F22 HELP=HLPF22 PRIORITY=40 ACTION='CALL EXITPG' .F22=Work with active jobs :KEYI KEY=F24 HELP=HLPF24 ACTION=MOREKEYS .F24=More keys :KEYI KEY=HELP HELP=HLPHLP ACTION=HELP. :KEYI KEY=PAGEDOWN HELP=HLPPGD ACTION=PAGEDOWN. :KEYI KEY=PAGEUP HELP=HLPPGU ACTION=PAGEUP. :KEYI KEY=PRINT HELP=HLPPRT ACTION=PRINT. :EKEYL. .*-- Key definitions - confirmation panel: :KEYL NAME=CNFKEYS HELP=HLPFKEYS. :KEYI KEY=ENTER HELP=HLPENT ACTION=ENTER. :KEYI KEY=F1 HELP=HLPF1 ACTION=HELP. :KEYI KEY=F11 HELP='F11/VIEW1' ACTION=CHGVIEW COND=VIEW1 PRIORITY=30 .F11=Display job origin :KEYI KEY=F11 HELP='F11/VIEW2' ACTION=CHGVIEW COND=VIEW2 PRIORITY=30 .F11=Display job status :KEYI KEY=F12 HELP=HLPF12 ACTION='CANCEL SET' VARUPD=NO .F12=Cancel :KEYI KEY=HELP HELP=HLPHLP ACTION=HELP. :KEYI KEY=PAGEDOWN HELP=HLPPGD ACTION=PAGEDOWN. :KEYI KEY=PAGEUP HELP=HLPPGU ACTION=PAGEUP. :KEYI KEY=PRINT HELP=HLPPRT ACTION=PRINT. :EKEYL. .*-- Panel definition: :PANEL NAME=JWJQJP KEYL=FKEYS CSREID=CSREID CSRVAR=CSRVAR CSRNAME=CSRNAM CSRLST=CSRLST CSRPOS=CSRPOS ENTER='RETURN 500' HELP='JWJQJ/' TT=PNLTT TOPSEP=DATETIME DATE=DATE TIME=TIMZON .Work with Job Queue Jobs .*-- Data presentation area: :DATA DEPTH=3 LAYOUT=2 BOTSEP=SPACE. :DATACOL WIDTH=18. :DATACOL WIDTH='*'. :DATAGRP GRPSEP=QINDENT COMPACT. :DATAI VAR=JBQNAM USAGE=OUT HELP='JWJQJ/JBQNAM' .Job queue :DATAI VAR=JBQLIB USAGE=OUT HELP='JWJQJ/JBQLIB' .Library :EDATAGRP. :DATAGRP GRPSEP=NONE COMPACT. :DATAI VAR=JBQSTS USAGE=OUT HELP='JWJQJ/JBQSTS' .Job queue status :DATAI VAR=ACTSBS USAGE=OUT HELP='JWJQJ/ACTSBS' .Subsystem :EDATAGRP. :EDATA. .*-- List presentation area: :LIST DEPTH='*' LISTDEF=DTLLST MAXHEAD=2 VIEW=ALTVIEW ACTOR=UIM SCROLL=YES PARMS=CMDPRM. :TOPINST .Type options, press Enter. :LISTACT ENTER='CMD CHGJOB JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' PROMPT='CMD ?CHGJOB ?*JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' HELP='JWJQJ/OPTCHG' OPTION=2 NOCMD=PROMPT USREXIT='CALL EXITPG' .2=Change :LISTACT ENTER='CMD HLDJOB JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' PROMPT='CMD ?HLDJOB ?*JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' HELP='JWJQJ/OPTHLD' OPTION=3 USREXIT='CALL EXITPG' .3=Hold :LISTACT ENTER='CMD ENDJOB JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' PROMPT='CMD ?ENDJOB ?*JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' HELP='JWJQJ/OPTEND' OPTION=4 CONFIRM=CNFPNL USREXIT='CALL EXITPG' .4=End :LISTACT ENTER='CMD WRKJOB JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' PROMPT='CMD ?WRKJOB ?*JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' HELP='JWJQJ/OPTWRK' OPTION=5 .5=Work with :LISTACT ENTER='CMD RLSJOB JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' PROMPT='CMD ?RLSJOB ?*JOB(&JOBNBR/&JOBUSR/&JOBNAM) &CMDPRM' HELP='JWJQJ/OPTRLS' OPTION=6 USREXIT='CALL EXITPG' .6=Release :LISTACT ENTER='CMD WRKJOB JOB(&JOBNBR/&JOBUSR/&JOBNAM) ' ENTER='OPTION(*SPLF) &CMDPRM' PROMPT='CMD ?WRKJOB ?*JOB(&JOBNBR/&JOBUSR/&JOBNAM) ' PROMPT='?*OPTION(*SPLF) &CMDPRM' HELP='JWJQJ/OPTSPL' OPTION=8 .8=Spooled files :LISTCOL VAR=OPTION USAGE=INOUT MAXWIDTH=3 HELP='JWJQJ/OPTION' .Opt :LISTCOL VAR=JOBNAM USAGE=OUT MAXWIDTH=10 HELP='JWJQJ/JOBNAM' .Job :LISTCOL VAR=JOBUSR USAGE=OUT MAXWIDTH=10 HELP='JWJQJ/JOBUSR' .User :LISTCOL VAR=CURUSR USAGE=OUT MAXWIDTH=10 HELP='JWJQJ/CURUSR' .'Current' 'User' :LISTCOL VAR=JOBTYP USAGE=OUT MAXWIDTH=4 HELP='JWJQJ/JOBTYP' .Type :LISTCOL VAR=JOBPTY USAGE=OUT MAXWIDTH=7 HELP='JWJQJ/JOBPTY' .'Job' 'Pty' :LISTGRP COL=JOBSTS COLSEP=1 HELP='JWJQJ/JOBSTS' .Status :LISTCOL VAR=JOBST1 USAGE=OUT MAXWIDTH=7. :LISTCOL VAR=JOBST2 USAGE=OUT MAXWIDTH=7. :ELISTGRP. :LISTCOL VAR=ENTTIM USAGE=OUT MAXWIDTH=8 HELP='JWJQJ/ENTTIM' .'Entered' 'Time' :LISTCOL VAR=SBMUSR USAGE=OUT MAXWIDTH=10 HELP='JWJQJ/SBMUSR' .'Submitted' 'By' :LISTGRP COL=ENTDTS COLSEP=2 HELP='JWJQJ/ENTDTS' .Entered system :LISTCOL VAR=ENTDAT USAGE=OUT MAXWIDTH=8 .Date :LISTCOL VAR=ENTTIM USAGE=OUT MAXWIDTH=8 .Time :ELISTGRP. :LISTGRP COL=SBMBY COLSEP=2 HELP='JWJQJ/SBMBY' .Submitted by :LISTCOL VAR=SBMJOB USAGE=OUT MAXWIDTH=10 .Job :LISTCOL VAR=SBMUSR USAGE=OUT MAXWIDTH=10 .User :ELISTGRP. :LISTVIEW COLS='OPTION JOBNAM CURUSR JOBTYP JOBPTY JOBSTS ENTTIM SBMUSR'. :LISTVIEW COLS='OPTION JOBNAM JOBUSR JOBTYP ENTDTS SBMBY'. :ELIST. :CMDLINE SIZE=SHORT .Parameters or command :EPANEL. .*-- Panel definition: :PANEL NAME=CNFPNL KEYL=CNFKEYS ENTER='RETURN 100' HELP='CNFPNL/' TOPSEP=DATETIME DATE=DATE TIME=TIMZON .Confirm End of Job Queue Job .*-- List presentation area: :LIST DEPTH='*' LISTDEF=CNFLST MAXHEAD=2 VIEW=ALTVIEW SCROLL=YES. :TOPINST.Press Enter to confirm your choices of 4=End. :TOPINST.Press F12 to return to change your choices. :LISTCOL VAR=OPTION USAGE=OUT MAXWIDTH=3 HELP='CNFPNL/OPTION' .Opt :LISTCOL VAR=JOBNAM USAGE=OUT MAXWIDTH=10 HELP='JWJQJ/JOBNAM' .Job :LISTCOL VAR=JOBUSR USAGE=OUT MAXWIDTH=10 HELP='JWJQJ/JOBUSR' .User :LISTCOL VAR=CURUSR USAGE=OUT MAXWIDTH=10 HELP='JWJQJ/CURUSR' .'Current' 'User' :LISTCOL VAR=JOBTYP USAGE=OUT MAXWIDTH=4 HELP='JWJQJ/JOBTYP' .Type :LISTCOL VAR=JOBPTY USAGE=OUT MAXWIDTH=7 HELP='JWJQJ/JOBPTY' .'Job' 'Pty' :LISTGRP COL=JOBSTS COLSEP=1 HELP='JWJQJ/JOBSTS' .Status :LISTCOL VAR=JOBST1 USAGE=OUT MAXWIDTH=7. :LISTCOL VAR=JOBST2 USAGE=OUT MAXWIDTH=7. :ELISTGRP. :LISTCOL VAR=ENTTIM USAGE=OUT MAXWIDTH=8 HELP='JWJQJ/ENTTIM' .'Entered' 'Time' :LISTCOL VAR=SBMUSR USAGE=OUT MAXWIDTH=10 HELP='JWJQJ/SBMUSR' .'Submitted' 'By' :LISTGRP COL=ENTDTS COLSEP=2 HELP='JWJQJ/ENTDTS' .Entered system :LISTCOL VAR=ENTDAT USAGE=OUT MAXWIDTH=8 .Date :LISTCOL VAR=ENTTIM USAGE=OUT MAXWIDTH=8 .Time :ELISTGRP. :LISTGRP COL=SBMBY COLSEP=2 HELP='JWJQJ/SBMBY' .Submitted by :LISTCOL VAR=SBMJOB USAGE=OUT MAXWIDTH=10 .Job :LISTCOL VAR=SBMUSR USAGE=OUT MAXWIDTH=10 .User :ELISTGRP. :LISTVIEW COLS='OPTION JOBNAM CURUSR JOBTYP JOBPTY JOBSTS ENTTIM SBMUSR'. :LISTVIEW COLS='OPTION JOBNAM JOBUSR JOBTYP ENTDTS SBMBY'. :ELIST. :EPANEL. .*-- Print panel header definition: :PRTHEAD NAME=PRTHDR WIDTH=132 .Job Queue Job List :PRTTRAIL .E N D O F L I S T I N G :EPRTHEAD. .*-- Print panel detail definition: :PRTPNL NAME=PRTLST WIDTH=132. :DATA LAYOUT=2 BOTSEP=SPACE. :DATACOL WIDTH=24. :DATACOL WIDTH='*'. :DATAGRP GRPSEP=QINDENT COMPACT. :DATAI VAR=JBQNAM USAGE=OUT .Job queue :DATAI VAR=JBQLIB USAGE=OUT .Library :EDATAGRP. :DATAGRP GRPSEP=NONE COMPACT. :DATAI VAR=JBQSTS USAGE=OUT .Job queue status :DATAI VAR=ACTSBS USAGE=OUT .Subsystem :EDATAGRP. :EDATA. .*-- Print panel list definition: :LIST LISTDEF=DTLLST MAXHEAD=3 BOTSEP=NONE. :LISTCOL VAR=JOBNAM USAGE=OUT MAXWIDTH=10 .Job :LISTCOL VAR=JOBUSR USAGE=OUT MAXWIDTH=10 .User :LISTCOL VAR=JOBNBR USAGE=OUT MAXWIDTH=10 .Number :LISTCOL VAR=CURUSR USAGE=OUT MAXWIDTH=10 .'Current' 'User' :LISTCOL VAR=JOBTYP USAGE=OUT MAXWIDTH=4 .Type :LISTCOL VAR=JOBPTY USAGE=OUT MAXWIDTH=7 .'Job' 'Pty' :LISTGRP COL=JOBSTS COLSEP=1 .Status :LISTCOL VAR=JOBST1 USAGE=OUT MAXWIDTH=7. :LISTCOL VAR=JOBST2 USAGE=OUT MAXWIDTH=7. :ELISTGRP. :LISTGRP COL=ENTDTS COLSEP=2 .Entered system :LISTCOL VAR=ENTDAT USAGE=OUT MAXWIDTH=8 .Date :LISTCOL VAR=ENTTIM USAGE=OUT MAXWIDTH=8 .Time :ELISTGRP. :LISTGRP COL=SBMBY COLSEP=2 .Submitted by :LISTCOL VAR=SBMJOB USAGE=OUT MAXWIDTH=10 .Job :LISTCOL VAR=SBMUSR USAGE=OUT MAXWIDTH=10 .User :LISTCOL VAR=SBMNBR USAGE=OUT MAXWIDTH=7 .Number :ELISTGRP. :LISTVIEW COLS='JOBNAM JOBUSR JOBNBR CURUSR JOBTYP JOBPTY JOBSTS ENTDTS SBMBY'. :ELIST. :EPRTPNL. :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JWJQJV) FILETYPE(*SRC) ENDCHAR('//ENDSRC') ** ** Program . . : CBX158V ** Description : Work with Job Queue Jobs - validity checking program ** Author . . : Carsten Flensburg ** Published . : Club Tech iSeries Programming Tips Newsletter ** Date . . . : July 13, 2006 ** ** ** Program description: ** This program checks the existence of the specified object. ** ** ** Compile options: ** CrtRpgMod Module( CBX158V ) ** DbgView( *LIST ) ** ** CrtPgm Pgm( CBX158V ) ** Module( CBX158V ) ** ActGrp( *CALLER ) ** ** **-- Control specification: --------------------------------------------** H Option( *SrcStmt ) BndDir( 'QC2LE' ) **-- API error data structure: D ERRC0100 Ds Qualified D BytPrv 10i 0 Inz( %Size( ERRC0100 )) D BytAvl 10i 0 D ExcpId 7a D 1a D ExcpDta 512a **-- Global constants: D NULL c '' **-- Global variables: D ObjNam_q Ds D ObjNam 10a D ObjLib 10a **-- Retrieve object description: D RtvObjD Pr ExtPgm( 'QUSROBJD' ) D RcvVar 32767a Options( *VarSize ) D RcvVarLen 10i 0 Const D FmtNam 8a Const D ObjNamQ 20a Const D ObjTyp 10a Const D Error 32767a Options( *VarSize ) **-- Retrieve message description: D RtvMsgD Pr ExtPgm( 'QMHRTVM' ) D RcvVar 32767a Options( *VarSize ) D RcvVarLen 10i 0 Const D FmtNam 10a Const D MsgId 7a Const D MsgFq 20a Const D MsgDta 512a Const Options( *VarSize ) D MsgDtaLen 10i 0 Const D RplSubVal 10a Const D RtnFmtChr 10a Const D Error 32767a Options( *VarSize ) D RtvOpt 10a Const Options( *NoPass ) D CvtCcsId 10i 0 Const Options( *NoPass ) D DtaCcsId 10i 0 Const Options( *NoPass ) **-- Send program message: D SndPgmMsg Pr ExtPgm( 'QMHSNDPM' ) D MsgId 7a Const D MsgFq 20a Const D MsgDta 128a Const D MsgDtaLen 10i 0 Const D MsgTyp 10a Const D CalStkE 10a Const Options( *VarSize ) D CalStkCtr 10i 0 Const D MsgKey 4a D Error 1024a Options( *VarSize ) **-- Check object existence: D ChkObj Pr n D PxObjNam_q 20a Const D PxObjTyp 10a Const **-- Retrieve message: D RtvMsg Pr 4096a Varying D PxMsgId 7a Const D PxMsgDta 512a Const Varying **-- Send diagnostic message: D SndDiagMsg Pr 10i 0 D PxMsgId 7a Const D PxMsgDta 512a Const Varying **-- Send escape message: D SndEscMsg Pr 10i 0 D PxMsgId 7a Const D PxMsgDta 512a Const Varying **-- Entry parameters: D JWJQJV Pr D PxJobQue_q LikeDs( ObjNam_q ) ** D JWJQJV Pi D PxJobQue_q LikeDs( ObjNam_q ) /Free If ChkObj( PxJobQue_q: '*JOBQ' ) = *Off; SndDiagMsg( 'CPD0006' : '0000' + RtvMsg( 'CPF2105': PxJobQue_q + 'JOBQ' ) ); SndEscMsg( 'CPF0002': '' ); EndIf; *InLr = *On; Return; /End-Free **-- Check object existence: -------------------------------------------** P ChkObj B Export D Pi n D PxObjNam_q 20a Const D PxObjTyp 10a Const ** D OBJD0100 Ds Qualified D BytRtn 10i 0 D BytAvl 10i 0 D ObjNam 10a D ObjLib 10a D ObjTyp 10a /Free RtvObjD( OBJD0100 : %Size( OBJD0100 ) : 'OBJD0100' : PxObjNam_q : PxObjTyp : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Return *Off; Else; Return *On; EndIf; /End-Free P ChkObj E **-- Retrieve message: P RtvMsg B D Pi 4096a Varying D PxMsgId 7a Const D PxMsgDta 512a Const Varying ** D RTVM0100 Ds Qualified D BytRtn 10i 0 D BytAvl 10i 0 D RtnMsgLen 10i 0 D RtnMsgAvl 10i 0 D RtnHlpLen 10i 0 D RtnHlpAvl 10i 0 D Msg 4096a ** D RPL_SUB_VAL c '*YES' D NOT_FMT_CTL c '*NO' /Free RtvMsgD( RTVM0100 : %Size( RTVM0100 ) : 'RTVM0100' : PxMsgId : 'QCPFMSG *LIBL' : PxMsgDta : %Len( PxMsgDta ) : RPL_SUB_VAL : NOT_FMT_CTL : ERRC0100 ); Select; When ERRC0100.BytAvl > *Zero; Return NULL; When %Subst( RTVM0100.Msg: 1: RTVM0100.RtnMsgLen ) = PxMsgId; Return %Subst( RTVM0100.Msg : RTVM0100.RtnMsgLen + 1 : RTVM0100.RtnHlpLen ); Other; Return %Subst( RTVM0100.Msg: 1: RTVM0100.RtnMsgLen ); EndSl; /End-Free P RtvMsg E **-- Send diagnostic message: P SndDiagMsg B D Pi 10i 0 D PxMsgId 7a Const D PxMsgDta 512a Const Varying ** D MsgKey s 4a /Free SndPgmMsg( PxMsgId : 'QCPFMSG *LIBL' : PxMsgDta : %Len( PxMsgDta ) : '*DIAG' : '*PGMBDY' : 1 : MsgKey : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Return -1; Else; Return 0; EndIf; /End-Free P SndDiagMsg E **-- Send escape message: P SndEscMsg B D Pi 10i 0 D PxMsgId 7a Const D PxMsgDta 512a Const Varying ** D MsgKey s 4a /Free SndPgmMsg( PxMsgId : 'QCPFMSG *LIBL' : PxMsgDta : %Len( PxMsgDta ) : '*ESCAPE' : '*PGMBDY' : 1 : MsgKey : ERRC0100 ); If ERRC0100.BytAvl > *Zero; Return -1; Else; Return 0; EndIf; /End-Free P SndEscMsg E //ENDSRC //ENDBCHJOB