Ü  MONMSG

·         The monitor message (MONMSG) command monitors for the escape/status/notification messages that exist in a program at run time and allows us to take the corrective action for those messages.

·         The messages are sent to the program message queue for the conditions specified in the command. If condition exists, the CL command specified on the MONMSG command runs.

·         It doesn’t handle diagnostic messages but we can receive those messages from the message queue to get additional information related to the error.

 

Ü   Types of monitor message

ü  Escape Message

ü  Status or Notify Message

·         Escape Message

Escape message are send to tell your program of an error condition that forced the sender to end the program. By monitoring for escape message, you can take corrective actions or end your program.

·         Status or Notify Message

Status and notify message are send to tell your program of an abnormal condition that is not serious enough for sender to end. By monitoring for status or notify message, your program can detect this condition and not allow the function to continue.

 

Ü   Two levels of MONMSG command

ü  Program level

ü  Specific command level

 

·         Program level

The MONMSG is specified immediately following the last declared command in the CL program.

It will catch all the error escape messages that exist in the program and doesn’t have satisfying command level MONMSG or doesn’t have any command level MONMSG.

·         Specific command level

Here the MONMSG command immediately follows a CL command. If there is any error at a particular CL statement and it satisfies the condition specified in MONMSG, then the error is caught with this MONMSG.

e.g. Suppose there are multiple places in our program where we checking for the existence of an object. So rather than defining the MONMSG at many places, we will simply put it at program level.

 

           

Ü Monitor message command syntax   

·         MONMSG  MSGID ( )  CMPDTA ( ) EXEC ( )

 

ü  MSGID-Required

   Ex: MSGID (MCH1211)

ü  CMPDTA –(Optional)

       Ex: MONMSG MSGID (MCH1211) CMPDTA (LIB)

ü  EXEC - -(Optional)

 

We can monitor for a specific message, e.g.

    MONMSG    MSGID (CPF9821)

 

 

Or we can monitor for a list of messages, e.g.

    MONMSG    MSGID (CPF9821 CPF9822 ……  CPF9830)

 

 

Now if we want to catch all the messages that start with CPF98.., then we can go for the below MONMSG:

  MONMSG    MSGID (CPF9800)

 

Now if we want to catch all the possible generic messages for CPF…., we can use the below MONMSG:

  MONMSG    MSGID (CPF0000)

 

To have more generic message monitor, we can go for:

  MONMSG    MSGID (CPF0000 MCH0000) EXEC (GOTO ERROR)

 

 

Example


Columns . . . :    1 100                     Browse                           IROBO1/QRPGLESRC
 SEU==>                                                                              MONMSG_CL
 FMT **  ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+.
        *************** Beginning of data ****************************************************
0001.00 PGM
0002.00     DCLF       FILE(ACCOUNT) OPNID(ID1)
0003.00     DCL        VAR(&COUNT) TYPE(*DEC) LEN(2) VALUE(0)
0004.00     DCL        VAR(&CHAR) TYPE(*CHAR) LEN(3) VALUE(' ')
0005.00     DCL        VAR(&DSP) TYPE(*CHAR) LEN(35) VALUE(' ')
0006.00     MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))  >>>>> Program level MONMSG
0007.00
0008.00     ADDLIBLE   IROBO1
0009.00     MONMSG     MSGID(CPF2103)   >>> This MONMSG checks if the library already exists, if it does
0010.00                                    don’t do anything, just let the program continue.
0011.00
0012.00     CHKOBJ     OBJ(*LIBL/ACCOUNT) OBJTYPE(*FILE) MBR(*FIRST)
0013.00     MONMSG     MSGID(CPF9801) EXEC(GOTO CMDLBL(ERROR))
0014.00
0015.00     /* READ THE FILE AND TAKE THE RECORD COUNT*/
0016.00     READ:
0017.00     RCVF       OPNID(ID1)
0018.00     MONMSG     MSGID(CPF0864) EXEC(GOTO CMDLBL(END))
0019.00     CHGVAR     VAR(&COUNT) VALUE(&COUNT+1)
0020.00     CHGVAR     VAR(&CHAR) VALUE(&COUNT)
0021.00     GOTO       READ
0022.00
0023.00 ERROR:
0024.00              SNDPGMMSG   MSG('THERE IS SOME ERROR, CHECK THE PROGRAM')
0025.00
0026.00 END:
0027.00              CLOF       OPNID(ID1)
0028.00              MONMSG     MSGID(CPF4520)
0029.00              CHGVAR     VAR(&DSP) VALUE('TOTAL RECORD COUNT IS  ' +
0030.00                           *CAT &CHAR)
0031.00              SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA(&DSP)
0032.00
0033.00 ENDPGM
        ****************** End of data ****************************************************

 

 

 

OUTPUT

 


                           Work with Members Using PDM                 PUB1    
                                                                               
 File  . . . . . .   QRPGLESRC                                                 
   Library . . . .     IROBO1               Position to  . . . . .             
                                                                               
 Type options, press Enter.                                                    
  2=Edit         3=Copy  4=Delete 5=Display       6=Print     7=Rename         
  8=Display description  9=Save  13=Change text  14=Compile  15=Create module...
                                                                               
 Opt  Member      Type        Text                                             
      MONMSG_CL   CLP         MONMSG DEMOSTRATION                              
 
 
 
                                                                        More...
 Parameters or command                                                         
 ===>                                                                          
 F3=Exit          F4=Prompt             F5=Refresh            F6=Create        
 F9=Retrieve      F10=Command entry     F23=More options      F24=More keys    
 TOTAL RECORD COUNT IS  019.                                                   

 

 





User Comments:





Copyright © Go4as400.com, 2013-2017. Copyright notice