Use the Retrieve Job Attribute (RTVJOBA) command to snaffle the job’s run type from the attributes. Seems pretty obvious right?
One little niggle was that the RTVJOBA passes back a char(1) value for the jobtype where ‘0’ means batch and ‘1’ means interactive. But, I want to be able to neatly compare a logical value to see if its interactive or not.
For example:
- Stinky Code : if cond(&INTERACTIVE = ‘1’) then(do stuff)
- Sniffy Code : if cond(&INTERACTIVE) then(do stuff)
Luckily its quite easy to code in IBM i Control Language:
PGM
DCL VAR(&JOBTYPE) TYPE(CHAR) LEN(1) VALUE('0') /* Sadly the RTVJOBA command wants a CHARACTER value as a parameter (even though we want to use a logical *ON or *OFF) */
DCL VAR(&INTER) TYPE(LGL) STG(DEFINED) DEFVAR(&JOBTYPE) /* So lets define our logical variable but define it as the char(1) value so it inherits its value */
RTVJOBA TYPE(&JOBTYPE) /* grab the job runtype and let the *DEFINED overlay the character value &JOBTYPE into our logical value &INTER */
IF COND(&INTER) THEN(DO)
SNDPGMMSG MSG('this is interactive')
ENDDO
ELSE CMD(DO)
SNDPGMMSG MSG('this is batch')
ENDDO
RETURN
ENDPGM
Pretty sniffy I might say.
