dcl-f ACCMSG1D workstn SFILE(SFL1 : rang);
// les procédures
dqcmdexc pr extpgm('QCMDEXC')
d 32705 const options(*varsize)
d 15 5 const
d cmd s 5000
d Format s 8
d RcvVarLen s 10i 0
dqusrjobi pr extpgm('QUSRJOBI')
//D JobiDta 32767A OPTIONS(*VARSIZE) Var Output
d dsjob like(dsjobdta)
D length 10I 0 CONST Length rec.variable
D APIformat 8 CONST Format name
D APIjob 26 CONST Qualified job name
D InternJob 16 CONST Internal job id
Ddsjobdta DS
D RtnLen 10I 0 Nbr bytes returned
D AvlLen 10I 0 Nbr bytes available
D JobNm 10A Job name
D UsrNm 10A User name
D JobNbr 6A Job number
D JobID 16A Inter job identifier
D JobSts 10A Job status
D JobType 1A Job type
D JobSType 1A Job subtype
D QuNm 10A Job queue name
D QuLb 10A Job queue lib name
D QuPty 2A Job queue priority
D OqNm 10A Output queue name
D OqLb 10A Output queue libname
D OqPty 2A Output queuepriority
D PrtDev 10A Printer device name
D SbmJnm 10A Submitter's job name
D SbmJUs 10A Submitter's usr name
D SbmJJb 6A Submitter's job nbr
D SbmJMsgqN 10A Submitter msg queue
D SbmJMsgwL 10A Submitter's msg queu
D SbmSts 10A Status of job
D SbmDte 8A Date and time job
D JobDte 7A Job date
// Les variables
dcl-s requete varchar(900);
dcl-s requete2 varchar(900);
dcl-s requete3 varchar(900);
dcl-s quotes char(1) INZ('''');
dcl-s rang packed(2);
dcl-s JOBQ char(10);
dcl-s NBRJOBS char(4);
dcl-s MAXJOB char(2);
DCL-S JOB char(10);
dcl-s NUM char(6);
dcl-s user char(10);
dcl-s pos1 int(3);
dcl-s pos2 int(3);
dcl-s pos3 int(3);
dcl-s pos4 int(3);
dcl-s pos5 int(3);
dcl-s var char(28);
dcl-s pos6 int(3);
dow not *IN03;
CHOIX = ' ';
rang=0 ;
*in98 = '1' ;
*in97 = '0' ;
write ctl1;
*in98 = '0' ;
*in97 = '1' ;
requete =
'SELECT JOB_NAME, SUBSYSTEM, JOB_STATUS FROM +
TABLE(QSYS2.ACTIVE_JOB_INFO()) where +
JOB_STATUS = ' + quotes + 'MSGW' +quotes +
' and SUBSYSTEM <> '+quotes+ 'ARCAD' +quotes ;
exec sql prepare r1 from :requete ;
exec sql declare C1 cursor for r1;
exec sql open C1;
exec sql fetch C1 into :NOMJOB,:SOUSYSTEME,:STATUT;
dow sqlcode = 0;
rang += 1 ;
pos1 = %scan('/' : NOMJOB);
pos2 = pos1 +1;
pos3 = %scan('/' : NOMJOB: pos2);
pos4 = pos3 +1;
pos5 = %scan('/' : NOMJOB: pos4);
pos6 = pos3 - 1;
NUM = %subst(NOMJOB : 1: (pos1 -1));
user = %subst(NOMJOB : pos2 : (pos6 -pos1));
JOB = %subst(NOMJOB : pos4 : (%len(NOMJOB)-pos3)) ;
var = %trim(JOB) +' '+%trim(user) + ' ' + %trim(NUM) ;
callp qusrjobi
(dsjobdta: %size(dsjobdta):'JOBI0300': %trim(var): ' ') ;
JOBQ = QuNm;
requete2 =
'SELECT NUMBER_OF_JOBS FROM qsys2.jobq_info +
where JOB_QUEUE_NAME = ' +quotes+JOBQ +quotes ;
exec sql prepare r2 from :requete ;
exec sql declare C2 cursor for r2;
exec sql open C2;
exec sql fetch C2 into :NBRJOBS ;
requete3 =
'SELECT NUMBER_OF_JOBS FROM qsys2.jobq_info where +
job_queue_name = ' +quotes+ JOBQ +quotes ;
exec sql prepare r3 from :requete ;
exec sql declare C3 cursor for r3;
exec sql open C3;
exec sql fetch C3 into :MAXJOB ;
write SFL1;
exec sql fetch C1 into :NOMJOB,:SOUSYSTEME,:STATUT;
ENDDO;
exec sql close C1;
if rang <> 0;
write RECORD1;
*in97 = '0' ;
exfmt ctl1;
readc sfl1;
if CHOIX = '5' ;
cmd = 'WRKJOB ' +%trim(NOMJOB) ;
qcmdexc(cmd:%len(cmd));
endif;
if CHOIX = '7';
cmd = 'DSPMSG MSGQ(*SYSOPR) MSGTYPE(*INQ) SEV(0)';
qcmdexc(cmd:%len(cmd));
ENDIF;
else;
exfmt ERR2;
leave;
endif;
enddo;
*inlr = *on;
Partager