MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Messages from IDCAMS- REPRO in REXX

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Application Programming
View previous topic :: View next topic  
Author Message
deepa12
Beginner


Joined: 05 Apr 2005
Posts: 131
Topics: 64
Location: chennai

PostPosted: Fri Sep 28, 2018 1:03 am    Post subject: Messages from IDCAMS- REPRO in REXX Reply with quote

Kindly refer to the JCL code for IDCAMS REPRO. When i provide search condition as a key beyond the last record in file, IDCAMS prints the following message in SYSPRINT

REPRO IFILE(DD1IN) OFILE(DD1OUT) FROMKEY('ZZZZ') TOKEY('ZZZZ')
IDC0005I NUMBER OF RECORDS PROCESSED WAS 0
IDC3006I FUNCTION TERMINATED DUE TO BEGINNING POSITIONING ERROR



Code:
//uid1LOAD JOB (EXCP),'SAR EXTRACT',CLASS=2,MSGCLASS=Y,NOTIFY=XE57   
//DCBKP1   EXEC PGM=IDCAMS,COND=(4,LT)                               
//DD1IN    DD  DSN=XE57.X7.SMFILE,DISP=SHR                           
//DD1OUT   DD  DSN=XE57.SMFILE,DISP=SHR                               
//SYSOUT   DD  SYSOUT=*                                               
//SYSPRINT DD  SYSOUT=*                                               
//SYSU@@MP DD  SYSOUT=*                                               
//SYSIN    DD  *                                                     
  REPRO IFILE(DD1IN) OFILE(DD1OUT) FROMKEY('ZZZZ') TOKEY('ZZZZ')     
