Friday, July 29, 2016

Celebrate Your Contacts' Birthday Without Code!


UPDATE 2: Additional feedback highlighted another issue - the process would not 're-schedule' the post correctly when changing the birthdate. This has now been resolved by tweaking the entry criteria for the second step from Great than 'TODAY()' to Not Equal 'PRIORVALUE([Contact].Next_Birthday__c)

UPDATE:After posting this article, reader's feedback made me realize there were a few things that needed 'improvement' - specifically, I've updated the entry criteria for the first action to account for updates to the birthdate field, and overhauled the formula used to calculate the next birthday to address birthdays which occur later in the year.

Salesforce provides many automation tools that allow administrators to get a lot done without writing one line of code. In some instances creating the automation is straight-forward and quick, and others require a bit of thinking and planning.
There are definitely some things that are still not possible to achieve without writing some code, but that list continues to get smaller as Salesforce improves their tools and release new ones.

NYC User Group Leader, and recently appointed Salesforce MVP David Giller  posted a question on the Success Community yesterday, asking if there is a way to use Process Builder to automatically post a chatter notice, mentioning a contact owner on a contact's birthday.

This may seem impossible, or very simple - depending on your experience with Process Builder.
The same process can be used to e-mail a contact a happy birthday e-mail, or really anything you can do from Process Builder.

Read below for a step-by-step guide on how to implement this.

Conceptually - this is an easy task:
Run some flow every day, find all the contacts that have a birthday today, and post a chatter on the record.

In reality, though - Salesforce does not allow you to schedule any jobs to run at a predetermined time without Apex. I've heard whispers that this may be a feature they introduce in the future, but have seen nothing official about this yet.
Salesforce only allows us to set automation to run when an event occurs on records - i.e. record created or record updated.

The solution that I came up with was simple enough:
  1. Create a new date field called 'Next Birtday'
  2. Set up a workflow/process flow to populate it with the next occurrence of the day/month as in the Birthdate field
  3. Set up a process flow on record update, whenever the 'Next Birthday' field is updated which schedules a future action at the 'Next Birthday' date.
  4. After this action completes - update the 'Next Birthday' field again to next year's date, which would trigger the event in point 3 above again.
