Anda di halaman 1dari 19

Basic Error Handling

Part 12

Presentation Copyright 2008, Bryan Meyers, www.bmeyers.net

Types of Errors
Program logic errors
Anticipated errors

Check to see if a file exists


Check for an object lock

Unexpected errors

Divide by zero
Program not found

System errors

Power failure
DASD failure

Error Messages
Program sends *ESCAPE message if error
occurs while executing a CL command
If program has no error handling mechanism
in place, it sends an inquiry (*INQ) message
for response
To user for interactive jobs
To system operator for batch jobs

Error Messages
Job log shows messages
DSPJOBLOG command
Escape message
Inquiry message
Reply
Diagnostic message

Error Messages
Press F1 to see additional information about a
message

Message Files
*MSGF object stores message descriptions

QCPFMSG is operating system message file


View contents with WRKMSGD command
CRTMSGF command will create a message file for
application messages
ADDMSGD command adds messages to a message file

Three parts to message


Message identifier

Prefix: E.g., CPF, MCH, RNQ, CBL


Message number (hex)

Message text
Message data

Message Files
WRKMSGD command displays message details

CHKOBJ Command
CHKOBJ determines whether an object exists
Object existence test (OBJ, OBJTYPE)
File member existence test (MBR)
Object authority test (AUT)

Sends escape message if test fails

CPF9801 Object not found


CPF9802 Not authorized to object
CPF9810 Library not found
CPF9815 Member not found
CPF9820 Not authorized to use library
CPF9830 Cannot assign library
CPF9899 Error occurred during processing of command

CHKOBJ Command

MONMSG Command
Monitors program for occurrence of *ESCAPE message
Specifies action to take when message appears
May prevent *INQ message

Three parameters
MSGID identifies message(s) to monitor
Up to 50 messages may be specified

CMPDTA allows comparison with specific message data


Rarely used

EXEC specifies single command to execute when message


appears
If no command is specified, message is ignored
MONMSG MSGID(CPF9801) EXEC(RETURN)
MONMSG CPF9801 EXEC(RETURN)

Command-Level MONMSG
Appears immediately following a command
MONMSG applies only to single command
Applies only to second CHKOBJ
PGM
CHKOBJ Mylib/Myfile *FILE
CHKOBJ Mylib/Myfile2 *FILE
MONMSG CPF9801 EXEC(CRTPF Mylib/Myfile2 RCDLEN(80))
CALL Mypgm
RETURN
ENDPGM

Program-Level MONMSG
Appears as first command in procedure
section of program
MONMSG applies to every command in
program
Unless command level MONMSG affects
command
Usually monitors for generic messages

Also called global message monitor


Can only execute GOTO command

Program-Level MONMSG
Applies to all commands
PGM
DCL
DCLF
MONMSG CPF9801 EXEC(GOTO End)
CHKOBJ MyLib/MyFile *FILE MBR(MyMbr1) AUT(*ALL)
CHKOBJ MyLib/MyFile *FILE MBR(MyMbr2) AUT(*ALL)
CALL MyPgm
End:

RETURN
ENDPGM

Mixed-Level MONMSGs
MONMSG can appear at both program level
and command level
Command level is considered first
PGM
MONMSG CPF0000 EXEC(GOTO ERRORS)
ADDLIBLE Mylib
MONMSG CPF2103
/* Already in list
*/
CHKOBJ Myfile *FILE
MONMSG CPF9801 EXEC(CRTPF Mylib/Myfile RCDLEN(80))
CALL Mypgm
RETURN
ERRORS:

DMPCLPGM
/* Dump the CL program */
MONMSG CPF0000
/* Just in case
*/
SNDPGMMSG MSG(Error occurred in program.)
RETURN
ENDPGM

Generic Message Monitor


MONMSG can specify up to 50 messages
Message identifier use 00 or 0000 to specify a
message range
CHKOBJ Myfile *FILE MBR(Mymbr) AUT(*ALL)
MONMSG (CPF9801 CPF9802) EXEC(GOTO ERRORS)
CHKOBJ Myfile *FILE MBR(Mymbr) AUT(*ALL)
MONMSG (CPF9800) EXEC(GOTO ERRORS) /* All errors beginning CPF98 */
CHKOBJ Myfile *FILE MBR(Mymbr) AUT(*ALL)
MONMSG (CPF0000) EXEC(GOTO ERRORS) /* All errors beginning CPF
CHKOBJ Myfile *FILE MBR(Mymbr) AUT(*ALL)
MONMSG (CPF0001 CPF9800 CPF9901 CPF9999) EXEC(GOTO ERRORS)

*/

Multiple MONMSG Commands


Several MONMSG commands can be specified
for a single command when different actions
are required for different errors
CHKOBJ Myfile *FILE MBR(Mymbr) AUT(*ALL)
MONMSG CPF9801 EXEC(CRTPF Mylib/Myfile RCDLEN(80))
MONMSG CPF9802 EXEC(GOTO ERRORS)

Errors within a MONMSG


By default, program-level MONMSG will
handle errors that occur for a command-level
MONMSG action
Use DO group to alter default behavior
Or to perform multiple MONMSG actions
CHKOBJ Myfile *FILE MBR(Mymbr) AUT(*ALL)
MONMSG CPF9801 EXEC(DO)
CRTPF Mylib/Myfile RCDLEN(80))
MONMSG CPF0000 EXEC(GOTO ERRORS)
ENDDO
MONMSG CPF9802 EXEC(GOTO ERRORS)

Ignoring Error Messages


If you do not specify a MONMSG EXEC action,
error is ignored
Program-level MONMSG should not usually
ignore messages
ADDLIBLE Mylib
MONMSG CPF2103

/* Already in library list */

Receiving Escape Messages


RCVMSG puts escape message text into
program variable
SNDPGMMSG can resend text to caller
PGM
DCL &msg *CHAR 80
MONMSG CPF0000 EXEC(GOTO ERROR)
ADDLIBLE Mylib
MONMSG CPF2103
/* Already in library list */
CHKOBJ Mylib/Myfile *FILE AUT(*ALL)
CALL Mypgm
RETURN
ERROR:

RCVMSG MSGTYPE(*LAST) MSG(&msg)


MONMSG CPF0000
/* Just in case */
SNDPGMMSG MSG(&msg)
MONMSG CPF0000
/* Just in case */
RETURN
ENDPGM

Anda mungkin juga menyukai