Return to Mainframe Utilities Page
Module
/**********************************************************************
/* UTILITY: BINDCARD *
/* AUTHOR: DAVID LEIGH *
/* FUNCTION: THIS UTILITY GENERATES BIND PLAN CARDS AND ENDEVOR SCL *
/* FROM REQUESTS ENTERED ON A PANEL BY PROGRAMMERS. THESE *
/* BIND CARDS ARE THEN ENTERED INTO ENDEVOR BY THE DBA'S *
/* USING THE ENDEVOR SCL WHICH IS ALSO GENERATED. *
/**********************************************************************
PROC 0 TEMPJCL('&SYSUID..TEMP.BINDCARD.JCL') +
TEMPFILE(&SYSUID..TEMP.ENDEVOR) +
ENVIRON(QUAL) +
STAGE(D) +
TYPE(BINDBTCH) +
SYSTEM(STR) +
SUBSYS(UNIPAC) +
OWNER(BINDADM) +
VALIDATE(BIND) +
RETAIN(RETAIN) +
NUMAPPL(15) +
SENDDEST('D@UDAL D@UJEF D@ULJS') +
HELP
/**********************************************************************
/* MISCELLANEOUS INITIALIZATION *
/**********************************************************************
ISPEXEC CONTROL ERRORS RETURN
ISPEXEC VGET DBGSWTCH PROFILE 02
IF &DBGSWTCH = ON THEN + 02
CONTROL MSG LIST CONLIST SYMLIST NOFLUSH PROMPT ASIS 00000702
ELSE + 02
CONTROL NOMSG NOLIST NOFLUSH PROMPT ASIS 00000902
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 '
ISPEXEC VPUT NUMAPPL SHARED
SET EXITCC = 0
SET LP = &STR((
SET RP = &STR()
/**********************************************************************
/* DISPLAY THE PANEL *
/**********************************************************************
REDISPLAY: +
SET GENERATE =
ISPEXEC DISPLAY PANEL(BINDCARD)
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(UTLZ001)
GOTO REDISPLAY
END
GOTO FINISH
END
ELSE +
SELECT
/**********************************************************************/
/* PRESENT A LIST OF ELEMENTS OF THIS TYPE TO CHOOSE FROM */
/**********************************************************************/
WHEN (&STR(&APP0) = &STR(?)) DO
ISPEXEC EDIT DATASET('&SYSUID..ISPF.ISPPROF(CTLIPROF)') +
MACRO(APPLCHKM)
IF &LASTCC = 14 THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** CANNOT CONTINUE UNTIL YOU +
ARE OUT OF ENDEVOR ***)
ISPEXEC SETMSG MSG(UTLZ001)
END
ELSE +
DO
ISPEXEC SELECT CMD(%BINDGET +
&STR(&ENVIRON) +
&STR(&STAGE) +
&STR(&TYPE) +
&STR(&SYSTEM) +
&STR(&SUBSYS))
ISPEXEC VGET APP0 SHARED
END
GOTO REDISPLAY
END
/**********************************************************************/
/* NOTHING TO DO NOW */
/**********************************************************************/
WHEN (&GENERATE = N AND &ACTION = ADD) GOTO REDISPLAY
/**********************************************************************/
/* GET A LIST OF CALLED APPLICATIONS FOR THIS APPLICATION */
/**********************************************************************/
WHEN (&GENERATE = N AND &ACTION ¬= ADD) DO
/*GOTO FIX_NDVRC1
ISPEXEC EDIT DATASET('&SYSUID..ISPF.ISPPROF(CTLIPROF)') +
MACRO(APPLCHKM)
IF &LASTCC = 14 THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** CANNOT CONTINUE UNTIL YOU +
ARE OUT OF ENDEVOR ***)
ISPEXEC SETMSG MSG(UTLZ001)
GOTO REDISPLAY
END
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** PREPARING TO CALL +
ENDEVOR TO FIND "&APP0" ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY MSG(UTLZ000)
FREE DDNAME(SYSPRINT C1MSGS1 C1PRINT PRINTDD BSTIPT01)
ALLOC DD(SYSPRINT) DUMMY
IF &DBGSWTCH = ON THEN + 02
ALLOC DD(C1MSGS1) DA(*)
ELSE +
ALLOC DD(C1MSGS1) DUMMY
ALLOC DD(C1PRINT) DUMMY
DELETE '&TEMPFILE'
ALLOC DD(PRINTDD) +
DSN('&TEMPFILE') +
NEW CATALOG +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(1,1) CYLINDERS RELEASE +
RECFM(F B) LRECL(133) BLKSIZE(23408) DSORG(PS)
ALLOC DD(BSTIPT01) +
NEW CATALOG +
UNIT(SYSDA) +
SPACE(1,1) TRACKS RELEASE +
RECFM(F B) LRECL(80) BLKSIZE(23440) DSORG(PS)
OPENFILE BSTIPT01 OUTPUT
SET BSTIPT01 = &STR(PRINT ELEMENT '&APP0' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR(FROM ENVIRONMENT '&ENVIRON' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( STAGE '&STAGE' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( SYSTEM '&SYSTEM' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( SUBSYSTEM '&SUBSYS' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( TYPE '&TYPE')
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( TO FILE 'PRINTDD' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR(OPTIONS SEARCH )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR(. )
PUTFILE BSTIPT01
CLOSFILE BSTIPT01
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** EXTRACTING "&APP0" +
FROM ENDEVOR ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY MSG(UTLZ000)
ISPEXEC SELECT PGM(NDVRC1) PARM(C1BM3000)
SET NDVRCC = &LASTCC
FREE DDNAME(SYSPRINT C1MSGS1 C1PRINT PRINTDD BSTIPT01)
ISPEXEC EDIT DATASET('&TEMPFILE') MACRO(BINDCRDM)
ISPEXEC VGET VARS SHARED
ISPEXEC VGET (&STR(&VARS)) SHARED
IF &EDITCC < 8 THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** VALUES FOR "&APP0" +
WERE SUCCESSFULLY EXTRACTED +
FROM ENDEVOR ***)
ISPEXEC SETMSG MSG(UTLZ000)
END
ELSE +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** NO BIND CARDS FOR "&APP0" +
FOUND IN ENDEVOR ***)
ISPEXEC SETMSG MSG(UTLZ001)
END
GOTO REDISPLAY
END
END
/**********************************************************************
/* LOAD A TEMPORARY TABLE WITH ALL THE APPLICATIONS *
/**********************************************************************
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** GENERATING JCL TO UPDATE ENDEVOR ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY MSG(UTLZ000)
ISPEXEC TBCREATE TEMPTABL NOWRITE REPLACE KEYS(APPLICAT)
IF &STR(&DB2) = Y THEN +
DO
SET APPLICAT = &STR(&APP0)
ISPEXEC TBADD TEMPTABL
END
/**********************************************************************/
/* LOAD UP THE TABLE WITH THE PACKAGE LIST. */
/* */
/* 12/8/97 - GET RID OF OLD REFERENCES TO EP02A, EP03A AND SC50A */
/**********************************************************************/
DO &I = 1 TO &NUMAPPL
SET APPLICAT = &STR(&SYSNSUB(2,&&APP&I))
IF &STR(&APPLICAT) > AND +
&STR(&APPLICAT) ¬= &STR(EP02A) AND +
&STR(&APPLICAT) ¬= &STR(EP03A) AND +
&STR(&APPLICAT) ¬= &STR(SC50A) THEN
ISPEXEC TBADD TEMPTABL
END
/**********************************************************************
/* THE FOLLOWING SECTION ADDS STANDARD APPLICATIONS WHICH MUST BE *
/* PRESENT IN EVERY PLAN. SINCE THE TABLE IS KEYED, IF THEY EXIST, *
/* THEY WON'T BE ADDED TWICE, BUT IF THEY DON'T EXIST ALREADY, THEY *
/* WILL BE ADDED. *
/**********************************************************************
SET APPLICAT = &STR(EPB0002) /* ERROR PROCESSING APPLICATION */
ISPEXEC TBADD TEMPTABL
ISPEXEC TBTOP TEMPTABL
ISPEXEC TBQUERY TEMPTABL ROWNUM(ENDROW)
/**********************************************************************
/* USE FILE TAILORING TO CREATE THE JOB *
/**********************************************************************
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 BINDCARD
SET SAVECC = &LASTCC
ISPEXEC FTCLOSE
FREE DDNAME(ISPFILE)
IF &SAVECC > 0 THEN +
DO
SET ZEDSMSG = &STR(JCL CREATION ERROR)
SET ZEDLMSG = &STR(ENDEVOR UPDATE JCL CREATION FAILED +
WITH RC: &SAVECC)
ISPEXEC SETMSG MSG(UTLZ001)
IF &JCLREVEW = Y THEN ISPEXEC EDIT DATASET('&TEMPJCL')
END
ELSE +
DO
IF &STR(&DEFAULTS) = N THEN +
DO
SEND '&STR("&FULLNAME" CREATED BATCH BIND PLAN +
REQUEST "&APP0" ON &SYSSDATE AT &SYSTIME)' +
USER(&SENDDEST) LOGON
SEND '&STR(!!!!! NON-DEFAULT VALUE(S) USED !!!!!)' +
USER(&SENDDEST) LOGON
END
IF &JCLREVEW = Y THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** YOU MUST SUBMIT THIS JOB +
YOURSELF ***)
ISPEXEC SETMSG MSG(UTLZ001)
ISPEXEC EDIT DATASET('&TEMPJCL')
END
ELSE +
DO
SUBMIT '&TEMPJCL'
SET ZEDSMSG = &STR(ENDEVOR JOB SUBMITTED)
SET ZEDLMSG = &STR(ENDEVOR UPDATE JOB WAS CREATED +
AND SUBMITTED)
ISPEXEC SETMSG MSG(UTLZ000)
END
END
GOTO REDISPLAY
/**********************************************************************
/* CLEANUP AND GET OUT *
/**********************************************************************
FINISH: +
EXIT
/**********************************************************************
/* DISPLAY ANY "HELP" WHICH IS AVAILABLE FOR THIS UTILITY *
/**********************************************************************
HELPSEC: +
ISPEXEC SELECT PGM(ISPTUTOR) PARM(BINDCRDA)
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR BINDCARD UTILITY +
*** NO PROCESSING PERFORMED ***)
ISPEXEC SETMSG MSG(UTLZ000)
EXIT
Documentation
BINDCARD creates batch DB2 "bind plan" cards. It "wraps" the cards in JCL for loading into ENDEVOR (it also generates the necessary ENDEVOR SCL to accomplish this). The JCL is then submitted for backround processing with ENDEVOR. It can take existing bind plan cards from ENDEVOR and update them with changes, or add a completely new set of bind plan cards into ENDEVOR. Syntax: COMMAND ===> tso bindcard When you invoke BINDCARD, you are presented with a screen. On this screen, you may enter the name of the main program which "drives" this batch process. You must enter this field. The name of this application will be the name used to store the DB2 bind cards in ENDEVOR. You need to then indicate whether the main driving application uses DB2 or not. If so, it will be included in the package list associated with this plan, if not, the main application name will simply be used as the name of the plan. If this main application calls any other "non-common"/"client-specific" applications AND they use DB2, they should be listed (in any order) in one of the "Called" fields on the screen (currently there is room for 15 called applications). Additionally, if a called module (DB2 or not) calls a program that does DB2, the DB2 module should be included in one of the "Called" fields. So, anywhere in the "calling hierarchy" that DB2 is used, that program name needs to be specified. If an application is a called application for this driver program, but it does NOT use DB2, it should not be listed on this screen. Consequently, if the driver application does not use DB2 and none of its called applications use DB2, there is no need to request a DB2 batch plan bind for this application. It is strictly for applications which use DB2 in SOME fashion. When you have finished entering the applications, you may choose to override the default DB2 plan parameter values. In 99% of the cases, these defaults should NOT be overridden. Any override needs should probably be discussed with the DBA team. Finally, you will need to enter an ENDEVOR CCID (Change Control Identifier) and an ENDEVOR comment. These pieces of information are required in order to successfully load the bind cards into ENDEVOR. They are not required on this panel until you actually change the GENERATE JCL flag from "N" to "Y". Check with the ENDEVOR administrator to determine what CCID to use (typically this will be your PR number). Use meaningful text to describe the nature of the change in the comment field. The limit of the length of the comment field is a function of ENDEVOR limits If you are updating existing bind plan cards which are stored in ENDEVOR and you wish to start with the parameters of the existing bind plan cards, BINDCARD will extract the information from ENDEVOR and populate the screen for you. BINDCARD is triggered to perform this operation if it finds a "N" in the GENERATE JCL field. If you presswhen this field is set this way, BINDCARD will get the information for the BIND card element named the same as your "main" application. It then parses this information and populates the screen with it. You are then free to modify it in any way you wish. 1 Alternatively, you may just replace whatever exists for an existing set of bind plan cards by setting the GENERATE JCL flag to "Y", entering your data and pressing . In this case, BINDCARD will not attempt to extract the values of the bind plan cards to populate the screen. It will just create the JCL from what you entered on the screen. BINDCARD will generate a step in the JCL to RETREIVE the element from ENDEVOR. This retreived version is thrown away, however, and what was on the screen is used to do the UPDATE back into ENDEVOR. The RETRIEVE is only used to obtain SIGNOUT on the element. After you've generated, the GENERATE field returns the the value of "N", and you are ready to enter more data if necessary and generate another plan. Your CCID and ENDEVOR comment are remembered during your ISPF session, so you can generate several plans under the same CCID if necessary.

0 Comments