|
Scott -->
Thanks -- it worked perfectly for what I wanted to do.
Mike
----- Original Message -----
From: "Scott Klement" <klemscot@xxxxxxxxxxxx>
To: "RPG programming on the AS400 / iSeries" <rpg400-l@xxxxxxxxxxxx>
Sent: Tuesday, April 08, 2003 1:08 PM
Subject: Re: Determining jobs running in a subsystem...
>
> >
> > I need a quick, down & dirty way to determine the number of jobs running
in
> > a specific subsystem, then displaying the information on the screen. I
was
> > looking at calling a command from the RPG program, sending the output to
a
> > spooled file & processing it, but I did not want to have to process a
> > spooled file in that way. Anyone else have any ideas and/or examples?
> >
>
> That's a good choice! Processing a spooled file is a bad idea, because
> IBM can change the format of a spooled file at any time, breaking your
> program. Using an API protects you from that.
>
> Here's a sample that uses the QUSLJOB API. The QGYOLJOB API might
> also work, but I don't have a sample of that that I can send you.
>
> H DFTACTGRP(*NO)
>
> *
> * List jobs API
> *
> D QUSLJOB PR ExtPgm('QUSLJOB')
> D UsrSpc 20A const
> D Format 8A const
> D QualJob 26A const
> D Status 10A const
> D ErrorCode 32767A options(*varsize)
> D JobType 1A const options(*nopass)
> D NumFldsToRtn 10I 0 const options(*nopass)
> D FldsToRtn 10I 0 const options(*nopass)
>
> *
> * Create User Space API
> *
> D QUSCRTUS PR ExtPgm('QUSCRTUS')
> D UserSpc 20A const
> D ExtAttr 10A const
> D InitSize 10I 0 const
> D InitVal 1A const
> D PublicAuth 10A const
> D Text 50A const
> D Replace 10A const
> D ErrorCode 32766A options(*varsize)
>
> *
> * retrieve pointer to user space API
> *
> D QUSPTRUS PR ExtPgm('QUSPTRUS')
> D UserSpc 20A CONST
> D Pointer *
>
> *
> * API error code structure
> * (we inz to 0 to cause the APIs to return errors using normal
> * OS/400 error handling)
> *
> D dsEC DS
> D dsECBytesP 10I 0 INZ(0)
> D dsECBytesA 10I 0 INZ(0)
>
> D*****************************************************
> D* List API header data structure
> D*****************************************************
> D p_UsrSpc S *
> D dsLH DS BASED(p_UsrSpc)
> D* Filler
> D dsLHFill1 103A
> D* Status
(I=Incomplete,C=Complete
> D* F=Partially Complete)
> D dsLHStatus 1A
> D* Filler
> D dsLHFill2 12A
> D* Header Offset
> D dsLHHdrOff 10I 0
> D* Header Size
> D dsLHHdrSiz 10I 0
> D* List Offset
> D dsLHLstOff 10I 0
> D* List Size
> D dsLHLstSiz 10I 0
> D* Count of Entries in List
> D dsLHEntCnt 10I 0
> D* Size of a single entry
> D dsLHEntSiz 10I 0
>
> D p_Job S *
> D dsJob DS based(p_Job)
> D dsJobName 10A
> D dsJobUser 10A
> D dsJobNbr 6A
> D dsJobIntID 16A
> D dsJobSts 10A
> D dsJobType 1A
> D dsJobSubType 1A
> D dsJobReserv 2A
> D dsJobInfSts 1A
> D dsJobReserv2 3A
> D dsJobNbrFlds 10I 0
> D dsJobKeyAry 1A
>
> D p_KeyAry S *
> D dsKeyAry DS based(p_KeyAry)
> D dsKA_Len 10I 0
> D dsKA_Field 10I 0
> D dsKA_Type 1A
> D dsKA_Reserv 3A
> D dsKA_DtaLen 10I 0
> D dsKA_Data 20A
>
> D JOBLIST C 'JOBLIST QTEMP'
> D SBSDNAME C 1906
>
> D peSbsName S 10A
> D msg s 50A
> D Ent s 10I 0
>
>
> *
> * Check parms
> *
> C *entry plist
> c parm peSbsName
>
> c if %parms < 1
> c eval msg = 'You need to pass a subsystem
name'
> c dsply msg
> c eval *inlr = *on
> c return
> c endif
>
>
> *
> * Create a user space
> *
> c callp QUSCRTUS(JOBLIST: 'USRSPC':
> c %size(dsJob) * 1000: *Blank:
> c '*ALL': 'List of jobs on system':
> c '*YES': dsEC)
>
>
> *
> * List jobs to the user space
> *
> c callp QUSLJOB(JOBLIST: 'JOBL0200':
> c '*ALL *ALL *ALL':
'*ACTIVE':
> c dsEC: '*': 1: SBSDNAME)
>
>
> *
> * Read entries in user space
> *
> c callp QUSPTRUS(JOBLIST: p_UsrSpc)
>
> c for Ent = 0 to (dsLHEntCnt - 1)
>
> c eval p_Job = p_UsrSpc + dsLHLstOff +
> c (dsLhEntSiz * Ent)
> c eval p_KeyAry = %addr(dsJobKeyAry)
>
> c if dsKA_Field <> SBSDNAME
> c or dsKA_Type <> 'C'
> c or dsKA_DtaLen <> 20
> c eval msg = 'Unknown key in key array'
> c dsply msg
> c leave
> c endif
>
> ** only print jobs in requested subsystem.
> ** and ignore subsystem monitor jobs.
> c if %subst(dsKA_Data: 1: 10) = peSbsName
> c and dsJobType <> 'M'
> c eval msg = %trim(dsJobNbr) + '/' +
> c %trim(dsJobUser) + '/' +
> c %trim(dsJobName)
> c msg dsply
> c endif
>
> c endfor
>
> c eval msg = 'Hit ENTER when done'
> c dsply msg
> c eval *inlr = *on
> _______________________________________________
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>
>
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.