/*             


If i code similar to this in REXX, as provided below i get a different error message as specified here:
ERROR OCCURED WHILE PROCESSING 12
12 :Clause too long
19: "REPRO IFILE(IN) OFILE(TE) FROMKEY('"FKEY"') TOKEY('"FKEY"')"


Code:
INFILE = 'XE57.X7.SMFILE'                                         
   ADDRESS TSO                                                     
   "ALLOC FI(IN) DA('"INFILE"') OLD "                             
   "ALLOC FI(TE) DA('XE57.X7.SMFILE1') SHR REU"                   
   ADDRESS                                                         
   x=msg("on") ;                                                   
   SIGNAL ON ERROR                                                 
   SIGNAL ON SYNTAX                                               
   msgtrapstat = TRAPMSG("ON");                                   
   X = OUTTRAP("CMD.");                                           
   FKEY=STRIP(ZZZZ)                                               
   ADDRESS TSO                                                     
 "REPRO IFILE(IN) OFILE(TE) FROMKEY('"FKEY"') TOKEY('"FKEY"')"
    ADDRESS                                       
    SAY 'REPRO RC' REPRO RC                       
    if rc = 12  then do                           
       x=outtrap("off");                           
       msgtrapstat = TRAPMSG("OFF") ;             
       say 'ssysprint output ' cmd.0               
       do i = 1 to cmd.0                           
          say cmd.i                               
       end                                         
     end                                           
       x=outtrap("off");                           
    ADDRESS TSO " FREE F(IN)"                     
                                                   
    ADDRESS TSO  " FREE F(TE)"                     
 DO I = 1 to cmd.0                                 
    say cmd.i                                     
 end                                               
  EXIT                                             
ERROR:                                                       
SAY 'ERROR  OCCURRED WHILE PROCESSING '|| RC                 
if rc > 0 then                                               
SAY  RC ":" || ERRORTEXT(RC)                                 
                                                             
if sigl > 0 then                                             
say sigl || ":" || SOURCELINE(sigl)                         
                                                             
SAY "TRAPPED INFO" || CMD.0                                 
DO I = 1 to cmd.0                                           
   say cmd.i                                                 
end                                                         
   ADDRESS TSO " FREE F(IN)"                                 
                                                             
   ADDRESS TSO  " FREE F(TE)"                               
 EXIT                                                       
syntax:                                                     
SAY 'syntax ERROR OCCURRED WHILE PROCESSING '|| RC                 
if rc > 0 then                                               
SAY  RC ":" || ERRORTEXT(RC)           
                                       
if sigl > 0 then                       
say sigl || ":" || SOURCELINE(sigl)   
                                       
SAY "TRAPPED INFO" || CMD.0           
DO I = 1 to cmd.0                     
   say cmd.i                           
end                                   
   ADDRESS TSO " FREE F(IN)"           
                                       
   ADDRESS TSO  " FREE F(TE)"         
EXIT                                   


In the former case, from the message
IDC3006I FUNCTION TERMINATED DUE TO BEGINNING POSITIONING ERROR
i could find that the pointer is going beyond end of file. But the following message from REXX, looks like SYTNAX Error

12 :Clause too long

How to get IDC3006I from REXX also
Back to top
View user's profile Send private message Send e-mail
expat
Intermediate


Joined: 01 Mar 2007
Posts: 475
Topics: 9
Location: Welsh Wales

PostPosted: Fri Sep 28, 2018 1:44 am    Post subject: Reply with quote

I assume that you have read the meaning for the IDC3006I message and checked that all is well regarding the reord keys. i.e. the key does exist.

Should you not leave a space before the REPRO keyword in your generated control statement.
_________________
If it's true that we are here to help others,
then what exactly are the others here for ?
Back to top
View user's profile Send private message
deepa12
Beginner


Joined: 05 Apr 2005
Posts: 131
Topics: 64
Location: chennai

PostPosted: Fri Sep 28, 2018 2:17 am    Post subject: Reply with quote

Am testing for the condition that the key does not exist and also that it is beyond the last key in the file.
If i provide a key that does not exist and is a key in between 2 keys which are already present in the file then the SYSPRINT JCL message & the 1 from REXX OUTTRAP is the same
_________________
deepa
Back to top
View user's profile Send private message Send e-mail
expat
Intermediate


Joined: 01 Mar 2007
Posts: 475
Topics: 9
Location: Welsh Wales

PostPosted: Fri Sep 28, 2018 2:30 am    Post subject: Reply with quote

Checking that the key does not exist seems fair enough, but checking for a key that doesn't exist beyond the last key is just nonsense.

If you think about it, how can it exist beyond the last key in the dataset, because if it did it would itself be the last key in the dataset.
_________________
If it's true that we are here to help others,
then what exactly are the others here for ?
Back to top
View user's profile Send private message
deepa12
Beginner


Joined: 05 Apr 2005
Posts: 131
Topics: 64
Location: chennai

PostPosted: Fri Sep 28, 2018 4:00 am    Post subject: Reply with quote

I just specified the test scenario and wanted to understand how to trap this specific message in REXX so that in the REXX program i would specifically check for this message (IDC3006I FUNCTION TERMINATED DUE TO BEGINNING POSITIONING ERROR)
& understand that the key was not present in the file and that the REPRO failure is not due to anything else
_________________
deepa
Back to top
View user's profile Send private message Send e-mail
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12369
Topics: 75
Location: San Jose

PostPosted: Fri Sep 28, 2018 12:17 pm    Post subject: Reply with quote

deepa12,

It is quite amazing that you don't learn from your earlier mistakes. A few days back you had this topic

https://www.mvsforums.com/helpboards/viewtopic.php?t=12910

and the error is "Clause too long" and here we are again with the same error.

The resolution in the earlier topic was to allocate the message DD SYSTSPRT. Since it is IDCAMS REPRO you need to allocate SYSPRINT.

If you are coding a rexx to replicate the JCL version then make sure that you allocate ALL the ddnames needed.

I still don't get this nonsense of using REXX for every request which results in a huge waste of resources.
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
misi01
Advanced


Joined: 02 Dec 2002
Posts: 625
Topics: 175
Location: Stockholm, Sweden

PostPosted: Sat Sep 29, 2018 1:11 am    Post subject: Reply with quote

Kolusu.

Sometimes, the reason for writing stuff in Rexx rather than as JCL is because you want to mollycoddle (there must be a better word) the end users.

I have developed (deliberately) a panel based application in ISPF using rexx for that reason. The end users are management. To expect them to understand what SDSF is, to ensure they don't reset their prefix there by mistake etc, is totally unrealistic.

Give them a panel and some PF keys that will check whether the job has run to completion etc. They will log onto TSO, come straight into the application and ONLY use the options available there.

THAT is why you sometimes have to "protect" users from what they would consider the vagaries of TSO.
_________________
Michael
Back to top
View user's profile Send private message Send e-mail
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12369
Topics: 75
Location: San Jose

PostPosted: Sun Sep 30, 2018 12:01 pm    Post subject: Reply with quote

misi01 wrote:
Kolusu.

Sometimes, the reason for writing stuff in Rexx rather than as JCL is because you want to mollycoddle (there must be a better word) the end users.


misi01,

I agree that you need to provide an GUI interface for the end users. That is the *ONLY* thing you would provide for them. The actual process needs to be handled under the covers with an optimal solution. You don't write a REXX exec to read/update millions of records. You generate the Batch JCL and submit via INTRDR and then check for the return code and send the message/email back to the end user after successful/failure completion. For all the end user doesn't care how you got the desired results.
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
deepa12
Beginner


Joined: 05 Apr 2005
Posts: 131
Topics: 64
Location: chennai

PostPosted: Sun Sep 30, 2018 11:48 pm    Post subject: Reply with quote

I already allocated SYSPRINT, SYSTSPRT and tried. They were empty.
And i have presented the same once again

The SYSPRINT, SYSTSPRT datasets have been allocated as FB 133 . They are empty. It shows the error message on screen. But it remains the same

Code:
 INFILE = 'XE57.X7.SMFILE'                                       
    ADDRESS TSO                                                   
    "ALLOC FI(IN) DA('"INFILE"') OLD "                           
    "ALLOC FI(TE) DA('XE57.X7.SMFILE1') SHR REU"                 
    "ALLOC FI(SYSTSPRT) DA('XE57.PRINT') OLD"                     
    say rc                                                       
    "ALLOC FI(SYSPRINT) DA('XE57.PRINT.TEST') OLD"               
    say rc                                                       
    ADDRESS                                                       
    x=msg("on") ;                                                 
    SIGNAL ON ERROR                                               
    SIGNAL ON SYNTAX                                             
    FKEY=STRIP(ZZZZ)                                             
    ADDRESS TSO                                                   
     "REPRO IFILE(IN) OFILE(TE) FROMKEY('"FKEY"') TOKEY('"FKEY"')"
    ADDRESS                                                       
   x=msg("on") ;                                                   
   SIGNAL ON ERROR                                                 
   SIGNAL ON SYNTAX                                                 
   FKEY=STRIP(ZZZZ)                                                 
   ADDRESS TSO                                                     
    "REPRO IFILE(IN) OFILE(TE) FROMKEY('"FKEY"') TOKEY('"FKEY"')"   
   ADDRESS                                                         
   SAY 'REPRO RC' REPRO RC                                         
   ADDRESS TSO " FREE F(IN)"                                       
                                                                   
   ADDRESS TSO  " FREE F(TE)"                                       
   ADDRESS TSO  " FREE F(SYSPRINT)"                                 
   ADDRESS TSO  " FREE F(SYSTSPRT)"                                 
 EXIT                                                               
ERROR:                                                             
SAY 'ERROR  OCCURED WHILE PROCESSING '|| RC                         
if rc > 0 then                                                     
SAY  RC ":" || ERRORTEXT(RC)                                       
                                                                   
if sigl > 0 then                                 
say sigl || ":" || SOURCELINE(sigl)             
                                                 
   ADDRESS TSO " FREE F(IN)"                     
                                                 
   ADDRESS TSO  " FREE F(TE)"                   
   ADDRESS TSO  " FREE F(SYSPRINT)"             
   ADDRESS TSO  " FREE F(SYSTSPRT)"             
 EXIT                                           
syntax:                                         
SAY 'syntax OCCURED WHILE PROCESSING '|| RC     
if rc > 0 then                                   
SAY  RC ":" || ERRORTEXT(RC)                     
                                                 
if sigl > 0 then                                 
say sigl || ":" || SOURCELINE(sigl)             
   ADDRESS TSO " FREE F(IN)"                     
                                                 
   ADDRESS TSO  " FREE F(TE)"                   
    ADDRESS TSO  " FREE F(SYSPRINT)"       
    ADDRESS TSO  " FREE F(SYSTSPRT)"       
 EXIT                                     

_________________
deepa
Back to top
View user's profile Send private message Send e-mail
Nic Clouston
Advanced


Joined: 01 Feb 2007
Posts: 1075
Topics: 7
Location: At Home

PostPosted: Mon Oct 01, 2018 3:47 am    Post subject: Reply with quote

Why waste space and time by showing the same code again? How about cutting and pasting the screen messages.

You can save yourself a lot of typing if you omit the ADDRESS TSO as TSO is the default.

SYSPRINT & SYSTPRNT are not LRECL 133 or FB. You could try 121 & FBA.
_________________
Utility and Program control cards are NOT, repeat NOT, JCL.
Back to top
View user's profile Send private message
deepa12
Beginner


Joined: 05 Apr 2005
Posts: 131
Topics: 64
Location: chennai

PostPosted: Mon Oct 01, 2018 5:04 am    Post subject: Reply with quote

I have allocated RECFM=FBA ;LRECL=121

The following appear on screen
Code:

0                                 
0                                 
NUMBER OF RECORDS PROCESSED WAS 0
LASTCC=12                         
 ERROR  OCCURED WHILE PROCESSING 12                                   
 12 :Clause too long                                                 
 17:    "REPRO IFILE(IN) OFILE(TE) FROMKEY('"FKEY"') TOKEY('"FKEY"')"


SYSPRINT,SYSTSPRT are empty
_________________
deepa
Back to top
View user's profile Send private message Send e-mail
expat
Intermediate


Joined: 01 Mar 2007
Posts: 475
Topics: 9
Location: Welsh Wales

PostPosted: Mon Oct 01, 2018 5:13 am    Post subject: Reply with quote

expat wrote:
I assume that you have read the meaning for the IDC3006I message and checked that all is well regarding the reord keys. i.e. the key does exist.

Should you not leave a space before the REPRO keyword in your generated control statement.


Did you try this ??? This is how I code my REPRO in REXX
Code:

"REPRO IFILE(IN) OFILE(TE) FROMKEY('"FKEY"') TOKEY('"FKEY"')"

Should become
Code:

" REPRO IFILE(IN) OFILE(TE) FROMKEY('"FKEY"') TOKEY('"FKEY"')"

_________________
If it's true that we are here to help others,
then what exactly are the others here for ?
Back to top
View user's profile Send private message
Nic Clouston
Advanced


Joined: 01 Feb 2007
Posts: 1075
Topics: 7
Location: At Home

PostPosted: Mon Oct 01, 2018 9:54 am    Post subject: Reply with quote

and what does your trace say for these two items?
_________________
Utility and Program control cards are NOT, repeat NOT, JCL.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Application Programming All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group