This all rolled in beautifully into one process flow; I tried to be as detailed as possible so that anyone can follow, so it does have a lot of steps, but following it should be very quick.
Let's look at this step by step:
  1. Create new Date field on Contact object
    I'd like to mostly assume that you know how to create a new custom field on the contact object.
    Click here to see the Salesforce user guide with detailed instructions
    The 'Quick' version of the instruction is:

    1. Go to the Setup screen
    2. On the left navigation bar, expand Customize
    3. Expand Contacts
    4. Click on Fields
    5. Scroll down to 'Contact Custom Fields & Relationships
    6. Click New
    7. Select 'Date' field type
    8. Set the Field Label as 'Next Birthday'. You can include some help text like 'This field will automatically be updated with the next birthday for this contact.'
    9. Click Next
    10. Set Security Level or just click Next
    11. Select if you want to add the field to any of your page layouts and click Save

    This is how it will look when you are done:


  2. Create Process Flow on Contact Object
    Now to the fun part.
    From the Setup screen, expand the 'Create' menu, then expand the 'Workflow & Approvals' section, and click 'Process Builder'.Click the blue 'New' button on the top right to start a new process flow.

    Give the flow a really good name, maybe something like 'Contact - Birthday Reminder Flow' or 'Contact - Remind Owner of Contact Birthday' (I like to prefix my flows with the name of the object I am working on...)


    Click on the '+Add Object' right below Start to select the object you are going to perform this flow on. On the right side, Select Contact. Change it to start the process 'When a record is created or edited'. Open the Advanced section and check the checkbox.


    Click Save on the bottom.

    We will build two sets of Criteria/Action. The first will set the 'Next Birthday' date whenever someone sets up the Birthdate on an contact (new or existing). The second will schedule the chatter post.

    Setting 'Next Birthday'

    1. Click on the '+Add Criteria' section. 
    2. Give the criteria a really good name, something like 'Birthday is set but Next birthday is Null or Birthdate Changes'.  Leave the first radio button selected for 'Conditions are met'.
      In the Set conditions section add a row twice (we'll use a total of three rows), and then set the following:

      1. Click on the first Field and select the 'Birthdate' field, click Choose.
      2. Change the operator from 'Equals' to 'Is null'
      3. Leave the type as Boolean and the Value as False.
      4. Click on the second field and select the 'Next Birthday' field we created.
      5. Change the operator again from 'Equals' to 'Is null'
      6. This time, leave the Type as Boolean, but change the value to 'True'
      7. Click on the third field and select the Birthdate field once more.
      8. Change the Operator from 'Equals' to 'Is Changed'
      9. Leave the Type as Boolean, but change the value to 'True'
      10. Underneath the fields, change the Conditions from the first radio button (AND) to 'Customer the logic'.
      11. Type in the following logic:
        (1 AND 2) OR 3
        We are looking for a scenario where the Birthdate value is set for the first time, or any time it is changed afterwards, but even if the birthdate is not changed and the record is updated with anything, yet the 'Next Birthdate' is null.
      12. Click 'Save'
      13. When you are done it should look like this:



    3. Now let's set up the action. Click the '+Add Action' button to tell the flow what we want it to do when it find a Birthdate value without Next Birthday value.
    4. Select the Action Type 'Update Record' and give it a really cool name. Maybe something like 'Update Next Birthday'. I leave it to you.
    5. Click on 'Select a record to update' and select the first option: 'Select the Contact record that started your process', then click Choose.
    6. Leave the second radio button selected: 'No Criteria - Just update the records!'
    7. Click Find a field and select the 'Next Birthday' field
    8. Change the Type from 'Date' to 'Formula'.
    9. Click the 'Build a formula' area to open the formula editor.
    10. Paste in the following formula. If you are interested to understand it in detail, I will break it down at the end of the step-by-instructions, at the bottom of this post.
      IF (AND(MONTH([Contact].Birthdate)=2,DAY([Contact].Birthdate)=29), 
      IF (OR(MOD( YEAR(TODAY()), 400 ) = 0,AND(MOD( YEAR(TODAY()), 4 ) = 0, MOD( YEAR(TODAY()), 100 ) != 0)),
      IF (DATE(YEAR(TODAY()), 2, 29) > TODAY(),
      DATE(YEAR(TODAY()), 2, 29),
      DATE(YEAR(TODAY())+1, 2, 28)
      ),
      IF (DATE(YEAR(TODAY()), 2, 28) > TODAY(),
      DATE(YEAR(TODAY()), 2, 28),
      IF (OR(MOD( YEAR(TODAY())+1, 400 ) = 0,AND(MOD( YEAR(TODAY())+1, 4 ) = 0, MOD( YEAR(TODAY())+1, 100 ) != 0)),
      DATE(YEAR(TODAY())+1, 2, 29),
      DATE(YEAR(TODAY())+1, 2, 28)
      )
      )
      ),
      IF (
      DATE(YEAR(TODAY()), MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))>TODAY(),
      DATE(YEAR(TODAY()), MONTH([Contact].Birthdate),DAY([Contact].Birthdate )), 
      DATE(YEAR(TODAY())+1, MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))
      )
      )
    11. Click the 'Use this Formula' button and then the Save button.
    12. We are now done with the first Criteria/Action.
