MainframeSupports
tip uge 49/2003:

En af de rigtig gode ting ved MVS er, at man kan sende batchjobs afsted, så man kan arbejde videre online, mens batchjobbet udfører et eller andet længerevarende stykke arbejde. De fleste af os benytter ganske givet ISPF EDIT til at lave batchjobbet i og SUBMIT kommandoen til at sende batchjobbet afsted med. Hvis jeg ofte skal benytte det samme batchjob, men med små forandringer, eksempelvis et ændret datasetnavn, så laver jeg typisk noget ISPF File Tailoring til at opbygge jobbet med. File Tailoering er sådan set ganske smart, men nogle gange lidt omstændeligt, især hvis man skal bruge det i batch.

En dag blev det for meget for mig, specielt på grund af, at jeg havde brug for at submitte jobs lavet til OPC. OPC jobs er typisk fyldt med &variable, som OPC ved submit oversætter til noget, der bliver til rigtig JCL. Disse &variable kan den almindelige SUBMIT kommando ikke rigtig gøre noget ved, så resultatet blev, at jeg opfandt min egen SUBMIT kommando. I bund og grund er det ganske simpelt, se her:

/* REXX: MYSUB */
DROP MYJCL.
DROP NEWJCL.
JCLCOUNT = 0
ADDRESS TSO "EXECIO * DISKR MYJCL (STEM MYJCL. OPEN FINIS"
DO LINENO = 1 TO MYJCL.0
  /* START MANIPULATING THE JCL-INPUT LINE */
  MANIPULATEDLINE = TRANSLATE(MYJCL.LINENO)
  /* END OF MANIPULATING THE JCL-INPUT LINE */
  JCLCOUNT = JCLCOUNT + 1
  NEWJCL.JCLCOUNT = MANIPULATEDLINE
END
IF JCLCOUNT > 0
THEN DO
  NEWJCL.0 = JCLCOUNT
  ADDRESS TSO "ALLOC FI(NEWJCL) SYSOUT WRITER(INTRDR)"
  ADDRESS TSO "EXECIO * DISKW NEWJCL (STEM NEWJCL. OPEN FINIS"
  ADDRESS TSO "FREE FI(NEWJCL)"
END

Denne REXX læser de data, der er allokeret til DD-navn MYJCL, laver dem om til store bogstaver og submitter dem via internal reader også kaldet INTRDR. INTRDR er den direkte linie til JES. Faktisk er det eneste opsigtsvækkende i REXX'en allokeringen af et DD-navn til INTRDR. Man kan kun skrive til INTRDR og JES bruger kun data til noget, når den har genkendt et jobkort.

Her fra er det sådan set kun din fantasi, der sætter grænserne for, hvad du vil proppe ind i JES. Ovenstående REXX kan læse JCL fra mange kilder, eksempelvis DB2, hvis du har adgang til et fornuftigt REXX/DB2 interface, og den kan for eksempel scanne efter &variable og oversætte dem til noget fornuftigt på samme måde som eksempelvis OPC gør det. Eller måske kan du bruge tippet til at lave din helt egen file tailoring. Til sidst bør jeg nok nævne, at man allokerer INTRDR således i JCL:

//NEWJCL   DD SYSOUT=(A,INTRDR)

Ja, det er faktisk ret enkelt, når man ved hvordan.

Forrige danske tip        Last tip in english        Tip oversigten