9 Replies Latest reply on Dec 10, 2018 11:03 AM by Sanford Whiteman

    Velocity - comparing to today's date

    Phillip Wild

      Ugh. I know I've asked very similar things to this before, so I feel like I should know better....but I'm having trouble comparing a date to today's date. I've successfully done this in the past with two points in time, but not when one is today's date....and that's tripping me up. Here's what I have so far. $LTD.Expiry_Date__c is a date field that comes in from Salesforce like this: "2015-11-05".

       

      ##set time zone and locale settings for date conversions
      
      #set( $TimeZone = $date.getTimeZone().getTimeZone('America/New York') )   
      #set( $locale = $date.getLocale() ) 
      
      ##set a calendar object
      
      #set( $calNow = $date.getCalendar() )
      #set( $calConst = $field.in($calNow) )
      
      #set ($validCredits = [])
      
      #if( ! $LTD.Expiry_Date__c)
      #set ($discard = $validCredits.add($LTD.Compass_ID__c))
      #else
      
      ##set travel credit expiry date and convert it to a date, then a calendar so we can compare later
      
      #set($TravelCreditExpiryDate = $LTD.Expiry_Date__c)
      #set($TravelCreditExpiryDate = $convert.parseDate($TravelCreditExpiryDate,'yyyy-MM-dd',$locale,$TimeZone))
      #set($TravelCreditExpiryDate= $date.toCalendar($TravelCreditExpiryDate))
      
      ##compare the expiry date of the travel credit to today's date.
      ##if expiry date is in the future, add to valid credits list.
      
      #if ( $calNow.compareTo($TravelCreditExpiryDate) < 0)
      #set ($discard = $validCredits.add($LTD.Compass_ID__c))
      #end
      
      #end
      

       

      Here is the error I get:

       

      Cannot get email content- <div>An error occurred when procesing the email Rendered_Email_Velocity_Error_Area_?! </div> <p>Invocation of method 'compareTo' in class java.util.GregorianCalendar threw exception java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Calendar near</p> <div><pre >?</pre></div>

       

      So either my travel credit isn't being formatted properly, or my current date $calNow isn't. I think the travel credit part is right since I've used that before. So I'm guessing it's today's date. But how can I fix this?

       

      Any ideas?

       

      Thanks in advance.

        • Re: Velocity - comparing to today's date
          Sanford Whiteman

          It's not $calNow that's the problem, because if it were null or another non-Calendar value it wouldn't have a compareTo method at all.

           

          The prob is certainly with your custom field remaining a String because it can't be converted. You have a condition in there that suggests it may be empty. In that empty case the Calendar conversion will fail, and in turn the compareTo will error out, but you haven't short-circuited the rest of the processing.

            • Re: Velocity - comparing to today's date
              Phillip Wild

              Hmm....I still don't think I get it. Since my code structure is basically this (after changing to isEmpty for logic):

               

              #if( $LTD.Expiry_Date__c.isEmpty())

              #set ($discard = $validCredits.add($LTD.Compass_ID__c))

              #else

              ##compare dates

              #end

               

              So if my first check is to see whether it's empty.....then the #else section should only be dealing with circumstances where there is a value in there, right? Since the field is a date field in Salesforce I know the output must be either empty, or yyyy-mm-dd. So why would my #else section be failing if it's only applying where the value is there?

               

              To test this further I got the output of that field for the test lead where this is failing (using preview of the email and selecting sample lead). The field value is:

               

              Expiry_Date__c=2015-12-15

               

              What am I missing here.....

               

               

                • Re: Velocity - comparing to today's date
                  Sanford Whiteman

                  It's

                   

                  America/New_York
                  

                   

                  not

                   

                  America/New York
                  

                   

                  (Was on my phone before so I didn't notice this typo.)

                   

                  Because of the typo, $TimeZone is never set. Thus the later use of $TimeZone in the conversion to Date fails silently, and the variable remains as-is, a String.

                  1 of 1 people found this helpful
                    • Re: Velocity - comparing to today's date
                      Phillip Wild

                      Ah, of course! Duh.

                       

                      Now that is solved, I went back and modified my simple "checks based on having a value" (eg. $LTD.Amount__c) to be checking on isEmpty (eg. $LTD.Amount__c.isEmpty() ).

                       

                      But here's the weird thing. Those logic checks don't seem to be working for some reason using the Preview. Here's what works:

                       

                      #elseif($LTD.Type__c == "Travel Credit" && ! $LTD.Applied_To__c && $LTD.Amount__c)

                       

                      And what doesn't:

                       

                      #elseif($LTD.Type__c == "Travel Credit" && $LTD.Applied_To__c.isEmpty() && ! $LTD.Amount__c.isEmpty() )

                       

                      I know you said above that using isEmpty is more reliable. But that's not what I'm finding in this example. Why so?

                       

                      (When I output the fields of "Applied_To" and "Amount__c" for this lead it displays as "Applied_To__c=null". So the value is definitely null in there.

                • Re: Velocity - comparing to today's date
                  Sanford Whiteman

                  Also, you're testing for Boolean false, not empty. You should be using isEmpty there.

                  1 of 1 people found this helpful
                  • Re: Velocity - comparing to today's date
                    Sanford Whiteman

                    Phillip please come back to the thread and mark one of my answers as Correct (probably the one noting the typo) for future searches, thanks.