View previous topic :: View next topic
|
Author |
Message |
saithvis2
New User
Joined: 23 Dec 2005 Posts: 61 Location: Providence , US
|
|
|
|
HI all,
I have a flat file having 1000 members of the form as given below (all these members are the names of programs and which i have copied in a flat file using IEHLIST):
SYSPGRP.COMPILE.IO1
-----------------------------
ABCP9170
ABCP9218
ABCP9410
ABDC01S1
ABDC01U1
ABDE01S1
ABDE01U1
ABDFCTS1
ABDFCTU1
ABDF01S1
-----------
1000 names of programs ............
now i have to compile all the progarms so in the compile jcl i have copy paste the stuff the same number of times :
//ABCP9170 EXEC PROC2,PROG=ABCP9170
//LKED.SYSIN DD *
INCLUDE SYSLIB(DSNELI)
NAME ABCP9170(R)
/*
//BIND.SYSTSIN DD *
DSN SYSTEM(DB2T)
BIND PLAN(ABCP9170) MEMBER(ABCP9170) -
ACT(REPLACE) VALIDATE(BIND) ISOLATION(CS) -
QUALIFIER(ABC10MS)
END
/*
//BIND.SYSIN DD *
GRANT EXECUTE ON PLAN ABCP9170 TO PUBLIC;
/*
and edit the program name manually at all the 4 occasions .
Thus is there a way that i can write a macro/rexx program which copies the content from flat file and repeates the compile jcl 1000 times with everytime taking the new name from the flat file.
Thanks in advance !
Regards,
Vishal |
|
Back to top |
|
|
ofer71
Global Moderator
Joined: 27 Dec 2005 Posts: 2358 Location: Israel
|
|
|
|
Here is my solution:
Code: |
/* REXX */
ADDRESS TSO "ALLOC FI(TLIST) DA('your.flat.file') SHR"
ADDRESS TSO "EXECIO * DISKR TLIST (STEM PROG. FINIS"
ADDRESS TSO "FREE FI(TLIST)"
DO I = 1 TO PROG.0
PROG = STRIP(PROG.I)
CALL GENERATE_JCL
END I
EXIT
GENERATE_JCL:
QUEUE "//ABCP9170 EXEC PROC2,PROG="PROG
QUEUE "//LKED.SYSIN DD * "
QUEUE "INCLUDE SYSLIB(DSNELI) "
QUEUE "NAME "PROG"(R) "
QUEUE "/* "
QUEUE "//BIND.SYSTSIN DD * "
QUEUE "DSN SYSTEM(DB2T) "
QUEUE "BIND PLAN("PROG") MEMBER("PROG") -"
QUEUE "ACT(REPLACE) VALIDATE(BIND) ISOLATION(CS) - "
QUEUE "QUALIFIER(ABC10MS) "
QUEUE "END "
QUEUE "/* "
QUEUE "//BIND.SYSIN DD * "
QUEUE "GRANT EXECUTE ON PLAN ABCP9170 TO PUBLIC; "
QUEUE "/* "
QUEUE
"SUBMIT *"
RETURN
|
O. |
|
Back to top |
|
|
saithvis2
New User
Joined: 23 Dec 2005 Posts: 61 Location: Providence , US
|
|
|
|
HI Ofer71,
thanks alot for the reply . But while describing the problem i missed out on the job card part thus can we queue the job in a flat file so that i get the job card followed by the 1000 repetative iterations respectively . thus i can submit the job therafter respectively .
Thus i modified the rexx code as :
Code: |
/* REXX */
ADDRESS TSO "ALLOC FI(TLIST) DA('SYSPGRP.REX1.FLATFILE') SHR"
ADDRESS TSO "EXECIO * DISKR TLIST (STEM PROG. FINIS"
ADDRESS TSO "FREE FI(TLIST)"
CALL GENERATE_JOBCARD
CALL FLAT_FILE_GENERATE
DO I = 1 TO PROG.0
PROG = STRIP(PROG.I)
CALL GENERATE_JCL
END I
CALL FLAT_FILE_GENERATE_1
EXIT
GENERATE_JCL:
QUEUE "//"PROG" EXEC PROC2,PROG="PROG
QUEUE "//LKED.SYSIN DD * "
QUEUE "INCLUDE SYSLIB(DSNELI) "
QUEUE "NAME "PROG"(R) "
QUEUE "//BIND.SYSTSIN DD * "
QUEUE "DSN SYSTEM(DB2T) "
QUEUE "BIND PLAN("PROG") MEMBER("PROG") -"
QUEUE "ACT(REPLACE) VALIDATE(BIND) ISOLATION(CS) - "
QUEUE "QUALIFIER(ITS10MS) "
QUEUE "END "
QUEUE "/* "
QUEUE "//BIND.SYSIN DD * "
QUEUE "GRANT EXECUTE ON PLAN "PROG" TO PUBLIC; "
QUEUE "/* "
RETURN
|
Now for FLAT_FILE_GENERATE i am facing problem as the queued data is not getting transferred to flat file .
Can you please help me out again !
Do i need to post the problem as a new post ?
regards
Vishal |
|
Back to top |
|
|
ofer71
Global Moderator
Joined: 27 Dec 2005 Posts: 2358 Location: Israel
|
|
|
|
Vishal -
The purpose of the QUEUE command in the above example is to submit the job directly from the REXX.
If you want to save the job to a file/dataset, then you have to write the lines first to the file. First - allocate the file, then use EXECIO to write the QUEUEd lines to that file.
O. |
|
Back to top |
|
|
saithvis2
New User
Joined: 23 Dec 2005 Posts: 61 Location: Providence , US
|
|
|
|
Hi ofer71,
Thanks again for the quick reply .
For solving the problem i have modified the rexx code as given below :
Code: |
/* REXX */
"ALLOC DA('SYSPGRP.REX1.FLATFIL3') FI(TLIST) SHR REUSE"
"ALLOC DA('SYSPGRP.TEMP.JCL2') FI(OUTPUT) SHR REUSE"
"EXECIO * DISKR TLIST (STEM PROG. FINIS"
"FREE FI(TLIST)"
J = 1
CALL GENERATE_JOBCARD
DO I = 1 TO PROG.0
PROG = SUBSTR(PROG.I,12,8)
CALL GENERATE_JCL
END
"EXECIO * DISKW OUTPUT (FINIS STEM FILE."
"FREE FI(OUTPUT)"
EXIT
GENERATE_JOBCARD:
FILE.J = "//ITCP2345 JOB (1,1441947),TEST,REGION=4M,PRTY=1,CLASS=L,"
J = J + 1
FILE.J = "// MSGCLASS=M,NOTIFY=XVYGTSO,MSGLEVEL=(1,1) "
J = J + 1
FILE.J = "/*ROUTE PRINT R9980 "
J = J + 1
FILE.J = "/*JOBPARM ROOM=241"
J = J + 1
FILE.J = "//PROCLIB JCLLIB ORDER=(SYSPGRP.ABC10.IO.COMPJCL.ITR7)"
J = J + 1
RETURN
GENERATE_JCL:
FILE.J = "//"||PROG||" EXEC PROC2,PROG="||PROG
J = J + 1
FILE.J = "//LKED.SYSIN DD * "
J = J + 1
FILE.J = " INCLUDE SYSLIB(DSNELI) "
J = J + 1
FILE.J = " NAME "||PROG||"(R) "
J = J + 1
FILE.J = "/* "
J = J + 1
FILE.J = "//BIND.SYSTSIN DD * "
J = J + 1
FILE.J = " DSN SYSTEM(DB2T) "
J = J + 1
FILE.J = " BIND PLAN("||PROG||") MEMBER("||PROG||") -"
J = J + 1
FILE.J = " ACT(REPLACE) VALIDATE(BIND) ISOLATION(CS) - "
J = J + 1
FILE.J = " QUALIFIER(ABC10MS) "
J = J + 1
FILE.J = " END "
J = J + 1
FILE.J = "/* "
J = J + 1
FILE.J = "//BIND.SYSIN DD * "
J = J + 1
FILE.J = " GRANT EXECUTE ON PLAN "||PROG||" TO PUBLIC; "
J = J + 1
FILE.J = "/* "
J = J + 1
RETURN
|
Can you please tell me how to we go about doing the same , using the queue command .
Regards
Vishal |
|
Back to top |
|
|
ofer71
Global Moderator
Joined: 27 Dec 2005 Posts: 2358 Location: Israel
|
|
|
|
Vishal -
The fine manual explains exactly how to do that.
Good luck.
O. |
|
Back to top |
|
|
saithvis2
New User
Joined: 23 Dec 2005 Posts: 61 Location: Providence , US
|
|
|
|
Hi Ofer71,
Thanks alot !
Regards
Vishal |
|
Back to top |
|
|
|