Submitting jobs from within IBM i Control Language programs is EASY.
But sometimes we want to know the job name, or job queue, that the job was submitted with.
This is easy to do in CL, and since my colleague John “who’s surname cant be mentioned or else it will give him an internet presence alerting the FBI, NSA and YAKUZA who are all hunting him for various crimes committing during the 80’s” Doe asked me how to do it
So, here is a quick and simple example written in IBM i Control Language:
RCVMSG Example for SBMJOB
PGM
DCL VAR(&MSGDTA) TYPE(CHAR) LEN(100)
DCL VAR(&SBMJOB) TYPE(CHAR) LEN(10)
DCL VAR(&SBMJOBUSR) TYPE(CHAR) LEN(10)
DCL VAR(&SBMJOBNBR) TYPE(CHAR) LEN(6)
DCL VAR(&SBMJOBQ) TYPE(CHAR) LEN(10)
DCL VAR(&SBMJOBQLB) TYPE(CHAR) LEN(10)
SBMJOB CMD(DLYJOB DLY(1)) JOB(SOMETHING) /* submit a silly job that will do nothing */
RCVMSG PGMQ(*SAME) MSGQ(*PGMQ) MSGTYPE(*COMP) RMV(*NO) MSGDTA(&MSGDTA) /* retrieve last message from msg queue stack */
CHGVAR VAR(&SBMJOB) VALUE(%SST(&MSGDTA 1 10))
CHGVAR VAR(&SBMJOBUSR) VALUE(%SST(&MSGDTA 11 10))
CHGVAR VAR(&SBMJOBNBR) VALUE(%SST(&MSGDTA 21 6))
CHGVAR VAR(&SBMJOBQ) VALUE(%SST(&MSGDTA 27 10))
CHGVAR VAR(&SBMJOBQLB) VALUE(%SST(&MSGDTA 37 10))
RTVJOBA JOB(&SBMJOB) USER(&SBMJOBUSR) NBR(&SBMJOBNBR)
MONMSG MSGID(CPF0000) EXEC(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('ERROR
Unable to find submitted job' *BCAT +
&SBMJOBNBR *TCAT '/' *TCAT &SBMJOBUSR +
*TCAT '/' *TCAT &SBMJOB *TCAT ')') +
TOPGMQ(*PRV) MSGTYPE(*COMP)
RETURN /* add any error handling routines here */
ENDDO
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) +
MSGDTA('Submitted job was' *BCAT +
&SBMJOBNBR *TCAT '/' *TCAT &SBMJOBUSR +
*TCAT '/' *TCAT &SBMJOB *TCAT ', and it +
submitted using jobq(' *TCAT &SBMJOBQLB +
*TCAT '/' *TCAT &SBMJOBQ *TCAT ')') +
TOPGMQ(*PRV) MSGTYPE(*COMP)
ENDPGM
So, when we run this little program it submits a job (that does nothing other than delay for 1 second before gracefully ending) and then reads the last program message so it can snag the job details.
Then it just sends a program message with those details to our screen.
Simples
What is IBM CL?
IBM i Control Language (CL) is a powerful scripting language for the IBM AS/400, IBM iSeries and IBM i Systems. It’s got roots in the older IBM Job Control Language, and it works as a simple way to script commands, instructions and other functions into an easy-to-understand programs.
The code is missing “*” for *PRV, *COMP, *SAME, etc…
Thanks Ken – using WordPress for the website CMS, it will cut special characters when I paste code samples in. Nice catch – I’ve updated 😉