Sorry, my cut and paste went awry.  Should be this:

//EP4IN  PROC
//STEP01 EXEC PGM=IEFBR14,COND=(20,LT)
//STEP01A  EXEC PGM=IEFBR14,COND=(20,LT)
//STEP02 EXEC PGM=EPZOS,COND=(20,LT)
//STEP03   EXEC PGM=IDCAMS,COND=(7,LT)
//STEP04   EXEC PGM=EPTBLUPD
//  IF ( STEP04.RC = 3 ) THEN
//STEP05 EXEC PGM=IEBGENER,COND=((7,LT),(4,LT,STEP03),(4,LT,STEP04))
//  ENDIF
//  IF ( STEP04.RC = 0 | STEP04.RC = 4 ) THEN
//STEPLAST EXEC EPLINK99
//  ENDIF
//STEP06 EXEC PGM=IEBGENER,COND=(24,LT)
//STEP07 EXEC PGM=EPX99,COND=(20,LT)
//EP4IN  PEND


Anyway, I did totally misunderstand how COND works when executing a PROC rather 
than a PGM. Thanks!

As for mixing IF/THEN/ELSE with COND, as I said, its a vendor supplied PROC. 
Definitely don't want to mess with it.  But it looks like you're saying I can 
use IF/THEN logic to skip the EP4IN step if the BACKUP1 step fails.  So I will 
do that.
As much as I hate COND, at least it "fits" within how JCL otherwise looks, 
which is more than I can say for IF/THEN/ELSE!  Oh well!

Thanks again,
Frank





>________________________________
> From: Joel C. Ewing <jcew...@acm.org>
>To: IBM-MAIN@bama.ua.edu 
>Sent: Wednesday, April 18, 2012 1:14 PM
>Subject: Re: JCL help (yes, with COND)
> 
>On 04/18/2012 12:43 PM, Frank Swarbrick wrote:
>> I have the following job (cut down to include only the relevant parts):
>>
>>
>> //VAPPROC4 JOB
>> //BACKUP1  EXEC PROC=SORTBKUP,COND=(4,LT)
>> //EP4IN    EXEC PROC=EP4IN,COND=(4,LT)
>> //E4INPRT  EXEC PROC=E4INPRT
>> //
>>
>>
>> The EP4IN PROC is a vendor supplied proc as follows:
>>
>>
>> //EP4IN  PROC
>> //STEP01 EXEC PGM=IEFBR14,COND=(20,LT)
>> //STEP01A  EXEC PGM=IEFBR14,COND=(20,LT)
>> //STEP02 EXEC PGM=EPZOS,COND=(20,LT)
>> //STEP03   EXEC PGM=IDCAMS,COND=(7,LT)
>> //STEP04   EXEC PGM=EPTBLUPD
>> //  IF ( STEP04.RC = 3 ) THEN
>> //STEP05 EXEC PGM=IEBGENER,COND=((7,LT),(4,LT,STEP03),(4,LT,STEP04))
>> //  ENDIF
>> //  IF ( STEP04.RC = 0 | STEP04.RC = 4 ) THEN
>> //STEPLAST EXEC EPLINK99
>> //  ENDIF
>> //EP4IN  PEND
>> //STEP06 EXEC PGM=IEBGENER,COND=(24,LT)
>> //STEP07 EXEC PGM=EPX99,COND=(20,LT)
>> //EP4IN  PROC
>>
>> I've already solved my issue (which I will detail below), but I'm still 
>> unclear as to why what I had was wrong, and why my fix actually fixes it.
>>
>> The issue is that EP4IN.STEP06 and EP4IN.STEP07 were not being executed:
>>
>> IEF202I VAPPROC4 STEP06 EP4IN - STEP WAS NOT RUN BECAUSE OF CONDITION CODES
>> IEF272I VAPPROC4 STEP06 EP4IN - STEP WAS NOT EXECUTED.
>>
>> IEF202I VAPPROC4 STEP07 EP4IN - STEP WAS NOT RUN BECAUSE OF CONDITION CODES
>> IEF272I VAPPROC4 STEP07 EP4IN - STEP WAS NOT EXECUTED.
>>
>> STEPNAME PROCSTEP    RC
>> BACKUP1  BACKUP      00
>> EP4IN    STEP01      00
>> EP4IN    STEP01A     00
>> EP4IN    STEP02      00
>> EP4IN    STEP03      05
>> EP4IN    STEP04   FLUSH
>> EP4IN    STEP05   FLUSH
>> STEPLAST STEP16   FLUSH
>> STEPLAST STEP17   FLUSH
>> EP4IN    STEP06   FLUSH
>> EP4IN    STEP07   FLUSH
>>
>> (It's expected that EP4IN.STEP04, EP4IN.STEP05, STEPLAST.STEP16 and 
>> STEPLAST.STEP17 do not execute under these conditions, becasue EP4IN.STEP03 
>> resulted in RC=05; they execute only when RC=03 for this step.)
>>
>> Anyway, the solution is to remove the COND parameter from the "EXEC 
>> PROC=EP4IN".
>> My new result follows:
>>
>> BACKUP1  BACKUP      00
>> EP4IN    STEP01      00
>> EP4IN    STEP01A     00
>> EP4IN    STEP02      00
>> EP4IN    STEP03      05
>> EP4IN    STEP04   FLUSH
>> EP4IN    STEP05   FLUSH
>> STEPLAST STEP16   FLUSH
>> STEPLAST STEP17   FLUSH
>> EP4IN    STEP06      00
>> EP4IN    STEP07      00
>> E4INPRT  REPORT      00
>>
>> What really was the issue and why did my solution resolve it?
>> My reason for including this parameter is so that EP4IN should be bypassed 
>> if BACKUP1 fails.
>>
>> Once again I ponder the sanity of the inventor of COND.
>>
>> Thanks,
>> Frank
>>
>
>The EP4IN PROC seems to have an embedded PEND and then a spurious PROC 
>statement at the end (where the PEND should be ?).  I suspect  the 
>problem is that combining COND on an EXEC PROC with embedded use of COND 
>inside a PROC does not interact well and seldom does what one might 
>expect/want.  The COND on the "EXEC PROC" statement does not determine 
>whether that EXEC is performed -- it instead overrides the COND 
>parameter on every EXEC within the PROC and determines when steps within 
>the PROC will be executed, completely ignoring any original carefully 
>thought out conditional logic using COND on EXECs within the PROC 
>definition itself.
>
>As a side issue, mixing IF/THEN/ELSE conditional execution with use of 
>COND is so highly confusing, we always recommended not introducing the 
>new forms without converting old EXEC COND usage to IF/THEN/ELSE 
>statements at the same time (except possibly for COND on the JOB 
>statement).  Also one can use IF/THEN/ELSE in the main JCL stream 
>without the bizarre override issues you get with COND on the "EXEC PROC".
>
>-- 
>Joel C. Ewing,    Bentonville, AR      jcew...@acm.org    
>
>----------------------------------------------------------------------
>For IBM-MAIN subscribe / signoff / archive access instructions,
>send email to lists...@bama.ua.edu with the message: INFO IBM-MAIN
>
>
>

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: INFO IBM-MAIN

Reply via email to