× 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.



Of course given a CLP performing so much & probably complex work, there should be well-defined & recoverable phases. As well, use of QTEMP to make a backup copy of a master file that is going to be deleted does not fit into any _reasonable_ design, except where the DROP is under commitment control such that a ROLLBACK has the file coming back. Often such complex "scripts" implemented as CLP would set a "phase" of processing both internally & externally, such that both retry & restart features are possible; implemented with an effective select\case statement with GOTO or CALLSUBR of the appropriate phase, for lack of variable target\entry points in a CLP.

Poor programming is poor programming. Having a global monitor [to replace the language-specific default monitor\handler] is not inherently poor programming, only for misuse [i.e. negative outcome for whatever was the use] of the feature. In the following rewrite, an interruption\failure in "RecreateMasterFile" leaves a not-found error condition for the rename on its retry, but with review of the code and with the inquiry after emailing failure details, just like with a CPA0701 someone can "undo" the prior rename and reply to the inquiry to "retry" the failing phase; by review of the failure, the developer may decide to add a separate phase or logic to recover from a failure in that phase of processing.

<code>
MONMSG CPF0000 EXEC(GOTO ErrStuff)
...
rtvdtaara MYLIB/AppDtaAra &phase
RestartAt:
if &phaseCode *ne '000000' then(do)
select
when (&phaseCode *eq '009040') then(goto p009040)
...
otherwise ...
endselect
enddo
...
Page 20
...
p009040: chgvar &phase '009040:ReCreateMasterFile'
callsubr setphase
RNMOBJ MYLIB/MASTERFILE *FILE MASTERBKUP
CALL ProgramToRecreateMasterFile
...
p011080: chgvar &phase '011080:DeleteMasterBkup'
callsubr setphase
DLTF MYLIB/MASTERBKUP
...
Page 27
...
return
setphase: subr setphase
chgdtaara MYLIB/AppDtaAra &phase
...
endsubr
errstuff:
if &terminated then(do)
dmpclpgm
monmsg cpf0000
dspjoblog output(*print)
monmsg cpf0000
return /* prevent loop */
enddo
else do(chgvar &terminated '1')
/* handle errors with pretty email */
callsubr SndInqWait rtnval(&RorC)
If (&RorC *eq 'R') then(goto RestartAt)
...
</code>

Regards, Chuck

rob@xxxxxxxxx wrote:
Sample

MONMSG CPF0000 GOTO(ERRSTUFF)
...
Page 20
...
CPYF MYLIB/MASTERFILE QTEMP/WORKFILE...
DLTF MYLIB/MASTERFILE
CALL ProgramToRecreateMasterFile
...
Page 27
...
goto end
errstuff:
/* handle errors with pretty email */
end:

Now, instead of taking an R when ProgramToRecreateMasterFile blew
up I have no MASTERFILE. And my QTEMP copy of WORKFILE is gone.
But at least I have pretty email.

The other problem is that developers often get lazy by relying upon the generic top level MONMSG and errors go on for years
unnoticed - seen that. But that's mostly without the goto.


As an Amazon Associate we earn from qualifying purchases.

This thread ...


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.