Go to LeighWeb Home Page            

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@