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.
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!