Nogen gange kræver en opgave, at man skal bruge jobnavnet på det job, ens program bliver eksekveret af. Der findes mange måder at få fat i jobnavnet og jeg har tidligere indirekte skrevet om dette. Jobnavnet står nemlig i den kontrolblok, der kaldes TIOT. De fleste installationer har for længst implementeret et program (typisk skrevet i assembler), der kan returnere jobnavnet. Problemet er, at det kan være så længe siden, at nogen har brugt det program, at ingen aner, hvad det hedder. Og hvis du skal bruge det, så er du tvunget til at lave et andet program, der kan kalde dette program.
Det pudsige er, at det faktisk er muligt at få fat i jobnavnet via en JCL-variabel kaldet &JOBNAME. Denne variabel har du kunnet benytte siden z/OS version 2.1. Der er dog visse udfordringer ved at benytte denne variabel, så derfor skal du nok prøve følgende eksempel først, før du kaster dig ud i brugen for alvor:
//UGENSTIP JOB ,'UGENSTIP',NOTIFY=&SYSUID //* // EXPORT SYMLIST=* // SET MYJOB=&JOBNAME //* //COPY EXEC PGM=IEFBR14,PARM='&JOBNAME' //* //COPY EXEC PGM=IEBGENER //SYSUT1 DD *,SYMBOLS=EXECSYS JOBNAME=&JOBNAME MYJOB=&MYJOB //SYSUT2 DD SYSOUT=* //SYSIN DD DUMMY
Efter du har kørt ovenstående job (som måske kræver ændringer i jobkortet for at virke hos dig), skal du kigge nøje på job-outputtet. Efter SET MYJOB=&JOBNAME vil du se, hvilken værdi MYJOB har. Til din og min store overraskelse vil du opdage, at MYJOB er sat til værdien JES2. Det samme gør sig gældende når du benytter &JOBNAME i PARM-feltet. Tag nu et kig på outputtet på DD-navnet SYSUT2. Her vil du se, at der står:
JOBNAME=UGENSTIP MYJOB=JES2
Her har JOBNAME lige pludselig fået den værdi, vi er interesseret i. Med andre ord, hvis du vil benytte JCL-variablen &JOBNAME, så skal du specificere den i noget SYSIN, så du derfra kan læse den ind i dit program eller du kan benytte den direkte i dit SYSIN, måske i noget SQL eller en DB2 utility eller... Mulighederne er mange, når først ideen er opstået. Bemærk i øvrigt, at du skal benytte JCL-parameteren SYMBOLS=EXECSYS på dit SYSIN-kort for at få adgang til værdien af &JOBNAME.
Og hvorfor er det så lige, at &JOBNAME har een værdi i SYSIN og en anden udenfor. Det skyldes, at det er JES2, der har kontrollen, når JCL'en scannes, men pga. parameteren SYMBOLS=EXECSYS vil JES2 først scanne indholdet af dit SYSIN, når jobbet rent faktisk kører, og så er &JOBNAME jo nødt til at være navnet på dit job.