TechTalk: Using Predefined Messages

System Administration
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Q: If you have messages defined with multiple parameters-like FILE, LIB and MEMBER parameters-how do you actually pass the variable data into those parameters from a CL program? Those parameters aren't really defined variables within your CL program. I can see how having just the &1 variable would work with the MSGDTA parameter, but how would it handle multiple variables?

A: Every time you have predefined substitution variables in a message description, the message description knows the format and length of each variable. Suppose you want to create a message description in MYLIB/MYMSGF which goes like this:

Program &1 in &2 not found.

This message description is to have an ID of PGM0001. This is the command you use to create the message description:

 ADDMSGD MSGID(PGM0001) + MSGF(MYLIB/MYMSGF) + MSG('Program &1 in &2 not + found.') + FMT((*CHAR 10) (*CHAR 10)) 

This means that, when you send PGM0001 with the Send Program Message

(SNDPGMMSG) command, the MSGDTA parameter's value will be assigned as follows:

the first 10 characters to &1, the next 10 characters to &2. Therefore:

 SNDPGMMSG MSGID(PGM0001) + MSGF(MYLIB/MYMSGF) + MSGDTA('PGM1 PRODLIB') + MSGTYPE(*DIAG) 

...sends PGM0001 as a diagnostic message, and will read: Program PGM1 in PRODLIB not found.

Optionally, you can use a CL variable in the MSGDTA parameter and set its value before running SNDPGMMSG. See 3. The &PGM and &LIB objects are both TYPE (*CHAR) LEN(10).

Optionally, you can use a CL variable in the MSGDTA parameter and set its value before running SNDPGMMSG. See Figure 3. The &PGM and &LIB objects are both TYPE (*CHAR) LEN(10).


TechTalk: Using Predefined Messages

Figure 3 Using Predefined Messages

 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(80) /* LEN(80) as example */ : CHKOBJ OBJ(&LIB/&PGM) OBJTYPE(*PGM) MONMSG MSGID(CPF9801) EXEC(DO) CHGVAR VAR(&MSGDTA) VALUE(&PGM *CAT &LIB) SNDPGMMSG MSGID(PGM0001) MSGF(MYLIB/MYMSGF) MSGDTA(&MSGDTA) + MSGTYPE(*ESCAPE) RETURN ENDDO 
BLOG COMMENTS POWERED BY DISQUS