|
Back To LeighWeb Mainframe Utilities Page
View the documentation associated with this module
/**********************************************************************
/* UTILITY: ESFRECD *
/* AUTHOR: DAVID LEIGH *
/* FUNCTION: THIS UTILITY PROMPTS FOR INPUT OF A DB2 TABLE NAME AND AN*
/* ASSOCIATED CSP RECORD NAME, AN ENDEVOR CCID, AND AN *
/* ENDEVOR COMMENT. IT THEN CREATES JCL WHICH: *
/* 1. RETRIEVES A RECORD FROM ENDEVOR *
/* 2. EXTRACTS THAT TABLE/VIEW'S INFORMATION FROM DB2 *
/* 3. CREATES AN ESF FORMAT RECORD FROM THE DB2 INFO. *
/* 4. ADDS THAT BACK INTO ENDEVOR *
/**********************************************************************
PROC 0 TABLE() +
CREATOR(USSTRD00) +
RECORD() +
CCID() +
COMMENT() +
ENVIRON(QUAL) +
STAGE(D) +
TYPE(RECD) +
SYSTEM(STR) +
SUBSYS(UNIPAC) +
XRFILE('DUSC1.STR.DOCLIB(CSPDB2XR)') +
TEMPJCL('&SYSUID..TEMP.ESFRECD.JCL') +
JCLREVEW(N) +
HELP +
DEBUG
/*** CHECK THE DEBUG SWITCH ***/
IF &DEBUG = DEBUG THEN +
CONTROL MSG LIST CONLIST SYMLIST NOFLUSH NOPROMPT ASIS
ELSE +
CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ASIS
IF &HELP = HELP THEN GOTO HELPSEC
02
/**********************************************************************
/* GET THE USER'S FULL NAME *
/**********************************************************************
SET SYSOUTTRAP = 1000
ACF
LIST *
END
SET SYSOUTTRAP = 0
SET SYSDVAL = &STR(&SYSNSUB(1,&SYSOUTLINE1))
READDVAL A B NAME1 NAME2 NAME3 NAME4 NAME5
SET FULLNAME = &STR(&NAME1 &NAME2 &NAME3 &NAME4 &NAME5)
02
/**********************************************************************
/* ESTABLISH SOME PROCESSING VARIABLES *
/**********************************************************************
CALL 'SYS2.USC1.LINKLIB(USERINFO)' '&SYSUID '
SET TEMPJCL = &STR(&TEMPJCL)
SET LP = &STR((
SET RP = &STR()
/**********************************************************************
/* DISPLAY THE PANEL IF NO INPUT WAS PASSED *
/**********************************************************************
IF &STR(&TABLE) > AND +
&STR(&RECORD) > AND +
&STR(&CCID) > AND +
&STR(&COMMENT) > THEN GOTO PROCESS
ISPEXEC VGET (TABLE RECORD CCID COMMENT) SHARED
REDISPLAY: +
SET GENERATE =
ISPEXEC DISPLAY PANEL(ESFRECD)
IF &LASTCC > 7 THEN +
DO
IF &STR(&GENERATE) = Y THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** SET GENERATE TO "N" BEFORE +
QUITTING OR PRESS TO +
GENERATE ***)
ISPEXEC SETMSG MSG(UTLZ001W)
GOTO REDISPLAY
END
GOTO FINISH
END
ELSE +
DO
/**************************************************************
/* PERMIT DYNAMIC DEBUG TOGGLEING *
/**************************************************************
IF &ZCMD = &STR(DEBUG ON) THEN +
DO
SET DEBUG = DEBUG
SET ZEDSMSG = &STR(DEBUG ON)
SET ZEDLMSG = &STR(THE DEBUG SWITCH HAS BEEN SET ON)
ISPEXEC SETMSG MSG(UTLZ000)
GOTO REDISPLAY
END
IF &ZCMD = &STR(DEBUG OFF) THEN +
DO
SET DEBUG = DEBUG
SET ZEDSMSG = &STR(DEBUG OFF)
SET ZEDLMSG = &STR(THE DEBUG SWITCH HAS BEEN SET OFF)
ISPEXEC SETMSG MSG(UTLZ000)
GOTO REDISPLAY
END
/**************************************************************
/* GET A TABLE/VIEW LIST FROM DB2 *
/**************************************************************
IF &SYSINDEX(&STR(%),&STR(&TABLE)) > 0 THEN +
SYSCALL GET_TABLE TABLE CREATOR DEBUG
/**************************************************************
/* GET A CSP RECORD NAME FROM THE CROSS REFERENCE FILE *
/**************************************************************
IF &STR(&RECORD) = &STR(?) AND +
&STR(&TABLE) > THEN +
DO
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(ESFRECD)
ISPEXEC SELECT +
CMD(%ESFRECD2 TABLE(&TABLE) XRFILE(&XRFILE))
IF &LASTCC = 2000 THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** COULD NOT FIND A +
CSP RECORD IN THE CROSS +
REFERENCE FILE FOR THIS +
TABLE ***)
ISPEXEC SETMSG MSG(UTLZ001W)
SET RECORD =
GOTO REDISPLAY
END
ELSE ISPEXEC VGET RECORD SHARED
END
/**************************************************************
/* PROCESS THE PROLOGUE OVERRIDE FLAG IF SET *
/**************************************************************
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(ESFRECD)
SELECT (&STR(&PROLOVRD))
/**********************************************************
/* REFRESH THE PROLOGUE OVERRIDE FROM THE CROSS REFERENCE *
/**********************************************************
WHEN (R) DO
ISPEXEC SELECT CMD(%ESFRECD4 XRFILE(&XRFILE) +
RECORD(&RECORD) +
&DEBUG)
IF &LASTCC = 2000 THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** COULD NOT FIND A +
CSP RECORD IN THE CROSS +
REFERENCE FILE FOR THIS +
TABLE ***)
ISPEXEC SETMSG MSG(UTLZ001W)
SET PROLOVRD = N
ISPEXEC VGET PROVRDSN SHARED
GOTO REDISPLAY
END
ELSE +
SET PROLOVRD = Y
ISPEXEC VGET PROVRDSN SHARED
END
/**********************************************************
/* EDIT THE PROLOGUE OVERRIDE (BUILD FIRST IF NECESSARY) *
/**********************************************************
WHEN (E) DO
LISTDSI '&PROVRDSN'
IF &LASTCC ¬= 0 THEN +
DO
ISPEXEC SELECT CMD(%ESFRECD4 XRFILE(&XRFILE) +
RECORD(&RECORD) +
&DEBUG)
ISPEXEC VGET PROVRDSN SHARED
END
ISPEXEC EDIT DATASET('&PROVRDSN')
SET PROLOVRD = Y
ISPEXEC VGET PROVRDSN SHARED
END
/**********************************************************
/* SELECT THE PROLOGUE OVERRIDE (BUILD 1ST IF NECESSARY) *
/**********************************************************
WHEN (Y) DO
ISPEXEC VGET PROVRDSN SHARED
LISTDSI '&PROVRDSN'
IF &LASTCC ¬= 0 THEN +
DO
ISPEXEC SELECT CMD(%ESFRECD4 XRFILE(&XRFILE) +
RECORD(&RECORD) +
&DEBUG)
IF &LASTCC = 2000 THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** COULD NOT FIND +
A CSP RECORD IN THE +
CROSS REFERENCE +
FILE FOR THIS TABLE +
***)
ISPEXEC SETMSG MSG(UTLZ001W)
SET PROLOVRD = N
GOTO REDISPLAY
END
END
END
END
/**************************************************************
/* GO BACK TO REDISPLAY IF THE USER'S NOT READY TO GENERATE *
/**************************************************************
IF &STR(&GENERATE) ¬= Y THEN GOTO REDISPLAY
END
/**********************************************************************
/* PROCESS THE INPUT REQUEST *
/**********************************************************************
PROCESS: +
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** CREATING THE JCL ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY MSG(UTLZ000W)
DELETE '&TEMPJCL'
FREE DDNAME(ISPFILE)
ALLOCATE DDNAME(ISPFILE) DSN('&TEMPJCL') +
NEW CATALOG +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(1,1) TRACKS RELEASE +
RECFM(F B) LRECL(80) BLKSIZE(23440) DSORG(PS)
ISPEXEC FTOPEN
ISPEXEC FTINCL ESFRECD
SET SAVECC = &LASTCC
ISPEXEC FTCLOSE
FREE DDNAME(ISPFILE)
IF &SAVECC > 0 THEN +
DO
ISPEXEC VGET ZERRLM
SET ZEDSMSG = &STR(JCL CREATION ERROR)
SET ZEDLMSG = &STR(&ZERRLM)
ISPEXEC SETMSG MSG(UTLZ001)
END
IF &JCLREVEW = &STR(Y) THEN +
DO
SET ZEDLMSG = &STR(*** NOTE: YOU MUST SUBMIT THIS +
JCL YOURSELF ***)
ISPEXEC SETMSG MSG(UTLZ000W)
ISPEXEC EDIT DATASET('&TEMPJCL')
END
ELSE +
DO
SUBMIT '&TEMPJCL'
SET ZEDSMSG = &STR(JOB SUBMITTED)
SET ZEDLMSG = &STR(*** THE CREATED JCL WAS SUBMITTED ***)
ISPEXEC SETMSG MSG(UTLZ000)
END
GOTO REDISPLAY
/**********************************************************************
/* GET OUT! *
/**********************************************************************
FINISH: EXIT
/**********************************************************************
/* QUERY DB2 TO GET A LIST OF TABLE NAMES *
/**********************************************************************
GET_TABLE: PROC 3 TABLE CREATOR DEBUG
SYSREF &TABLE &CREATOR &DEBUG
CONTROL END(END@)
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** CREATING A DB2 TABLE LIST FROM THE CATALOG ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY MSG(UTLZ000W)
FREE DD(SYSREC00 SYSIN SYSPRINT SYSPUNCH)
IF &DEBUG = DEBUG THEN +
DO
ALLOC DD(SYSPRINT) DA(*)
ALLOC DD(SYSPUNCH) DA(*)
END@
ELSE +
DO
ALLOC DD(SYSPRINT) DUMMY
ALLOC DD(SYSPUNCH) DUMMY
END@
SET DB2DSN = &STR(&SYSUID..TEMP.ESFRECD.TABLES)
DELETE '&DB2DSN'
ALLOC DD(SYSREC00) DSN('&DB2DSN') +
NEW CATALOG +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(1,1) TRACKS RELEASE
ALLOC DD(SYSIN) +
NEW +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(1,1) TRACKS RELEASE +
RECFM(F B) LRECL(80) BLKSIZE(23440) DSORG(PS)
OPENFILE SYSIN OUTPUT
SET SYSIN = &STR(ESFRECD WHERE NAME LIKE '&TABLE' +
AND CREATOR LIKE '&CREATOR')
PUTFILE SYSIN
CLOSFILE SYSIN
DSN SYSTEM(DSNT)
RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) -
LIB('SYS4.DSN.DSNT.RUNLIB.LOAD')
END
FREE DD(SYSREC00 SYSIN SYSPRINT SYSPUNCH)
ISPEXEC EDIT DATASET('&DB2DSN') MACRO(ESFRECDM)
ISPEXEC VGET COUNT SHARED
IF &COUNT = 1 THEN +
DO
SET ZTDSELS = 1
ISPEXEC VGET (CREATOR TABLE) SHARED
GOTO SELECT_SECTION
END@
/**********************************************************************
/* SHOW THE LIST ON A SCREEN SO THE USER CAN CHOOSE ONE *
/**********************************************************************
DISPLAY_TABLES: +
SET ZTDMARK = &STR(*** END OF DB2 TABLES/VIEWS LIKE "&TABLE" ***)
ISPEXEC TBDISPL TEMPESFR PANEL(ESFRECD2)
SET PANELCC = &LASTCC
IF &PANELCC > 8 THEN +
DO
SET ZEDLMSG = &STR(PROBABLE ERROR IN ESFRECD2 PANEL. +
TBDISPL RC = &PANELCC)
ISPEXEC SETMSG MSG(UTLZ001W)
GOTO FINISH_PROC
END@
/**********************************************************************
/* SEE HOW MANY THE USER SELECTED. THEY CAN ONLY DO ONE! *
/**********************************************************************
SELECT_SECTION: +
SELECT (&ZTDSELS)
WHEN (0) DO
SET TABLE =
SET CREATOR =
IF &PANELCC > 7 THEN GOTO FINISH_PROC
GOTO DISPLAY_TABLES
END@
WHEN (1) GOTO FINISH_PROC
OTHERWISE DO
SET ZEDSMSG = &STR(SELECT ONLY 1)
SET ZEDLMSG = &STR(YOU MAY SELECT ONLY 1 TABLE ON THIS SCREEN)
ISPEXEC SETMSG MSG(UTLZ001)
SET SEL =
SET ZTDSELS =
GOTO DISPLAY_TABLES
END@
END@
FINISH_PROC: RETURN
END@
|
|