Hello,
I'm getting soft bounce issue while using below velocity script, when I checked in the Activity log found following highlighted error. Could any one help me to understand the root cause in the scripting since i'm unable to find it.
Velocity transform failed: ; The nested exception is: <cntrl char>org.apache.velocity.exception.VelocityException: Error invoking method 'get(java.lang.Integer)' in [Ljava.lang.String; at 917-ATW-131:55806:1:static[line 218, column 33]
#set($courseId = "")
#set($timeZone = "")
#set($courseDate = "")
#set($courseName = "")
#set($courseLessonName = "")
#set($courseLessonTime1 = "")
#set($courseLessonTime2 = "")
#set($courseLessonTimeZone1 = "")
#set($courseLessonTimeZone2 = "")
#set($attendancerating = "")
#set($campaignid = "")
#set($webinar_URL0 = "www.ABC.com/login.php")
#set($webinar_URL1 = "")
#set($attendancerating = ${lead.sfLeadAttendanceRating})
#set($WebinarData = ${lead.phoenixWebinarURLs})
#set($WebinarData = $WebinarData.replace("&","&"))
#foreach($data in $WebinarData.split(";"))
#if($data == "")
#set($webinar_URL1 = $webinar_URL0)
#elseif(!$data.equals(""))
#set($templateData = $data.split("\|\|"))
#set($courseId = $templateData[0])
#set($courseDate = $templateData[1])
#set($timeZone = $templateData[2])
#set($courseName = $templateData[3])
#set($courseLessonName = $templateData[4])
#set($courseWebinarURL = $templateData[5])
#set($courseLessonTime1 = $templateData[6])
#set($courseLessonTimeZone1 = $templateData[7])
#set($courseLessonTime2 = $templateData[8])
#set($courseLessonTimeZone2 = $templateData[9])
#set($courseQuiz = $templateData[10])
#set($campaignid = $templateData[11].replace("_",""))
#break
#end
#end
#set($courseQuizpart= $courseQuiz)
#if($lead.phoenixWebinarURLs.equals(""))
<a style="color: #ffffff; text-decoration: none;" href="https://${webinar_URL1}?leadId=${lead.mongoLeadId}&email=${lead.Email}&zone=${lead.Webinar_Timezone__c}&campaign_id=${campaignid}"><span style="text-decoration: none; color: #ffffff;">TEST YOUR KNOWLEDGE</span></a>
#elseif($courseQuiz == "")
<a style="color: #ffffff; text-decoration: none;" href="https://${webinar_URL1}?leadId=${lead.mongoLeadId}&email=${lead.Email}&zone=${lead.Webinar_Timezone__c}&campaign_id=${campaignid}"><span style="text-decoration: none; color: #ffffff;">TEST YOUR KNOWLEDGE</span></a>
#else
<a style="color: #ffffff; text-decoration: none;" href="https://${courseQuizpart}?leadId=${lead.mongoLeadId}&email=${lead.Email}&zone=${lead.Webinar_Timezone__c}&campaign_id=${campaignid}"><span style="text-decoration: none; color: #ffffff;">TEST YOUR KNOWLEDGE</span></a>
#end
Thanks,
Priyesh
Please, please use syntax highlighting when posting code. Screenshot of the the Advanced Editor:
An error invoking get() occurs when you try to access an integer array index that doesn't exist.
There are also some things in the code I would definitely clean up as it's far too long for the task. For one, this condition doesn't make sense:
#if( $data == "" )
#elseif(!$data.equals(""))
#end
Since $data can't be null as it comes from a call to split(), looks like you can just use:
#if( $data.isEmpty() )
#else
#end
Also, if you're trying to do a sort of "destructuring assignment" from an array, set up a template and use object properties for cleaner code:
#set( $courseTemplate = "courseId||courseDate||timeZone||courseName" )
#set( $courseFields = $courseTemplate.split("\|\|") )
#set( $courseValues = $data.split("\|\|") )
#set( $course = {} )
#foreach( $value in $courseValues )
#set( $course[$courseFields[$math.sub($velocityCount,1)]] = $value )
#end
This method lets you instantly reorder or remove elements from the expected data.
I recommend you refactor the code. This will help you isolate where the bad index is being accessed.