IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Macro/rexx help needed


IBM Mainframe Forums -> JCL & VSAM
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
saithvis2

New User


Joined: 23 Dec 2005
Posts: 61
Location: Providence , US

PostPosted: Mon Jan 02, 2006 5:15 pm
Reply with quote

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
View user's profile Send private message
ofer71

Global Moderator


Joined: 27 Dec 2005
Posts: 2358
Location: Israel

PostPosted: Mon Jan 02, 2006 5:45 pm
Reply with quote

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
View user's profile Send private message
saithvis2

New User


Joined: 23 Dec 2005
Posts: 61
Location: Providence , US

PostPosted: Tue Jan 03, 2006 5:47 pm
Reply with quote

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
View user's profile Send private message
ofer71

Global Moderator


Joined: 27 Dec 2005
Posts: 2358
Location: Israel

PostPosted: Tue Jan 03, 2006 5:54 pm
Reply with quote

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
View user's profile Send private message
saithvis2

New User


Joined: 23 Dec 2005
Posts: 61
Location: Providence , US

PostPosted: Tue Jan 03, 2006 6:12 pm
Reply with quote

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
View user's profile Send private message
ofer71

Global Moderator


Joined: 27 Dec 2005
Posts: 2358
Location: Israel

PostPosted: Tue Jan 03, 2006 6:21 pm
Reply with quote

Vishal -

The fine manual explains exactly how to do that.

Good luck. icon_biggrin.gif

O.
Back to top
View user's profile Send private message
saithvis2

New User


Joined: 23 Dec 2005
Posts: 61
Location: Providence , US

PostPosted: Tue Jan 03, 2006 6:30 pm
Reply with quote

Hi Ofer71,

Thanks alot !

Regards
Vishal
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> JCL & VSAM

 


Similar Topics
Topic Forum Replies
No new posts Compile Several JCL JOB Through one r... CLIST & REXX 4
No new posts Running REXX through JOB CLIST & REXX 13
No new posts Error to read log with rexx CLIST & REXX 11
No new posts isfline didnt work in rexx at z/OS ve... CLIST & REXX 7
No new posts run rexx code with jcl CLIST & REXX 15
Search our Forums:

Back to Top