Scheduling the Chatter Post and Updating Next Birthday

  1. Click the next '+Add Criteria'
    1. Give it an awesomely descriptive name. Something like 'Next Birthday is Update to a date after today'. Let's see if you can think of a better name!
    2. Leave the first radio button selected under Criteria: Conditions are met
    3. Click the 'Find a field' and select the 'Next Birthday' field
    4. Change the operator from 'Equals' to 'Does Not Equal'
    5. Change type from 'Date' to 'Formula'
    6. Click the 'Build a Formula' to open the formula editor and type the simple formula:
      PRIORVALUE([Contact].Next_Birthday__c)
      ** we are simply making sure that the Next birthday field is updated **
      **   we need to have a check that will return true when it is updated  **
    7. Click 'Use this Formula'
    8. Leave the first radio button selected under conditions (AND)
    9. VERY IMPORTANT: expand the Advanced section at the bottom of the page, and select the checkbox indicating 'Do you want to execute the actions only when specified changes are made to the record?'
      Without checking this checkbox we will not be able to set a scheduled action.
    10. Click save. It should look like this:


  2. You don't need to set any Immediate actions for this criteria.
  3. Click 'Set Schedule'
  4. On the right side, set it to 0 (zero) hours after Next_Birthday__c
  5. Click Save.
  6. Under the new schedule that was created, click '+Add Action'

  7. Under 'Action Type' select 'Post to Chatter', give it the coolest name you can think of. Maybe something like 'Birthday Reminder Post'.
    Under 'Post to' select This Record
  8. Type in the message you want to post. Keep in mind that when you use a mention, it is very important to type the @ sign BEFORE selection the merge field of the user you would like to use. You can use a message like:

    @{![Contact].OwnerId} - It's {![Contact].FirstName}'s birthday today, don't forget to send them some flowers and chocolate!
  9. Click Save.
  10. One more thing we need to do - we need to update the Next Birthday field again to next year's birthday. This will re-launch this process builder and set the scheduled action for next year. This is also why we checked the 'Recursion' checkbox at the first step in this flow.
  11. Click the '+Add Action' button again
  12. Follow the exact same steps in the first 'Update Next Birthday' action described above. you should use the same formula too.
  13. Click the Save button again
  14. One more step: look at the first Criteria/Action and find the blue Stop button.
  15. Click on it and select the second radio button: 'Evaluate the next Criteria'.
    This will ensure that even when you first set a birthdate on a contact it will set the schedule!

We are now done creating the process flow. You can now click the 'Activate' button on the top right to turn it on!
Your final process should look like this



Update all existing contacts to trigger the flow for them.


Now that we have an active process flow - it will get triggered every time a contact is created/updated and has a birthdate set up.
But what about existing contacts?
The easiest way to get them all 'included' is using data loader.
Export all your existing contacts, update the 'Next Birthday' field manually in excel, and then upload them back to Salesforce. The process flow should then be triggered for them.

Some things to consider
- An organization can process up to 1,000 groups of scheduled actions per hour. If you try to process more than that, it will get postponed to the next hour.

- More importantly: An organization can have up to 30,000 pending schedules and waiting flow interviews at one time... this could have serious implications for a large organizations with a lot of contacts or one that uses scheduled actions a lot.

More details on other considerations are here.

