On 27-Sep-2016 18:01 -0500, Jerry Draper wrote:
In our backup routine we do a:
    SAVLIB *ALLUSR
    SAVDLO
    SAV (ifs)
  That looks like what I recall to be a GO SAVE Option-23.  Is that 
source code available like for GO SAVE Option-21?  Might be easiest and 
most informative to customize that, if available; NB that the code that 
is available for save entire system would have all of those save 
operations also, but would include the additional system parts of the 
save activity.  Hopefully somebody can direct you to those sources; I 
can not recall and I likely do not the required authority to RTVCLSRC 
even if I did.
We want to monitor the SAVLIB for CPF3777 (not all libs saved) and
ignore it
However we want to monitor for any other message and do a SNDPGMMSG
if that happens.
How can we do this?
Like this?
    PGM
    SAVLIB *ALLUSR
    MONMSG CPF3777
    MONMSG CPF0000 EXEC(SNDPGMMSG blah blah)
    SAVDLO
    MONMSG CPF0000 EXEC(SNDPGMMSG blah blah)
    SAV (ifs)
    MONMSG CPF0000 EXEC(SNDPGMMSG blah blah)
    ENDPGM
  That works, but an EXEC(CALLSUBR SND_DIAG) might be cleaner esp. if 
the same message will be sent; or the even just the same SNDPGMMSG is 
used but with just a different MsgID [and MsgDta].  Then before the 
ENDPGM, optionally add a SNDPGMMSG conditioned by an indicator that was 
set whenever a prior Diagnostic was sent by that subroutine, that sends 
an Escape message to inform that at least one request failed [other 
than, or possibly including the ignored condition for which the same 
setting-on of that same indicator could occur in the MONMSG CPF3777]
    or this:
    PGM
    MONMSG CPF0000 EXEC(SNDPGMMSG blah blah)
  Anything other than a GOTO for EXEC in that context [i.e. in a Global 
Monitor; those before the first executable [and necessarily after the 
declarative section], is disallowed per the msg CPD0899 "EXEC parameter 
in MONMSG must be GOTO command."
    SAVLIB *ALLUSR
    MONMSG CPF3777
    SAVDLO
    SAV (ifs)
    ENDPGM
  That coding would be similar to the CALLSUBR suggested earlier, but 
implemented via a GOTO Label rather than a subroutine label.  For what I 
infer is expressed as desired effect, I would *not recommend* this 
approach; instead to use the prior example, for both of the following 
reasons:
 • lack of /variable/ label targets of GOTO; given I infer that after 
the /error/ and sending a diagnostic message, the code should continue 
with the next statement of the save activity, a SELECT\ENDSELECT to set 
a to determine to what label the GOTO should return based on a 
phase-of-processing is not pretty [though I had coded them many times in 
the past before subroutines arrived, or sometimes I coded such a 
consistent list of work\statements as interpreted requests processed in 
a loop]
 • exception looping is a potential issue; easy enough to avoid, but 
effectively ends up adding another MONMSG CPF0000 to most everything 
else within the handler -- the mainline processing is cleaner, but the 
rest, not so much. I like to use a CALLSUBR to do the repetitive stuff 
if possible.
    Jerry
  --
  If the above three characters between the double-quotes " --" was 
intended to be the signature delimiter that enables the following text 
to be auto-trimmed by email&NNTP clients like mine [and trimmed from the 
archived message], then the proper way to have done so would be to have 
the line written _instead_, as having only these three characters 
between the double-quotes: "-- "
  --
  Jerry Draper, Trilobyte Software Systems, since 1976
  IBMi, Network, and Connectivity Specialists, LAN/WAN/VPN
  Representing WinTronix, Synapse, HiT, and others .....
  (415) 457-3431; [1]www.trilosoft.com
As an Amazon Associate we earn from qualifying purchases.