Compiling an Endevor processor with IF-THEN-ELSE logic failing, RC(0001) RSN(0406)

book

Article ID: 140784

calendar_today

Updated On:

Products

CA Endevor Software Change Manager (SCM) CA Endevor Software Change Manager - Natural Integration (SCM) CA Endevor Software Change Manager - ECLIPSE Plugin (SCM) CA Endevor Software Change Manager - Enterprise Workbench (SCM)

Issue/Introduction

I'm trying to add a Delete Processor with IF THEN ELSE logic.  The processor ADD fails on the translate step with RC=0012.

The details in the output have this message "C1X0263E  AN ERROR OCCURRED PARSING IF-THEN-ELSE, RC(0001), RSN(0406)"
The messages guide states to report the problem with the RC and RSN codes.  The IF logoc looks good to me, it's been used in other processors.

Here is the processor in question.  It's a basic CONDELE.

//DELETE PROC AAAA='',
//            CENV2='NULL',
//            DSPPREFX='P&C1EN(1,4).&CENV2.CM',
//            DSVPREFX='V&C1EN(1,4).&CENV2.CM',
//            ZZZZ=''                   END SYMBOLS; PLACE LAST
//*
//DSOURCE  EXEC PGM=CONDELE,
//             PARM=('&C1ELEMENT'),
//             MAXRC=12
//*
//TYPEIF1  IF (&C1TY(4,3) = 'SRC' | &C1TY = 'PSB') THEN

//C1LIB1  DD DSN=&DSPPREFX..&C1STAGE..&C1TY
//           DISP=SHR
//C1LIB2  DD DSN=&DSPPREFX..&C1STAGE..LOAD,
//           DISP=SHR
//*
//TYPELSE1 ELSE
//*
//TYPEIF2  IF (&C1TY = 'JCL' | &C1TY = 'PROC' | &C1TY = 'SYSIN' |
//             &C1TY(4,3) = 'MAC' | &C1TY(4,3) = 'CPY')  THEN
//*
//C1LIB1    DD DSN=&DSPPREFX..&C1STAGE..&C1TY,
//             DISP=SHR
//*
//TYPEEND2 ENDIF
//*
//TYPEEND1 ENDIF
//*

Environment

Release : 18.0, 18.1 

Component : CA Endevor Software Change Manager

Resolution

There are errors in the coding of the IF/THEN/ELSE statements


1. The valid operators are:

  • EQ or =
  • GT or >
  • NE or ¬=
  • LE
  • LT or <
  • GE


You have this coded in your If statements:

//TYPEIF1 IF (&C1TY(4,3) = 'SRC' | &C1TY = 'PSB') THEN

You need to code it as follows: 

/TYPE1    IF (('&C1TY(4,3)' EQ 'SRC') OR ('&C1TY' EQ 'PSB')) THEN

2. When using a substring within an IF statement in a processor, you must put a set of single quotes around the substringing part of the statement. For example:
IF(('&C1ELEMENT(1,3)'='ACC'))


The working version of the processor should look like this: 
//TYPE1    IF (('&C1TY(4,3)' EQ 'SRC') OR ('&C1TY' EQ 'PSB')) THEN 
//C1LIB1  DD DISP=SHR,DSN=&DSPPREFX..&C1STAGE..&C1TY               
//C1LIB2  DD DISP=SHR,DSN=&DSPPREFX..&C1STAGE..LOAD                
//*                                                                
//TYPELSE1 ELSE                                                    
//*                                                                
//TYPE2    IF (('&C1TY' EQ 'JCL')                                  
//         OR ('&C1TY' EQ 'PROC')                                  
//         OR ('&C1TY' EQ 'SYSIN')                                 
//         OR ('&C1TY(4,3)' EQ 'MAC')                              
//         OR ('&C1TY(4,3)' EQ 'CPY')) THEN                        
//C1LIB1    DD DISP=SHR,DSN=&DSPPREFX..&C1STAGE..&C1TY             
//*                                                                
//TYPEEND1 ENDIF                                                   
//*                                                                
//TYPEEND2 ENDIF                                                   
//*