MainframeSupports
tip uge 24/2007:

Når vi i det daglige arbejde har brug for at se hvilke members, der er i et PDS, så bruger vi med største selvfølgelighed forskellige muligheder i ISPF. Hvis vi selv skal lave en applikation, der finder memberne til os, så bliver det straks lidt mere kompliceret. Der findes en lang række ISPF services, der kan producere member lister, og de kan med nogenlunde lethed kaldes fra REXX. Desværre er det kompliceret at bruge ISPF services fra eksempelvis COBOL eller PL/I. Og hvis nu man har brug for at lave member listen i batch, så er ISPF ret besværligt at bruge.

Der findes selvfølgelig IBM utilities, der kan lave member lister, men de er lavet for så lang tid siden, at de ikke har fulgt med udviklingen og er derfor ret oldnordiske at bruge. De kræver typisk, at man ved, hvilken volume ens PDS ligger på. Det bekymrer vi os ligesom ikke ret meget om efter SMS er blevet en integreret del af filsystemet til MVS. Så fandt jeg en TSO kommando, der rent faktisk kan producere en member liste. I batch eksekveres den således:

//MEMLISTE EXEC PGM=IKJEFT01
//SYSTSIN  DD *
LISTDS 'MY.PDS.DATASET' MEMBERS
/*
//SYSTSPRT DD DISP=(NEW,CATLG),SPACE=(TRK,(1,1),RLSE),
//         LRECL=80,RECFM=FB,BLKSIZE=0,DSN=MY.MEMBER.LIST

Hvis du benytter ovenstående stump JCL, så husk at lave et DELETE step af MY.MEMBER.LIST datasettet. Du kan selvfølgelig udføre LISTDS som en TSO kommando fra ISPF kommando linien og du kan trappe outputtet. Outputtet i MY.MEMBER.LIST ser nogenlunde således ud:

READY
LISTDS 'MY.PDS.DATASET' MEMBERS
MY.PDS.DATASET
--RECFM-LRECL-BLKSIZE-DSORG
  FB    80    27920   PO

--VOLUMES--
  VOL001
--MEMBERS--
  FIRSTMEM
  ...
  LASTMEM
READY
END

Der skal altså kodes noget fortolkning af output datasettet, før man får fat i selve member navnene, men alt i alt er det nok en del lettere end at lave ISPF service kald fra COBOL eller PL/I og derudover at eksekvere det resulterende program under ISPF kontrol i batch.

Forrige danske tip        Last tip in english        Tip oversigten