View previous topic :: View next topic
|
Author |
Message |
Phalgun
New User
Joined: 18 May 2009 Posts: 16 Location: Hyd
|
|
|
|
Hi ,
I need your help in getting step by step Idea in developing this Tool . Coding Part I can do it but just need assistance .
Requirement :
Rexx need to take input from ps dataset with multiple records
E.G
1) V12345.Input.Temp
CAN Packet file
1234567890 NTFAACB.GX1234.PKT.T0001
1234567891 NTFAACB.GX1234.PKT.T0002
2) Build JCL and pass input to Extract JCL and submit . It will give output below
V12345.NTFAACB.GX1234.EXT.T0001
v12345.NTFAACB.GX1234.EXT.T0002
Output from Extract JCL will go to anotherSort job
3) Based on Return code of Extract JCL RC=0 it should pass output of extract job as input to Sort JCL .
4) Output from Sort JCL is passed as input to NDM jcl to Unix server .
output Sort :
V12345.NTFAACB.GX1234.EXT.T0001.sort
v12345.NTFAACB.GX1234.EXT.T0002.sort
Work I have done till now :
1) Created input file with multiple record
2) Using file tailoring skeleton build Extract Jcl and passed values from Input file
This is working fine till now which is creating output file
V12345.NTFAACB.GX1234.EXT.T0001
v12345.NTFAACB.GX1234.EXT.T0002
But I stuck here .. How to pass output dataset values from Extract jcl to Sort jcl . and output of sort jcl to NDM jcl ..
Please let me know if any other way of achieving this requirement . I m ready to learn new things and want to develop while learning new things .
Please need your suggestions till I completely develop this Tool . |
|
Back to top |
|
|
expat
Global Moderator
Joined: 14 Mar 2007 Posts: 8797 Location: Welsh Wales
|
|
|
|
Why not just create and submit one job with condition codes checking or IF/THEN/ELSE processing |
|
Back to top |
|
|
Phalgun
New User
Joined: 18 May 2009 Posts: 16 Location: Hyd
|
|
|
|
Thank you Expat !!
You mean to say in same file tailoring skeleton which build Extract JCL , I need to include logic that create and build Sort and NDM jcl and pass value from one JCL to other depends on RC code of first JCL. I will try out this Suggestion . |
|
Back to top |
|
|
Pedro
Global Moderator
Joined: 01 Sep 2006 Posts: 2547 Location: Silicon Valley
|
|
|
|
Quote: |
build Sort and NDM jcl and pass value from one JCL to other depends on RC code of first JCL |
It is not clear if you understood Expat's suggestion to build only one set of JCL that consists of multiple job steps. |
|
Back to top |
|
|
Phalgun
New User
Joined: 18 May 2009 Posts: 16 Location: Hyd
|
|
|
|
Hi
Thanks Pedro , I have build only one set of JCL and tried to call it using file tailoring skeleton . which read input file
V034523.BLD.TEST
2822008454 TX.SC14 QCTACBS.CBSFGH05.PKT.BHUD18VP
Rexx Program :
Code: |
EDIT SYSSUP.LOCAL.CLIST(EXSRTNDM) - 01.24 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 /* REXX */
000002 /* PARSE UPPER ARG INDSN */
000003 INDSN = 'V034523.BLD.TEST'
000004 SAY "INPUT DSN IS " INDSN
000005 INFILE = STRIP(INDSN,"B","'")
000006 "ALLOC FI(INPUT) DA('"INFILE"') SHR"
000007 "NEWSTACK"
000008 "EXECIO * DISKR INPUT (STEM INPUT. FINIS"
000009 SAY "NUMBER OF ROWS = " INPUT.0
000010 STATUS = MSG(OFF)
000011 CALL SET_VARS
000012 Z = INPUT.0
000013 Y = 1
000014 CALL FILE_TAILOR_START
000015 CALL READ_CAN_FILE
000016 CALL FILE_TAILOR_END
000017 CALL BYEBYE
000018 RETURN
000019
000020 SET_VARS:
000021 TEMP_DATE = DATE(U)
000022 TEMP_TIME = TIME()
000023 PARSE VAR TEMP_DATE MON '/' DAY '/' YR
000024 PARSE VAR TEMP_TIME HH ':' MM ':' SS
000025 DATETIME= 'D'||YR||MON||DAY||'.T'||HH||MM
000026 USER = USERID()
000027 RETURN
000028
000029 READ_CAN_FILE:
000030 DO X = Y TO Z
000031 PARSE UPPER VAR INPUT.X 1 CAN1 11 12 STATE 14 15 TC 19 20 PKTFL TYPE
000032 CAN1.X = STRIP(CAN1,"B")
000033 STATE.X = STRIP(STATE,"B")
000034 TC.X = STRIP(TC,"B")
000035 PKTFL.X = STRIP(PKTFL,"B")
000036 CALL FILE_TAILOR_INCLUDE
000037 END
000038 RETURN
000039
000040
000041 FILE_TAILOR_START:
000042 CRTLIB = "'"USERID()".EXSRTND."DATETIME"."CHAR"'"
000043 "FREE F(NUMDD)"
000044 "ALLOC DA("CRTLIB") NEW SPACE(1 1) TRACKS RECFM(F,B) DSORG(PS)
000045 LRECL(80) BLKSI(27920) CATALOG F(NUMDD)"
000046 "FREE F(ISPFILE)"
000047 "ALLOC FI(ISPFILE) DA("CRTLIB") OLD"
000048 "FREE DD(ISPCTL1 ISPCTL2)"
000049 ADDRESS 'ISPEXEC' "LIBDEF ISPSLIB DATASET ID('SYSSUP.LOCAL.ISPSLIB')"
000050 ADDRESS 'ISPEXEC' 'CONTROL ERRORS CANCEL'
000051 ADDRESS 'ISPEXEC' 'FTOPEN'
000052 ADDRESS 'ISPEXEC' 'FTINCL JBCRD001'
000053 RETURN
000054
000055 FILE_TAILOR_INCLUDE:
000056 ADDRESS 'ISPEXEC' "LIBDEF ISPSLIB DATASET ID('SYSSUP.LOCAL.ISPSLIB')"
000057 ADDRESS 'ISPEXEC' 'FTINCL EXSRTNMC'
000058 RETURN
000059
000060 FILE_TAILOR_END:
000061 SAY CRTLIB
000062 ADDRESS 'ISPEXEC' "LIBDEF ISPSLIB DATASET ID('SYSSUP.LOCAL.ISPSLIB')"
000063 ADDRESS 'ISPEXEC' 'FTCLOSE'
000064 ADDRESS 'ISPEXEC' "EDIT DATASET("CRTLIB")"
000065 "FREE F(ISPFILE)"
000066 RETURN
000067
000068 BYEBYE:
000069 "FREE DD(ISPCTL1 ISPCTL2)"
000070 "FREE F(NUMDD)"
000071 EXIT
|
JobCard :
Code: |
SYSSUP.LOCAL.ISPSLIB(JBCRD001)
//&USER.&K JOB (P,JYLI,BA3101),'&USER EXSRTNDM',
// CLASS=A,
// MSGCLASS=T,
// REGION=0M,
// NOTIFY=&USER
/*ROUTE PRINT LOCAL
/*JOBPARM FORMS=STD
//ENCNULL EXEC ENCNULL |
JCL :
Code: |
//SYSIN DD *
MODE NULL
FORCE YES
//*
//*
//GH05DACT EXEC PGM=GH05DACT,REGION=0M
//STEPLIB DD DSN=DTFCBS0.PEN.LOADLIB.R120300,DISP=SHR
//ACCTIN DD *
&CAN1.X
/*
//GH05IN DD DSN=&PKTFL.X,DISP=SHR
//GH05OP DD DSN=&USER.QCTACBS.CBSFGH05.EXT.&TC.X,
// DISP=(NEW,CATLG,CATLG),
// DCB=*.GH05IN,
// SPACE=(CYL,(50,100),RLSE),
// UNIT=SYSDA
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//*
// SET FILEN='&USER.QCTACBS.CBSFGH05.EXT.&TC.X'
//SORT1 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SORTIN DD DSN=&FILEN,DISP=SHR
//SORTOUT DD DSN=&FILEN..SORT,
// DISP=(,CATLG),
// UNIT=SYSDA,
// SPACE=(CYL,(50,50),RLSE),
// DCB=(*.SORTIN)
//SYSIN DD DSN=QCTTCBS.NYNE.CNTLLIB(CNTL1),DISP=SHR
//NDM EXEC NDMBINT,ACCT=(S,KHEV,BA3101)
/*ROUTE PRINT LOCAL
//DMNETMAP DD DISP=SHR,DSN=PXNDM.NETMAP
//DMPUBLIB DD DISP=SHR,DSN=NTF7CBS.BST.JCLS.PROCS
//DMMSGFIL DD DISP=SHR,DSN=PXNDM.MSG
//DMPRINT DD SYSOUT=*
//NDMBATCH.SYSIN DD *
SIGNON ESF=YES, CASE=YES
SUB PROC=NDMAPPRO -
NOTIFY=&USER -
SNODE=etvscta2 -
SNODEID=(ndmuser,!ndmuser123) -
&FRMDSN=&USER.QCTACBS.CBSFGH05.EXT.&TC.X.SORT -
&TODSN2='/apps/opt/apb/files/inputfiles/landingdir' -
&TODSN1='ETVTP0PN.BV.BCFAPBNY.RSOTSC12.PRT012'
/* |
Error I m getting while trying to call Rexx program
Code: |
INPUT DSN IS V034523.BLD.TEST
NUMBER OF ROWS = 1
***
More: +
******************************************************************************
* ISPF105 *
* *
* Output overflow *
* Line to be written greater than data set LRECL (80), EXSRTNMC record-42 *
* *
* *
* *
* *
* *
* *
* File tailoring input line: *
* SNODEID=(ndmuser,!ndmuser123) - *
* *
* Enter HELP command for further information regarding this error. *
* Press ENTER key to terminate the dialog. *
* *
|
Please help me resolving this |
|
Back to top |
|
|
enrico-sorichetti
Superior Member
Joined: 14 Mar 2007 Posts: 10873 Location: italy
|
|
|
|
what is that You do noyt understand in the message
Code: |
* Output overflow *
* Line to be written greater than data set LRECL (80), EXSRTNMC record-42 * |
the record length after the variable substitution is longer than ....
review Your code to provide shorter variables, check the lengths and provide the proper message |
|
Back to top |
|
|
Nic Clouston
Global Moderator
Joined: 10 May 2007 Posts: 2455 Location: Hampshire, UK
|
|
|
|
What does your Trace ?I or Trace I show? |
|
Back to top |
|
|
Phalgun
New User
Joined: 18 May 2009 Posts: 16 Location: Hyd
|
|
|
|
Hi Enrico ,
I m able to build JCL only till SNODE=etvscta2 -
What I need to update in LRECL so that I can generate all JCL .
My screen sharing Option is blocked .. Cannot share my Trace |
|
Back to top |
|
|
Nic Clouston
Global Moderator
Joined: 10 May 2007 Posts: 2455 Location: Hampshire, UK
|
|
|
|
No one is asking you to share your trace - we are asking you to cut and paste it as you did with your error display. |
|
Back to top |
|
|
Phalgun
New User
Joined: 18 May 2009 Posts: 16 Location: Hyd
|
|
|
|
Code: |
>L> "INPUT DSN IS "
>V> "V034523.BLD.TEST"
>O> "INPUT DSN IS V034523.BLD.TEST"
INPUT DSN IS V034523.BLD.TEST
6 *-* INFILE = STRIP(INDSN,"B","'")
>V> "V034523.BLD.TEST"
>L> "B"
>L> "'"
>F> "V034523.BLD.TEST"
7 *-* "ALLOC FI(INPUT) DA('"INFILE"') SHR"
>L> "ALLOC FI(INPUT) DA('"
>V> "V034523.BLD.TEST"
>O> "ALLOC FI(INPUT) DA('V034523.BLD.TEST"
>L> "') SHR"
>O> "ALLOC FI(INPUT) DA('V034523.BLD.TEST') SHR"
8 *-* "NEWSTACK"
>L> "NEWSTACK"
9 *-* "EXECIO * DISKR INPUT (STEM INPUT. FINIS"
>L> "EXECIO * DISKR INPUT (STEM INPUT. FINIS"
10 *-* SAY "NUMBER OF ROWS = " INPUT.0
>L> "NUMBER OF ROWS = "
>V> "2"
>O> "NUMBER OF ROWS = 2"
***
NUMBER OF ROWS = 2
11 *-* STATUS = MSG(OFF)
>L> "OFF"
>F> "ON"
12 *-* CALL SET_VARS
21 *-* SET_VARS:
22 *-* TEMP_DATE = DATE(U)
>L> "U"
>F> "03/05/12"
23 *-* TEMP_TIME = TIME()
>F> "10:39:26"
24 *-* PARSE VAR TEMP_DATE MON '/' DAY '/' YR
>>> "03"
>>> "05"
>>> "12"
25 *-* PARSE VAR TEMP_TIME HH ':' MM ':' SS
>>> "10"
>>> "39"
>>> "26"
26 *-* DATETIME = 'D'||YR||MON||DAY||'.T'||HH||MM
>L> "D"
>V> "12"
>O> "D12"
***
>V> "03"
>O> "D1203"
>V> "05"
>O> "D120305"
>L> ".T"
>O> "D120305.T"
>V> "10"
>O> "D120305.T10"
>V> "39"
>O> "D120305.T1039"
27 *-* USER = USERID()
>F> "V034523"
28 *-* RETURN
13 *-* Z = INPUT.0
>V> "2"
14 *-* Y = 1
>L> "1"
15 *-* CALL FILE_TAILOR_START
42 *-* FILE_TAILOR_START:
43 *-* CRTLIB = "'"USERID()".EXSRTND."DATETIME"."CHAR"'"
>L> "'"
>F> "V034523"
>O> "'V034523"
***
>L> ".EXSRTND."
>O> "'V034523.EXSRTND."
>V> "D120305.T1039"
>O> "'V034523.EXSRTND.D120305.T1039"
>L> "."
>O> "'V034523.EXSRTND.D120305.T1039."
>L> "CHAR"
>O> "'V034523.EXSRTND.D120305.T1039.CHAR"
>L> "'"
>O> "'V034523.EXSRTND.D120305.T1039.CHAR'"
44 *-* "FREE F(NUMDD)"
>L> "FREE F(NUMDD)"
45 *-* "ALLOC DA("CRTLIB") NEW SPACE(1 1) TRACKS RECFM(F,B) DSORG(PS)
LRECL(80) BLKSI(27920) CATALOG F(NUMDD)"
>L> "ALLOC DA("
>V> "'V034523.EXSRTND.D120305.T1039.CHAR'"
>O> "ALLOC DA('V034523.EXSRTND.D120305.T1039.CHAR'"
>L> ") NEW SPACE(1 1) TRACKS RECFM(F,B) DSORG(PS)
LRECL(80) BLKSI(27920) CATALOG F(NUMDD)"
>O> "ALLOC DA('V034523.EXSRTND.D120305.T1039.CHAR') NEW SPACE(1 1) TR
ACKS RECFM(F,B) DSORG(PS) LRECL(80) BLKSI(27920) CATALO
G F(NUMDD)"
47 *-* "FREE F(ISPFILE)"
***
>L> "FREE F(ISPFILE)"
48 *-* "ALLOC FI(ISPFILE) DA("CRTLIB") OLD"
>L> "ALLOC FI(ISPFILE) DA("
>V> "'V034523.EXSRTND.D120305.T1039.CHAR'"
>O> "ALLOC FI(ISPFILE) DA('V034523.EXSRTND.D120305.T1039.CHAR'"
>L> ") OLD"
>O> "ALLOC FI(ISPFILE) DA('V034523.EXSRTND.D120305.T1039.CHAR') OLD"
49 *-* "FREE DD(ISPCTL1 ISPCTL2)"
>L> "FREE DD(ISPCTL1 ISPCTL2)"
+++ RC(12) +++
50 *-* ADDRESS 'ISPEXEC' "LIBDEF ISPSLIB DATASET ID('SYSSUP.LOCAL.ISPSLIB'
)"
>L> "LIBDEF ISPSLIB DATASET ID('SYSSUP.LOCAL.ISPSLIB')"
51 *-* ADDRESS 'ISPEXEC' 'CONTROL ERRORS CANCEL'
>L> "CONTROL ERRORS CANCEL"
52 *-* ADDRESS 'ISPEXEC' 'FTOPEN'
>L> "FTOPEN"
53 *-* ADDRESS 'ISPEXEC' 'FTINCL JBCRD001'
>L> "FTINCL JBCRD001"
54 *-* RETURN
16 *-* CALL READ_CAN_FILE
30 *-* READ_CAN_FILE:
31 *-* DO X = Y TO Z
***
>V> "1"
>V> "2"
32 *-* PARSE UPPER VAR INPUT.X 1 CAN1 11 12 STATE 14 15 TC 19 20 PKTFL TY
PE
>C> "INPUT.1"
>>> "2822008454"
>>> "TX"
>>> "SC14"
>>> "QCTACBS.CBSFGH05.PKT.BHUD18VP"
>>> " "
33 *-* CAN1.X = STRIP(CAN1,"B")
>V> "2822008454"
>L> "B"
>F> "2822008454"
>C> "CAN1.1"
34 *-* STATE.X = STRIP(STATE,"B")
>V> "TX"
>L> "B"
>F> "TX"
>C> "STATE.1"
35 *-* TC.X = STRIP(TC,"B")
>V> "SC14"
>L> "B"
>F> "SC14"
>C> "TC.1"
36 *-* PKTFL.X = STRIP(PKTFL,"B")
>V> "QCTACBS.CBSFGH05.PKT.BHUD18VP"
>L> "B"
>F> "QCTACBS.CBSFGH05.PKT.BHUD18VP"
>C> "PKTFL.1"
37 *-* CALL FILE_TAILOR_INCLUDE
56 *-* FILE_TAILOR_INCLUDE:
57 *-* ADDRESS 'ISPEXEC' "LIBDEF ISPSLIB DATASET ID('SYSSUP.LOCAL.ISPSLI
B')"
>L> "LIBDEF ISPSLIB DATASET ID('SYSSUP.LOCAL.ISPSLIB')"
58 *-* ADDRESS 'ISPEXEC' 'FTINCL EXSRTNMC'
>L> "FTINCL EXSRTNMC"
*** |
|
|
Back to top |
|
|
enrico-sorichetti
Superior Member
Joined: 14 Mar 2007 Posts: 10873 Location: italy
|
|
|
|
the code tags... use the fucking code tags the make things more readable for people willing to help
it will also not waste time for the moderators to edit Your posts to put them
did You notice that Your firs post was not in the original format
and did You notwonder why |
|
Back to top |
|
|
Phalgun
New User
Joined: 18 May 2009 Posts: 16 Location: Hyd
|
|
|
|
Sorry Enrico , From next time I will make sure .. |
|
Back to top |
|
|
enrico-sorichetti
Superior Member
Joined: 14 Mar 2007 Posts: 10873 Location: italy
|
|
|
|
You cannot update anything,
if You want to submit the jcl You are limited to an 80 bytes lrecl |
|
Back to top |
|
|
agkshirsagar
Active Member
Joined: 27 Feb 2007 Posts: 691 Location: Earth
|
|
|
|
Srikanth,
I think your skeleton is being messed up due to ! character in the the control card data. ! is a control character. Therefore, !ndmuser123 is being treated as a variable.
You can replace the control characters by ~ by adding this statement at the top of your skeleton.
I believe your variables are starting only with &. So, you should suppress the rest.
Default control characters are =
|
|
Back to top |
|
|
Phalgun
New User
Joined: 18 May 2009 Posts: 16 Location: Hyd
|
|
|
|
Thank You Very Much Sagar , It worked fine now . Thank you all for your time . |
|
Back to top |
|
|
|