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.