The main part of my question got lost. Here is a shell of my program.
Get current library list
Change library list
Run some stuff
Reset library list
However, if anything in "Run some stuff errors" and the program gets
CANCELLED, I need the library list to reset AND the program to abend. The
issue is that sometimes this program will run interactively and sometimes it
will run in batch. If it is interactive, I need the libl to be reset so the
user's job functions normally. If it is batch, I need the program to abend
so the job abends and the batch schedule doesn't continue.
I know there are a whole lot of hoops that can be jumped through with if
statements and CLs calling CLs and passing parms but I was looking for
something easier. For example, in C#.NET, I can do the following
Try
Run some stuff
Catch
Code to handle errors or leave blank and let it pass the error back
to whatever called it
Finally
The code in this block gets executed whether the try block is
successful or not
I was hoping IBM added some type of "Finally" logic to the CL language and I
didn't know about it. That way if an error happens and they cancel the
program, it would execute that block to clean it up.
-----Original Message-----
From: MIDRANGE-L <midrange-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of Vern
Hamberg via MIDRANGE-L
Sent: Tuesday, September 13, 2022 1:44 PM
To: midrange-l@xxxxxxxxxxxxxxxxxx
Cc: Vern Hamberg <vhamberg@xxxxxxxxxxxxxxx>
Subject: Re: Handling errors in CLLE programs
I do this kind of thing many times when I want to put things back to how I
found them when I came in the door.
RTVJOBA will let you retrieve the USRLIBL, among all the other things.
Do that early on.
I just found an example of just what you need in the documentation for
RTVJOBA - here it is -
/* Declare Variables */
DCL &LIBL *CHAR 2750
DCL &CHGLIBL *CHAR 2760
/* save library list */
RTVJOBA USRLIBL(&LIBL)
:
/* Temporarily change library list */
CHGLIBL LIBL(MYLIB QGPL)
:
/* Build command string */
CHGVAR &CHGLIBL ('CHGLIBL (' *CAT &LIBL *TCAT ')')
/* restore library list */
CALL QCMDEXC (&CHGLIBL 2760)
Cheers
'Vern
On 9/13/2022 11:36 AM, smith5646midrange@xxxxxxxxx wrote:
I have a program that modifies the libl and then does processing. If
the program errors, I want it to pop the message, wait for the
response, and then if the program is "C"ancelled, I want the libl
reset back to the original before it exits.
Is there something that I can put in the CL that will ALWAYS execute
this "library reset" no matter how the program ends? I know I can
MONMSG CPF0000 at the top of the CL but that seems to intercept the
original error. I can probably retrieve the message and its text
inside of the CPF0000 block and reissue it after the libl reset (I
need the program to abend so it halts the job's flow) but I was just
wondering if there was an easier way that I don't know about.
Thoughts?
--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list
To post a message email: MIDRANGE-L@xxxxxxxxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit:
https://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives at
https://archive.midrange.com/midrange-l.
Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related
questions.
Help support midrange.com by shopping at amazon.com with our affiliate link:
https://amazon.midrange.com
As an Amazon Associate we earn from qualifying purchases.