ILE RPG Language Reference
To identify the user-written RPG IV subroutine that is to receive
control when a program exception/error occurs, specify *PSSR in factor
1 of the subroutine's BEGSR operation. If an indicator is not specified
in positions 73 and 74 for the operation code, or
if the operation does not have an (E) extender, or if the statement
is not in a MONITOR block that can handle the error, or if an
exception occurs that is not expected for the operation code (that
is, an array indexing error during a SCAN operation), control is
transferred to this subroutine when a program exception/error occurs.
In addition, the subroutine can also be called by the EXSR operation.
*PSSR can be specified on the INFSR keyword on the file description
specifications and receives control if a file exception/error occurs.
Any of the RPG IV operation codes can be used in the program
exception/error subroutine. The ENDSR operation must be the last
specification for the subroutine, and the factor 2 entry on the ENDSR
operation specifies the return point following the running of the
subroutine. For a discussion of the valid entries for factor 2,
see File Exception/Error Subroutine (INFSR).
Remember the following when specifying a program exception/error
subroutine:
- You can explicitly call the *PSSR subroutine by specifying *PSSR
in factor 2 of the EXSR operation.
- After the ENDSR operation of the *PSSR subroutine is run, the RPG IV
language resets the field, subfield, or array element specified in
factor 2 to blanks. This allows you to specify the return point within
the subroutine that is best suited for the exception/error that occurred.
If factor 2 contains blanks at the end of the subroutine, the RPG IV default
error handler receives control; if the subroutine was called by an
EXSR or CASxx operation, control returns to the next sequential instruction
following the EXSR or ENDCS.
- Because the program exception/error subroutine may receive control
whenever a non-file exception/error occurs, an exception/error could
occur while the subroutine is running. If an exception/error occurs
while the subroutine is running, the subroutine is called again;
this will result in a program loop unless the programmer codes the
subroutine to avoid this problem.
- If you have used the OPTIMIZE(*FULL) option on either the CRTBNDRPG
or the CRTRPGMOD command, you have to declare all fields that you
refer to during exception handling with the NOOPT keyword in the
definition specification for the field. This will ensure that when
you run your program, the fields referred to during exception handling
will have current values.
- A *PSSR can be defined in a subprocedure, and each subprocedure
can have its own *PSSR. Note that the *PSSR in a subprocedure is
local to that subprocedure. If you want the subprocedures to share
the same exception routine then you should have each *PSSR call a
shared procedure.
[ Top of Page | Previous Page | Next Page | Contents |
Index ]