Breaking Down the Next Birthday Formula
What makes this formula just a bit more complicated than it seems it should be is handling of leap years. Thankfully Salesforce will not let you set up a date that is invalid - this includes trying to use February 29th on a non-leap-year date.
But when we try to automatically use the person's day and month from the birthdate and include the next year - we have no way to know if that year is a leap-year.
Another complication is that we also have to consider the possibility that the next birthdate is still in this year.
We start by checking if the user's birthdate month = 2 AND day = 29.
IF ( AND( MONTH( [Contact].Birthdate)=2, DAY( [Contact].Birthdate)=29), 
If not, we can ignore any leap-year considerations and skip to the last line of the formula.
But if it is, we have to check if the next year is a leap-year. The best way to do find that out is by using the MOD() function.
Leap Years are every year that can be divided by 4 without any remainder, except for ones that can also be divided by 100, unless that can also be divided by 400 (I know, sounds complicated).
We use the MOD() function to find out if when we divide that number by 4, 100, or 400 - and check if there is any remainer.
The following line will return true if the current year is a leap-year:
IF (OR(MOD( YEAR(TODAY()), 400 ) = 0,AND(MOD( YEAR(TODAY()), 4 ) = 0, MOD( YEAR(TODAY()), 100 ) != 0)),
If it is a leap-year we will continue to check if the birthdate is bigger than (after) today:
IF (DATE(YEAR(TODAY()), 2, 29) > TODAY(),
If it is after today we need to set the Next Birthdate to 2/29 of this year using the following:
DATE(YEAR(TODAY()), 2, 29),
If it is before today, this means the next birthday will be next year, and because in this part of the formula we are dealing with a scenario where we know this year is a leap-year, then next year will definitely not be a leap-year, and we can use 2/28 as the date, and add 1 to today's year:
DATE(YEAR(TODAY())+1, 2, 28)
Now we get to the part of the IF statement that deals with - what is this year is NOT a leap year?
Again we will first check if the birthdate (replacing the 29th with 28th) has already passed this year. If not, use this year:
   IF ( DATE(YEAR(TODAY()), 2, 28) > TODAY(),
DATE(YEAR(TODAY()), 2, 28),
If the birthdate has already passed, we need to use next year, but we now need to check if next year is a leap-year:
IF (OR(MOD( YEAR(TODAY()), 400 ) = 0,AND(MOD( YEAR(TODAY()), 4 ) = 0, MOD( YEAR(TODAY()), 100 ) != 0)),
DATE(YEAR(TODAY())+1, 2, 29),
DATE(YEAR(TODAY())+1, 2, 28)
)
Finally, we get to the negative result of the first condition: if the month/day was not 2/29 - we can just use the actual day and month from the birthdate, but still need to check if the birthdate has passed to decide if the next birthdate is this year or next:
IF (
DATE(YEAR(TODAY()), MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))>TODAY(),
DATE(YEAR(TODAY()), MONTH([Contact].Birthdate),DAY([Contact].Birthdate )),  DATE(YEAR(TODAY())+1, MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))
)
This was long - but I truly hope this has been a useful read!
As always - ping me in the comments if you have any questions, ideas, or comments about this implementation!

28 comments :

  1. Awesome! trying on my sandbox right now.

    ReplyDelete
  2. Just tried and I get an error stating that the formula has an extra comma ','.
    Can you verify?

    Thanks

    ReplyDelete
    Replies
    1. Carlos, I did find a type in the formula - must have made it when I was trying to format the post... Please try now and let me know if it works!

      Delete
    2. This comment has been removed by the author.

      Delete
  3. Somebody on the community suggested this:

    IF (
    AND(MONTH([Contact].Birthdate)=2,DAY([Contact].Birthdate)=29),
    IF (
    MOD(YEAR(TODAY())+1-YEAR([Contact].Birthdate),4)<>0,
    DATE(YEAR(TODAY())+1, 2, 28),
    DATE(YEAR(TODAY())+1, 2, 29)
    ),
    DATE(YEAR(TODAY())+1, MONTH([Contact].Birthdate),DAY([Contact].Birthdate ))
    )


    when I try your updated one, I get the error "Missing ')'".
    Also, using the formula above from the community, it accepted but is not working as expected.
    I created a new sandbox, a new Contact with birthday as 07/29/1976, so I would expected to post to chatter and it didn't but created Next Birthday as 07/29/2017 as expected.
    I changed the Birthday to 07/30/1976, still no post to chatter and the Next Birthday still showing 07/29/2017, when it should be 07/30/2017, no? Unless the Next Birthday will only change when the PB is triggered again. Please advise. Thanks

    ReplyDelete
    Replies
    1. Carlos, Thank you for testing this right away and providing feedback. Your comments will allow me to improve this solution.
      There are two issues highlighted by your comments, and one thing to understand.
      1. Thing to understand: this process will only work for FUTURE dates - so if you set today as the birthdate - it will only post the chatter next year. If you set it for tomorrow - it SHOULD post tomorrow.
      2. The current formula I use to initially set the Next Birthday field is flawed. It will always use next year as the next birthday even if the birthday is later this year.
      3. The way the process is currently set up will only set the Next Birthday value when it changes from null to some value - but not if you update the birthdate.

      I will make updates to resolve issue 2 and 3 over the weekend and will update this post once ready.

      Delete
    2. Cool Ohad. I am relatively new to Salesforce but have over 25 years in IT, so my apologies for being persistent and some of my questions might come across as "naive".
      I like the formula as it addresses leap years (Many non-mainframe people totally ignore that..).
      #3 Should handle the fact that the Birthday changes, because it could be entered wrongly at 1st time. Based on your explanation, I am going to create a new Contact right now with Birthday as 07/31/1971 and tomorrow, July 31st 2016 I should expect the post on Chatter, right?
      Also, on "Scheduling the Chatter Post and Updating Next Birthday" step #9:
      "VERY IMPORTANT: expand the Advanced section at the bottom of the page, and select the checkbox indicating 'Do you want to execute the actions only when specified changes are made to the record?'
      Without checking this checkbox we will not be able to set a scheduled action."

      That "Advanced Session" is not available on the Developer Edition,so I had to try on a Sandbox of my Enterprise edition. How would you address that on the DE?
      Thanks again!

      Delete
    3. Don't feel bad, the purpose of this blog is to help others, so I am happy to field any question about my posts.
      As I stated in #2 above, right now that would not even work - it will set the Next Birthday as 7/31/2017.
      What you CAN do - is create a contact and manually set the Next Birthday as 7/31/2017 - this should post the chatter tomorrow.
      I'll have a fix for both the process and the formula by Monday morning.
      Finally - I developed this flow on a DE - so I know for certain that this checkbox is available. Can you provide a screenshot of the criteria screen you are seeing?

      Delete
    4. Carlos,
      I've updated the post with some corrections.
      First - I've updated the entry criteria to include changes to the birthdate field.
      Second - I've updated the formula to correctly handle birthdates that are later this year.

      Please try the updates and let me know if that works for you!

      Delete
    5. Ohad - this is an elegant solution. Thanks so much not only for pulling this solution together, but also for documenting it so clearly for everyone to replicate as needed.

      I just implemented this in one of my orgs and set up a birthday triggered for tomorrow.

      Hopefully I'll get confirmation in the morning that the Chatter post went up as expected.

      Stay tuned!

      👍

      Delete
  4. Ohad:

    Let use this WordPress id here.

    I tried on the DE and can't see the "Advanced option" as you mentioned. I have a screenshot when I try to post here, I can't.

    I tried the code on the Enterprise edition. Changed existing Contacts Birthday to 07/31/1071 and nothing happened. Created 2 new Contacts with Birthdays as 07/31/1996 and 08/01/1996. Again no post on chatter.

    ReplyDelete
    Replies
    1. I checked your formula and thought the new "Birthday is changed" would handle the update of the Birthday, but in my case, it did not. I am pretty much copying/pasting your code/steps and can't see why is not triggering. For sure is updating the Next Birthday field.

      Delete
    2. akacarioca-
      If you set the birthdate to 8/1/1996 - you can expect a chatter post to be created tomorrow - on the birthdate anniversary...
      It would not post if the update date is equal to the birthdate (assuming that if the user is updating it today, and the birthday is today - they realize that and don't need a reminder)
      Let me know if you see the chatter post tomorrow.

      Delete
  5. Will do, thanks.

    ReplyDelete
  6. Any idea how I can post a screenshot here? I want to show you that my DE doesn't show the "Advanced" option for the Criteria.
    Worst case, I could post a link to the screenshot.

    ReplyDelete
    Replies
    1. Unfortunately you cannot actually post pictures on here - but you can use any kind of image hosting service like https://imagebin.ca/ and post the link here.

      Delete
  7. Ohad:

    Here is a link showing my DE without the Advanced option on the Define Criteria:

    http://tinypic.com/m/jkx7p5/4

    On my Enterprise edition, I noticed that you changed the validation of Next Birthday from "great than Today" to "Does not equal formula", so I changed that and changed few Contacts to have Birthday as 08/02/1996. Hopefully I will see something tomorrow.
    Thanks for all your help,

    Carlos

    ReplyDelete
    Replies
    1. Carlos - I believe you forgot to change the first selection from
      "Only when a record is created" to
      "When a record is created or edited"

      Can you check the first box in your process flow? (the one where you selected the object)
      That would also explain why you are able to created scheduled actions even without selection that checkbox.

      Delete
  8. Thanks Ohad,

    This is a brilliant solution, I had been looking up the internet for a process builder solution on this for few days now, this page ranking higher for 'birthday email using process builder' search, would be helpful for others like me.

    I have tried the workflow solution for this and it works like a charm, unfortunately I am working on Professional edition, so no workflow!! huh, but this one came as a lifesaver.

    I have created this and it is updating the next birthdate as expected, I have tweaked the chatter post to sending an email based on contact:email field, hope I get a mail tomorrow.

    Thanks again for the solution and even more for the detailed documentation.

    ReplyDelete
    Replies
    1. My pleasure! Glad you were able to find this useful.
      Keep me posted if it works, or if you are having any issues!

      Delete
    2. It worked for updating the next birthday, but did not work for email. There were no job scheduled after I created test records (contact record's birthday being tomorrow), this led me to infer that the 1st criteria and action are working fine, but not the 2nd one, on investigating further I noted the criteria on the 2nd condition used a 'PRIORVALUE' formula, I changed this to 'nextbirthday__c ISNULL boolean False', and this scheduled the job, I may need to refine the logic but PRIORVALUE does not seem to work in this context, please check same at your end.

      Delete
  9. Quick update to my comment before: After breaking my head for some time, found an explanation on 'ISCHANGED' not working, if your field value changes from NULL to a value, similar thing is at play for 'PRIORVALUE', this results in all edited records to shoot the automated reminders as expected, but ignores the created records. to tackle this, I created 2 different steps, 1. Where logic from this post has been used, criteria: nextbirthday__c<>PRIORVALUE(nextbirthday__c), and 2nd step Criteria: nextbirthday__c ISNULL->Boolean->False. Actions will be same for both criterias, for additional caution, I also seperated the 2 actions: Send Email and Update NextBirthday__c in 2 different schedules. The solution is now working for new as well as edited records.

    ReplyDelete
    Replies
    1. I had the same issue and tried your solution. In the first step after updating criteria : Next_Birthday__c<>PRIORVALUE(Next_Birthday__c) I can't go to the second step Criteria: Next_Birthday__c -> ISNULL -> Boolean -> false...
      Because scheduled actions in the first step does'nt allow me to go to next criteria. The salesforce tells to delete the scheduled actions before moving to next criteria.

      Your reply would be a great help

      Delete
  10. Hi Ohad,

    I set up the birthday post this week and the last couple of days I am getting an error message from Salesforce. I'm not sure what is is or how to fix. Have you seen this before?

    Flow Details
    Flow Name: Birthday_Post
    Type: Workflow
    Version: 1
    Status: Active
    Flow Interview Details
    Interview Label: Birthday_Post-1_InterviewLabel
    Current User: Jazzie Gonzalez (005U0000005j5ob)
    Start time: 8/18/2017 11:41 AM
    Duration: 0 seconds
    How the Interview Started
    Jazzie Gonzalez (005U0000005j5ob) started the flow interview.
    Some of this flow's variables were set when the interview started.
    myVariable_old = 003U000001FTnyUIAT
    myVariable_current = 003U000001FTnyUIAT
    RecursiveCountVariable = 0.00
    ASSIGNMENT: myVariable_waitStartTimeAssignment
    {!myVariable_waitStartTimeVariable} Equals {!Flow.CurrentDateTime}
    Result
    {!myVariable_waitStartTimeVariable} = "8/18/2017 11:41 AM"
    DECISION: isChangedDecision2_myRule_1_Birthdate
    DECISION: myPreWaitDecision_myWait_myRule_5
    ASSIGNMENT: myWaitAssignment_myWait_myRule_5
    {!cancelWaits} Add myWait_myRule_5
    Result
    {!cancelWaits} = "[myWait_myRule_5]"


    Thanks
    Terri

    ReplyDelete
    Replies
    1. Hi Terri,
      It seems that you did not include the most important part of the error email: The error message itself :)
      Can you include the entire email message you received?

      Delete
  11. Hi Ohad,

    I created the birthday post this week and the last couple of days I have started getting this error from Salesforce. Have you seen this before? I'm not sure what it is or how to fix.
    Flow Details
    Flow Name: Birthday_Post
    Type: Workflow
    Version: 1
    Status: Active
    Flow Interview Details
    Interview Label: Birthday_Post-1_InterviewLabel
    Current User: Jazzie Gonzalez (005U0000005j5ob)
    Start time: 8/18/2017 11:41 AM
    Duration: 0 seconds
    How the Interview Started
    Jazzie Gonzalez (005U0000005j5ob) started the flow interview.
    Some of this flow's variables were set when the interview started.
    myVariable_old = 003U000001FTnyUIAT
    myVariable_current = 003U000001FTnyUIAT
    RecursiveCountVariable = 0.00
    ASSIGNMENT: myVariable_waitStartTimeAssignment
    {!myVariable_waitStartTimeVariable} Equals {!Flow.CurrentDateTime}
    Result
    {!myVariable_waitStartTimeVariable} = "8/18/2017 11:41 AM"
    DECISION: isChangedDecision2_myRule_1_Birthdate
    DECISION: myPreWaitDecision_myWait_myRule_5
    ASSIGNMENT: myWaitAssignment_myWait_myRule_5
    {!cancelWaits} Add myWait_myRule_5
    Result
    {!cancelWaits} = "[myWait_myRule_5]"

    Thanks!

    ReplyDelete
  12. Hi Ohad,

    Here is the entire message I received multiple times.

    Error element myDecision (FlowDecision).
    The flow failed to access the value for myVariable_current.Account.Name because it hasn't been set or assigned.

    This report lists the elements that the flow interview executed. The report is a beta feature.
    We welcome your feedback on IdeaExchange.
    Flow Details
    Flow Name: Birthday_Post
    Type: Workflow
    Version: 1
    Status: Active
    Flow Interview Details
    Interview Label: Birthday_Post-1_InterviewLabel
    Current User: Jazzie Gonzalez (005U0000005j5ob)
    Start time: 8/18/2017 3:35 PM
    Duration: 0 seconds
    How the Interview Started
    Jazzie Gonzalez (005U0000005j5ob) started the flow interview.
    Some of this flow's variables were set when the interview started.
    myVariable_old = 003U000001FTnyUIAT
    myVariable_current = 003U000001FTnyUIAT
    RecursiveCountVariable = 0.00
    ASSIGNMENT: myVariable_waitStartTimeAssignment
    {!myVariable_waitStartTimeVariable} Equals {!Flow.CurrentDateTime}
    Result
    {!myVariable_waitStartTimeVariable} = "8/18/2017 3:35 PM"
    DECISION: isChangedDecision2_myRule_1_Birthdate
    DECISION: myPreWaitDecision_myWait_myRule_5
    ASSIGNMENT: myWaitAssignment_myWait_myRule_5
    {!cancelWaits} Add myWait_myRule_5
    Result
    {!cancelWaits} = "[myWait_myRule_5]"

    Salesforce Error ID: 2140952111-15059 (1469970031)

    Thanks

    ReplyDelete
    Replies
    1. Terri

      The error specifically states that the issue is when trying to check or assign the value from account.name. This means that either one of your entry criteria, or one of your field assignments is referencing the account.name field - but that value has not been populated.
      It's a little hard to provide more details without seeing exactly what you did, but hopefully this gives you a good direction.

      If it's still not clear, let me know and we'll figure out how to continue from here to get it working for you.

      Delete