mainframejclrexxispf

Invalid length error while passing parameters to ispf macro from rexx code


I have written a macro to change a string all members of PDS. I am passing PDS, existing value and new value via JCL. I am getting invalid length error while passing arguments to ispf macro using rexx. Error is :

ISPS108 Invalid length    -/-Parameter 'PARM' exceeds the allowable length.

My REXX code - IWPURDX is :

TRACE "ALL"                                                         
ARG PDS STRING1 STRING2 .                                           
MAC  = 'TEMPMAC'                               /* Macro name        
*/                                                                  
PDS = STRIP(PDS,"B","'")                                            
STRING1 = STRIP(STRING1,"B","'")                                    
STRING2 = STRIP(STRING2,"B","'")                                    
S12 = STRING1 || " " || STRING2                                     
SAY "STRING1" STRING1                                               
SAY "STRING2" STRING2                                               
SAY "S12" S12                                                       
SAY "LENGTH" LENGTH("S12")                                          
X = OUTTRAP("LIBMEM.")                         /* Trap output of TSO
*/                                                                  
 ADDRESS TSO "LISTDS '"PDS"' M"                                     
 X = OUTTRAP("OFF")                                           

DO I = 7 TO LIBMEM.0                                         
  LIBMEM.I = STRIP(LIBMEM.I)                   /* Member name
*/                                                           
  ADDRESS ISPEXEC "EDIT DATASET ('"PDS"("LIBMEM.I")') " ||,  
    "MACRO ("MAC") PARM ("S12")"                             
  SAY I RC LIBMEM.I                                          
END

ISPF Macro - TEMPMAC is :

 /*REXX*/                                       
 TRACE "ALL"                                    
SAY "TEMPMAC"                                   
ADDRESS ISREDIT "MACRO (PARM) PROCESS"          
PARSE VAR PARM STRING1 STRING2                  
ADDRESS ISREDIT "CHANGE ALL 'STRING1' 'STRING2'"
C_RC = RC                                       
ADDRESS ISREDIT "END"                           
EXIT C_RC                                       

In JCL, I am calling them via below ISPF command :

//REXX  EXEC PGM=IKJEFT01,REGION=32M                               
//SYSPRINT DD  SYSOUT=*                                            
//SYSTSIN  DD  *                                                   
  ISPSTART CMD(%IWUPDRX 'PPPRG3.BASE.WRJCL' '2016-01-01' 'IWPULDT')
/*                                                                 

I also printed the length so string passed to macro - it says 3. I am not able to get root cause of error. Can somebody please help ?


Solution

  • Think your edit PARM is waiting for a variable name, not the value.

    ADDRESS ISPEXEC "EDIT DATASET ('"PDS"("LIBMEM.I")') " ||,  
        "MACRO ("MAC") PARM ("S12")"
    

    So try to replace "... PARM ("S12")" with "... PARM (S12)"