1 Reply Latest reply on Sep 6, 2017 2:16 PM by Sanford Whiteman

    Soft bounced due to Velocity transform failed error.

    Priyesh Saxena

      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("&amp;","&"))

      #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

        • Re: Soft bounced due to Velocity transform failed error.
          Sanford Whiteman

          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.