MainframeSupports
tip uge 02/2006:

Et af de største mysterier i JCL er den måde COND parameteren virker på. Meget få forstår, hvordan den virker. Jeg hører ikke til i denne udsøgte skare, men klarer mig med nogle få grundregler. For nylig blev jeg præsenteret for et COND problem, som vakte min nysgerrighed og jeg er blevet en del klogere. Med fare for at komme galt afsted vil jeg i det følgende prøve at lette tågerne omkring COND parameteren og dens virkemåde.

Min mest benyttede COND parameter er COND=(4,LT) på jobkortet. Efter hvert step i jobbet holdes returkoden (RC) fra steppet op mod denne COND parameter. Hvis RC<=4 får det efterfølgende step lov til at køre. Egentlig skal COND=(4,LT) oversættes til 4<RC, som er det samme som RC>4, altså det præcist modsatte. Det skyldes, at COND parameteren udtrykker betingelsen for at et step skal springes over. Hvad betyder COND=(0,NE) så? Det betyder 0<>RC eller RC<>0, og dermed, at steppet kun eksekveres, hvis RC=0. Grundreglen for fortolkning af COND parameteren er altså:

  1. Oversæt COND=(værdi,operator) til værdi operator RC
  2. Oversæt værdi operator RC til RC operator værdi. Husk at vende < til > og omvendt.
  3. Find den modsatte betingelse til RC operator værdi.

Nu har du betingelsen for, hvornår steppet med den pågældende COND parameter eksekveres, sådan næsten da. COND parameteren på JOB-kortet evalueres efter hvert step. Hvis den er opfyldt, så stopper jobbet lige med det samme. Også selv om COND parameten på et af de efterfølgende steps angiver, at steppet burde eksekveres. Men hvordan evalueres COND parameteren på et EXEC kort. På det første step ignoreres COND, fordi der ikke findes noget forudgående step. På det andet step evalueres COND parameteren meget naturligt mod RC fra det første step. Men hvad så med de efterfølgende steps? Her evalueres COND parameteren mod RC fra samtlige forudgående steps. Hvis COND parameteren er opfyldt for bare een af disse returkoder, ja så springes steppet over.

Tænk lige over ovenstående for en COND=(4,NE) (RC<>4). Hvis bare een af de forudgående steps har givet en returkode forskellig fra 4, så eksekveres steppet ikke. COND parameteren kan på EXEC kortet angives som COND=(værdi,operator,stepnavn) og så evalueres værdi,operator kun op mod RC fra stepnavn.

Og så til sidst et godt trick, hvis du vil afteste din COND parameter styring i et job. Se her:

//STEP0001 EXEC PGM=IDCAMS
//SYSPRINT DD DUMMY
//SYSIN    DD *
    SET MAXCC=4
/*
//STEP0002 EXEC PGM=IDCAMS,COND=(4,NE)
//SYSPRINT DD DUMMY
//SYSIN    DD *
    SET MAXCC=0
/*

IDCAMS kan returnere lige den returkode, du ønsker dig. Ovenstående to steps vil altid blive eksekveret, hvis de er de to første steps i et job, og der ikke er nogen COND parameter på JOB kortet. Her kan man nemt rette MAXCC parameteren i STEP0001 og straks vil man opdage, at STEP0002 ikke bliver eksekveret.

Forrige danske tip        Last tip in english        Tip oversigten