Take Two: Where Did I Come From?
May 4, 2005 Hey, Ted
The “Where Did I Come From?” tip is a good article. To expand upon it, we sometimes have cases where a job was submitted to job queue A and then moved to job queue B. The QUSRJOBI API will then return job queue B. The joblog will just show CPC1129, “Job number/user/jobname changed by userprofile”. I don’t know of any way to retrieve the value of job queue A from within the active program, but there are a couple of ways of tracking its true origins.
1. This is what we use. Turn on auditing for the *JOBQ object, like this:
CHGOBJAUD OBJ(QUSRSYS/QBATCH) OBJTYPE(*JOBD) OBJAUD(*CHANGE)
System value QAUDLVL must have the value *SECURITY, and QAUDCTL may need both *OBJAUD and *AUDLVL–I’m not sure if both are needed. This will cause entries to be put on the system audit journal, QAUDJRN, when a job is put into or removed from that job queue. The entry will be journal code T, entry type ZC. Access type 1 is adding a job to the queue, 17 is deleting or moving the job.
Make a copy of file QSYS/QASYZCJ4 and dump the journal entries:
DSPJRN QAUDJRN JRNCDE((T)) ENTTYP(ZC) OUTPUT(*OUTFILE) OUTFILFMT(*TYPE4) OUTFILE(MyLib/CopyOfFile)
Then just query the file.
2. Use the QIBM_QWT_JOBNOTIFY exit point, which writes to a data queue.
Both methods must manually be set up whenever a new job queue is created (unless you attach a program to the CRTJOBQ command, I suppose). There may be other methods as well.
Best wishes,
–Ken
There is another, more versatile way to determine which job queue an active job is running from.
WRKUSRJOB USER(*ALL) JOBTYPE(*BATCH) ASTLVL(*BASIC)
This command shows all active batch jobs grouped by job queue. It also shows all waiting jobs and what sequence they will run in.
Keep up the good work!
–Tim
RELATED STORY