× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



To expand on this - if you know the messages PGM1 will send (as *ESCAPE in order to be monotpred), then put a MONMSG after the call to PGM1 to catch them. In the MONMSG, use the EXEC parameter to execute a DO loop.

PGM
MONMSG MSGID(CPF0000) EXEC(GOTO ERROR)
CALL PGM1
MONMSG MSG0001 EXEC(DO)
GOTO SKIP
ENDDO
CALL PGM2
SKIP:
 RETURN
ERROR:
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('Unexpected errors detected, see +
messages in job log') TOPGMQ(*PRV *) +
TOMSGQ(*TOPGMQ) MSGTYPE(*ESCAPE)
ENDPGM

You would still have the generic handler for unexpected CPF* errors.

Now I prefer what I think someone else suggested - use a "return code" parameter, maybe as a *LGL if you are interested only in pass/fail.

PGM
DCL &ERROR *LGL
 MONMSG MSGID(CPF0000) EXEC(GOTO ERROR)
CALL PGM1 &ERROR
IF (*NOT &ERROR) DO
CALL PGM2
ENDDO
 RETURN
ERROR:
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('Unexpected errors detected, see +
messages in job log') TOPGMQ(*PRV *) +
TOMSGQ(*TOPGMQ) MSGTYPE(*ESCAPE)
ENDPGM

I also prefer always using DO/ENDDO blocks - just in case I might add code in the future.

HTH
Vern

On 12/18/2019 6:34 AM, Buck Calabro wrote:
On Wed, 18 Dec 2019 at 04:27, techie21 IT <techiei876@xxxxxxxxx> wrote:

For this I tried below code :-
PGM
MONMSG MSGID(CPF0000) EXEC(GOTO ERROR)
CALL PGM1
CALL PGM2
RETURN
ERROR:
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('Unexpected errors detected, see +
messages in job log') TOPGMQ(*PRV *) +
TOMSGQ(*TOPGMQ) MSGTYPE(*ESCAPE)
ENDPGM

but it is unnecessarily itrying to execute PGM2 whereas it did not bother
whether there were some errors found in PGM1 itself why is it happening
like this
The general approach seems fine, so that means the implementation is the issue.
In PGM1, how are the errors 'thrown'?
If they are not *ESCAPE messages, the MONMSG in the CLP will not be
asserted and execution will continue.
Perhaps the 'error messages' are *DIAG or *INFO?
If that is the case, you'll need to set up a RCVMSG loop between CALL
PGM1 and CALL PGM2 to receive these types of messages.

If this reply did not seem helpful, please post the RPG code that is
'throwing the error message', or even better, write an entirely new,
tiny RPG program that simply throws a message of the kind you want to
trap in the CLP and post that. This way the list can run the exact
same code that you are.

--buck


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.