sharepoinTony

@info – The practical side of SharePoint

Calendar Reminder (Part 2)

Posted by sharepoinTony on April 15, 2009

In Poor Folks Calendar Reminder (Part 1) the problem, the request, the plan of attack, and the first step in building a reminder behavior in a SharePoint 2007 calendar was covered.  This post is the final installment on this topic.

Building Steps – People

Since each calendar due date/event could have a different set of people to notify, I decided that my initial implementation of this would be simple.  I kept it simple by using a plain multi-line text field in the calendar list to capture the email addresses of the desired recipients.  So in addition to the List Fields mentioned last time, I also created the following column:

ReminderEmail – Multiple lines of text, not required, 6 lines for editing, Plain text

In the future I may make a modification to improve this feature of the reminder depending on how the email is really used.  For your reviewing pleasure, here is what my columns look like:

Reminder Columns added to Calendar List

Reminder Columns added to Calendar List

Building Steps – Workflow 1

My workflow has four steps, each described below.   To build this workflow:

  1. Launch SPD (SharePoint Designer)
  2. Open your site
  3. Select File, New, Workflow
  4. In the Workflow Designer window, Name your workflow (default is Workflow 1)
  5. Select the Calendar list that has the “reminder” columns added
  6. Check the Automatically start this workflow when a new item is created check-box
  7. Keep the check in the Allow this workflow to be manually started from an item check-box
  8. Click Next

Before we start creating Step 1, I want to add some Initiation Parameters.  I will explain why, and it will be more apparent why later, so for now just click on the Initiation… button, we will add two parameters:

  1. In the Workflow Initiation Parameters window click the Add… button
  2. Field Name: ResetDate
  3. Information Type:  Choice (menu to choose from)
  4. Click Next
  5. Enter the Choices: “No” and “Yes”
  6. Default value: No
  7. Display as: Radio buttons
  8. Click Finish
  9. Click Add…
  10. Field Name: TempDateTime (I chose this name to avoid any possible conflict with other variables, functions, reserved words, etc)
  11. Information Type: Date and Time
  12. Next
  13. Select the Use date and time item creation as default or Blank default value radio button
  14. Display format: Date and time
  15. Click Finish
  16. Click OK to save the Initiation Parameters and close the Workflow Initiation Parameters window
Workflow Initiation Parameters

Workflow Initiation Parameters

Step 1 – Check Reminder, Set Variables

Step 1 will have 4 Conditional Branch’s :

Conditions: select Compare Calendar field, then select the Reminder field in the Current item and set it equal to “No”

select Compare any data source, then select Workflow Data and the Field Initiation:ResetDate, set it equal to “No”

Actions:

select Set Field in Current Item then select the ReminderStatus field to “No Reminder Set”

select Log to History List, enter “ReminderStatus Set to No Reminder Set”

select Stop Workflow, enter “No Reminder Requested”

This first condition checks to see if the user chose to send a reminder for the event/calendar item.  If they did not (No value in the Reminder column) then we want to note that in the ReminderStatus column, log it in the workflow history and Stop the workflow.  The default for our Initiation Parameter ResetDate is No, so our workflow would stop here if the workflow automatically started on a newly created item and the user selected not to send a reminder.

For the remaining Conditions, I will assume you can select the correct components to insert and simply show you the end result.

Workflow Step 1

Workflow Step 1

Conditions: Else if Reminder equals Yes

and Initiation: ResetDate equals Yes

Actions:

Log “Reminder Requested” to the workflow history list

then set ReminderStatus to Waiting
then set ReminderDate to Initiation:TempDateTime
then Log “Set Status to Waiting, Set ReminderDate” to the workflow history list

Conditions: Else if Reminder equals No

and Initiation: ResetDate equals Yes

Actions:

Log “Reminder Requested Manually” to the workflow history list

then set ReminderStatus to Waiting
then set ReminderDate to Initiation:TempDateTime
then Log “Set Status to Waiting, Manual ReminderDate” to the workflow history list

Conditions: Else if Reminder equals Yes

and Initiation: ResetDate equals No

Actions:

Log “Reminder Requested” to the workflow history list

then set ReminderStatus to Waiting
then Log “Set Status to Waiting,Using Item ReminderDate” to the workflow history list

Step 2 – Pause Using Days

This step handles the user option of selecting the number of days prior to the event that the reminder should be sent.  This step contains the same number of Conditional Branch’s as you determine.  Mine contains 6 because I provide 6 options to the user (0,1,2,3,4,7) however I will only present a few here, the same concept applies to each that you repeat.

Conditions: If ReminderDays equals 0

Actions: Log ReminderDays is 0 to the workflow history list

If the user hasn’t selected a number of days, and the default is 0 then we want to make note of it, but continue on.

Conditions: Else if ReminderDays equals 1

Actions:

Add -1 days to Calendar:Start Time (Output to Variable:date1)

then Log “1 Day Reminder – Pausing Until:” to the workflow history list

then Log Variable:date1 to the workflow history list

then Pause until Variable:date1

Conditions: Else if ReminderDays equals 2

Actions:

Add -2 days to Calendar:Start Time (Output to Variable:date2)

then Log “2 Day Reminder – Pausing Until:” to the workflow history list

then Log Variable:date2 to the workflow history list

then Pause until Variable:date2

For each of your options simply subtract the number of days found in the ReminderDays column of the current item.

Workflow Step 2

Workflow Step 2

Step 3 – Pause Using Date

This step handles the user option of sending the reminder on a specific date.  It only contains one Conditional Branch:

Conditions: If ReminderDays equals 0

and ReminderDate is greater than or equal to Today

Actions:

Log Pausing Until Date: to the workflow history list

then Log Calendar:ReminderDate to the workflow history list

then Pause until Calendar:ReminderDate

Workflow Step 3

Workflow Step 3

Step 4 – Send Reminder

The final step in our workflow simply checks to see that we are actually supposed to send a reminder, so one Conditional Branch handles it all:

Conditions: If Reminder equals Yes

Actions:

then Log “Sending Reminder to:” to the workflow history list

then Log Calendar:ReminderEmail to the workflow history list

then Set Variable:EmailAddresses to Calendar:ReminderEmail (this allows us to use the variable in the actual email To field)

then Email Variable:EmailAddresses

then Log “Email Sent – Ending Normally” to the workflow history list

Final Discussion

So what does our new workflow do?  We collect the options the user selected when creating the Calendar item in our new columns, and use that to determine how to Pause the workflow until the correct amount of time has passed.  Then we simply pause for that time and send the email with the desired reminder text.

Why we have the Initiation Parameters should be more apparent to you now.  If the user wants to run this workflow manually because they didn’t set a reminder originally or if they want to send another reminder our workflow would run and stop without sending the reminder email without these parameters.  By asking for the two parameters when running manually we give the user the option to kick off the workflow and adjust the reminder date or add a reminder date for that instance of the workflow.   You can see how I use this in Step 1 to update the ReminderDate column and use that date to pause and send the email reminder.

Advertisements

96 Responses to “Calendar Reminder (Part 2)”

  1. Troy said

    Just wanted to say thanks for putting this together. It really helped me develop a solution for an executive request that came down this week. Thanks a lot.

  2. Kyle said

    Where it says Variable:EmailAddresses how do you set this? this is the first time this variable is mentioned in the tutorial???

    • trockwell said

      In step 4, you create the variable named EmailAddresses and set it to the Calendar:ReminderEmail column.

      When you select Actions, select Set Workflow Variable, then click on the workflow variable link that appears and select Create a new variable… Name it EmailAddresses.
      Then click on the value link and the fx button that appears, for Source leave it as Current Item, and for Field select ReminderEmail (which should be a column created in your list previously).

      The purpose behind this is to allow your users to enter email addresses into the calendar item for the people they want to receive this reminder. This part of the step pulls the email addresses entered into that calendar list item column (ReminderEmail) and assigns that value to the new Variable. In the next Action we send an email To the new variable EmailAddresses.

  3. Kyle said

    I was wondering if there was any way that you could maybe assist me with setting it up so that users can check a box and it would use their current login information to grab their Email address and they would have the option to set when they wanted to be reminded about an event. since we are still on 2003 it has to come through email not reminder.

    • trockwell said

      Hi Kyle, I created this for MOSS 2007, haven’t tested any of it in the 2003 environment, and I am not nearly as knowledgeable with 2003. So I wouldn’t be much help trying to accomplish what you are looking for. There are 3rd party web parts that do what you are asking, which may be a much easier route if you can consider the purchase. My initial guess is that you would need to do some coding to get 2003 to provide the feature/behavior you are describing.
      Regards,
      tony (SharePoint Jack)

  4. […] Calendar Reminder (Part 2) Comments (1) […]

  5. Daniel Valdes said

    ABSOLUTELY WONDERFUL. Great blog.

  6. Swetha said

    Thanks, fantastic tutorial! Worked a treat.

  7. Jennifer said

    Hello, this is awesome! Thank you so much for sharing it.. I have a couple of questions/problems…
    1. instead of the reminder going out 1 day prior to the event, I’d like it to go out 5 min after the event starts. The events are all day. Its a schedule and each day has the person’s name and they are scheduled to triage a certain area. After running this workflow I get weird dates in the log.. for instance:
    Reminder Requested
    6/25/2009 8:38 AM Comment Set Status to Waiting, Using Item ReminderDate
    6/25/2009 8:38 AM Comment 1 Day Reminder-Pausing until:
    6/25/2009 8:38 AM Comment 1/1/1900 12:00:00 AM
    6/25/2009 8:38 AM Comment System Account
    Pausing for 0 minutes

    2. Im not sure how to tell the workflow what addresses to send too and I have a specific reminder email crafted to go out..another example of the log:
    Reminder Requested
    6/24/2009 3:45 PM Comment Set Status to Waiting, Using Item ReminderDate
    6/24/2009 3:45 PM Comment 1 Day Reminder-Pausing until:
    6/24/2009 3:45 PM Comment 12/31/1899 7:00:00 PM
    6/24/2009 3:45 PM Comment System Account
    Pausing for 0 minutes
    6/24/2009 3:45 PM Comment System Account
    Pausing complete
    6/24/2009 3:45 PM Comment Sending Reminder To:

    the work flow is still in the In Progress mode..

    thanks for any help you can provide…
    Jen

    • trockwell said

      Jen,

      Question 1 – two parts. Part one – The date/time that is displaying is coming from a default date, I would say that the ReminderDate isn’t getting a value set. Check the Actions in Steps 1 and 3 to make sure it is getting a value assigned. In my example this gets set to the initiation variable in Step 1 and by Step 3 it is just being used. Check that you are selecting a Date and entering a Time when setting up the calendar event or when launching the workflow manually.
      Part two – You would have to set the ReminderDate time portion to the exact time you wanted the reminder – for example if it was an 8am meeting you would have to input “8AM 05” to have a reminder set to the date and 8:05 AM for the reminder email. Be aware that between processing time, server clock variations, and email lag time your email may not reach people until several minutes later. I suggest sending the email either shortly before or at the start of the event to make sure it arrives within the rough time span you want. Test it several times before you feel confident that it arrives when you expect it.

      Question 2 – Part of the problem, if you followed my steps closely, is that I missed an action in Step 4. It needs to include:
      then Email Variable:EmailAddresses
      Sorry I missed that line, I have updated the posting to include it now.
      Now that is added, you can see that the email will be sent to whatever email addresses you enter into the calendar event field ReminderEmail (See Step 4). If you haven’t added the custom fields to your calendar from Part 1 of this article, or caught the additional column “ReminderEmail” that I mention at the beginning of this posting under Building Steps – People, that would be the problem.

      You also have the option of creating a SharePoint group containing the people who are to receive the email (if that is fairly static) and use it rather than a column in the calendar. The Email action in SPD will allow you to select specific people, hard-code the email address, or use a SharePoint group in addition to populating the “To:” field of the email with column data.

      I think correcting these two things will at least make progress with your reminder, let me know how it goes.
      tony

  8. Jennifer said

    Thanks Tony, Ive made the changes and will try for tonight’s reminder and let you know how it goes.. 🙂

    Jen

  9. Jennifer said

    Hi Tony.. Ive been going over and over this and I still get the strange date and time : 1/1/1900 12:00:00 AM

    • trockwell said

      Jen, can you verify that your server clock is correct? It looks like you are using the Pause Using Date (Step 2) branch of the workflow – can you get a valid reminder if you use one of the other options?
      Other ideas: Check the Action where the ReminderDate is set to the Initiation variable (TempDate), if that variable hasn’t been set then it could be a cause. Also track variables Date1 and Date2 to see if they are being set correctly. Is the Start Time column a valid date?
      I would try walking through the workflow to find and track all date variables and columns, then add more “Log to history” Actions that display each of the date variables and date columns at every step and action. Then manually run the workflow (entering the initiation variables) and look at the log. That should help narrow where the crazy date is coming from.
      You can remove those extra log entries after you figure out where the date needs to be fixed.
      I am fairly confident that the ultimate problem is that one of the date variables or columns is not being populated with a valid date, but is being used by the workflow.
      tony

  10. Jennifer said

    Hi Tony, I actually fixed the date problem…but this time a new error occurred at the sending email step. I think its in the emailaddresses variable..should that be a string?

    7/7/2009 2:16 PM Comment Remider Requested
    7/7/2009 2:16 PM Comment Set Status to Waiting, Set ReminderDate
    7/7/2009 2:16 PM Comment 5 minute Reminder-Pausing until:
    7/7/2009 2:16 PM Comment 7/8/2009 12:05:00 AM
    7/7/2009 2:16 PM Comment System Account
    Pausing for 588.14468096 minutes
    7/8/2009 12:05 AM Comment System Account
    Pausing complete
    7/8/2009 12:05 AM Comment Sending Reminder To:
    7/8/2009 12:05 AM Comment
    7/8/2009 12:05 AM Error System Account
    An error has occured in Reminder Workflow

    in my reminder email calendar field I have the users email that is to get the reminder… then in the workflow I have the TO field set to variable:emailaddress and a CC to their project lead… and then the subject and the actual reminder email…
    thanks again for all of your help…
    Jen

    • trockwell said

      Hi Jen,
      If your reminder email calendar has a field with the users you should use it in the TO field rather than the variable:emailaddress unless you are setting that variable to the value of your calendar field. I think that is why the comment in the log is blank…and I know that the email will fail and error out the workflow if the email address is blank or not valid. The email address variable should be a string and the email address field in the calendar list should be plain text.
      Sounds like you are getting close to a working reminder, hang in there.
      tony

  11. Dan said

    Workflow looks good, can’t wait to see how it works… however…
    I’m getting an error on Step 4, where the action is Email Variable:EmailAddresses. When I check the workflow it highlights in red the *Variable:EmailAddresses* as being incorrect. It’s like the email address is invalid. If I put my actual email address the workflow is accepted.

    Your assistance would be greatly appreciated.

    Thx

    dan

    • trockwell said

      Dan,
      Check the TYPE for your variable. I used String because my users are entering the fully qualified email address. You probably need that type also.

  12. Jen said

    Hi Tony, the workflow is working very well with one exception…when I set the reminder for any Monday the workflow sees it as Tuesday. .and does not run..it works for every other day of the week.. including Saturday’s and Sundays.. but every Monday morning, I have to go in and manaually run the workflow to send the reminders.. so Monday reminders are always late..I can’t seem to figure it out…

    Thanks for all of your help.. hopefully you have an idea for this one..

    Jen

    • trockwell said

      Hi Jen,
      Is there any system maintenance happening on Monday mornings? My first thought is that either the system is down or something is unavailable when the timer service wants to kick off the reminders on Monday’s.
      tony

  13. Gena said

    Thanks – even I could follow your instructions. Worked the first time!

  14. Tonya Reznor said

    Ok seems everything is working ok, the workflow says emails are being sent but I have not received any notifications. I know the email is correct so I am at a loss. Any suggestions?

  15. Tonya Reznor said

    UPDATE: My emails are going through to the individuals that are CC’d on the workflow but for the email that is put in the reminderemail section; those are not coming through. Ugh frustrating because it is so close to working

    • trockwell said

      Hi Tonya,
      I would start with reviewing Step 4…double-check your reminderemail variable in the workflow, is it pulling the email from the Calendar column? If so, then check the Calendar column to make sure it is a text column. Is the email address in the calendar column valid? If there is more than one is it separated with a semi-colon (;)?

      After that, jump back to the workflow and check the email, is it using the variable in the TO column, does it look ok?

      If you have done all of that and it is still a problem, then I would add some “Log to History” actions in the workflow. Output the value of the calendar email column to see that it is reading it and displaying a valid email address format. Next, output the value of the variable after you assign that column to to it so you can see that the variable contains a valid email address. Then run a test so you can review the new log entries, hopefully you will see something there that is causing the problem.

      The only problems I have seen have been with the format of the email address. Sometime people have copied an email address that has “changed” to the display format (for example: “FirstName LastName”) and the address behind didn’t copy over, only the proper name. My guess is that it has something to do with the email address, especially since the cc is working.

      Hope this helps,
      tony

  16. Sade said

    Thank you for this workflow, it works great. Here are the messages from my workflow:
    “The email message cannot be sent make sure your outgoing emails settings for the server have been configured correctly. ”

    As far as I can tell my outgoing email is configured correctly. I am getting alerts from lists. Is there anything els I can check?

  17. Sade said

    How do you send the email to someone other than yourself?

  18. Sade said

    I apologize for so many posts. I am not sure I have completed the second to the last step in Step 4 correctly. In the work flow you choose the Action to Send Email. Once the window opens a blank email screen appears and I am not sure how to fill in that email.
    TO: what goes here? Variable:EmailAddress? and should this be just typed in?
    FROM: should this be blank or is this automatically populated by SharePoint and will this email com from the email address that is in the to/from in the outgoing mail setting in Central Admin?
    SUBJECT: should I input “Reminder” or something like that
    BODY: should this be blank?

    A second unrelated question. Can I apply this workflow to an existing calendar list provided I add the additional columns, reminderdate, etc?

    Thanks for any help you can provide

    • trockwell said

      Hi Sade,

      It sounds like you may need to check your SMTP settings in Central Admin, or the SMTP service to be sure it is all configured and running correctly. I say this because you shouldn’t have a FROM field in the email…it should be pulled from the settings.

      Anyway, I will address your other questions:
      TO:
      Notice the little Book Icon on the right of the To field in the Define E-Mail Message window. Click that icon to select Workflow Data and access your Variable. You can also select “User who created current item” or SharePoint groups, users from your address book etc. by using this “Select Users” window that the icon pops for you.
      Note that you can do the same in the CC field

      SUBJECT:
      Yes I would put something like that for the recipient to understand what the email is about. Notice the fx button at the end of the Subject field…this will let you put data from your calendar list item into the subject line.

      BODY:
      I suggest mixing some “hard-coded” text and data from the reminder. Mine has something like
      “You have a new Reminder:” and then place the calendar item Title or Description text after the colon by clicking on the Add Lookup to Body button and selecting them from the Current Item list.
      Try the various options you have and you will see that you can create a nice message in the body with content from the current item, customizing the message for each reminder.

      Final Question:
      You cannot apply the workflow to an existing calendar without rebuilding it in Visual Studio. These workflows only work on the calendar list where they are created. That is a restriction of SharePoint Designer.

      • Sade said

        Hi Tony,
        I never got back to you about this. Thank you for your thourough reply. I truly appreciate your help!

  19. Tonya Reznor said

    Well now it seems I am getting all the emails at once. If I understand this correctly, I leave the reminder days drop down at 0 if I choose a specific date otherwise I leave the date blank and select the number of days…correct?

    • trockwell said

      Hi Tonya,
      It sounds like you have the usage correct. You should leave the date blank if you want a reminder in a select number of days, or leave the reminder days at 0 if you want to use the date.

  20. Tonya Reznor said

    I have only been using one but the email is coming through as soon as I submit the reminder

  21. Tonya Reznor said

    I just put this in calendar view, selected Nov 4th as the reminder date selected 0 day reminder and the email came through immediately. and the status was completed..not correct right?

  22. Tonya Reznor said

    This just doesnt seem to be working for me…I was trying to use to to contact surgery residents to come in 7 days prior to their start date to receive their credentials and do their orientation. The emails either do not go out at all or they come in as soon as I put in the item. Maybe I am doing something wrong but I was hoping to be able to use this as a calendar and list all residents once a year and allow sharepoint to contact each one as their date comes up.
    Here is an example of what one of the workflows is telling me
    Initiator: Reznor, Tonya Item: Reznor
    Started: 11/3/2009 14:39 Status: In Progress
    Last run: 11/3/2009 14:39

    If an error occurs or this workflow stops responding, it can be terminated. Terminating the workflow will set its status to Canceled and will delete all tasks created by the workflow.
    Terminate this workflow now.

    Tasks

    The following tasks have been assigned to the participants in this workflow. Click a task to edit it. You can also view these tasks in the list Tasks.
    Assigned To

    Title
    Due Date
    Status
    Outcome

    There are no items to show in this view of the “Tasks” list. To create a new item, click “New” above.

    Edit in Browser /_layouts/images/icxddoc.gif /sites/Indianapolis/surgery_training/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser 0x0 0x1 FileType xsn 255
    Edit in Browser /_layouts/images/icxddoc.gif /sites/Indianapolis/surgery_training/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser 0x0 0x1 ProgId InfoPath.Document 255
    Edit in Browser /_layouts/images/icxddoc.gif /sites/Indianapolis/surgery_training/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser 0x0 0x1 ProgId InfoPath.Document.2 255
    Edit in Browser /_layouts/images/icxddoc.gif /sites/Indianapolis/surgery_training/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser 0x0 0x1 ProgId InfoPath.Document.3 255
    Edit in Browser /_layouts/images/icxddoc.gif /sites/Indianapolis/surgery_training/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser 0x0 0x1 ProgId InfoPath.Document.4 255
    View in Web Browser /_layouts/images/ichtmxls.gif /sites/Indianapolis/surgery_training/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 0x0 0x1 FileType xlsx 255
    View in Web Browser /_layouts/images/ichtmxls.gif /sites/Indianapolis/surgery_training/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 0x0 0x1 FileType xlsb 255
    Snapshot in Excel /_layouts/images/ewr134.gif /sites/Indianapolis/surgery_training/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 0x0 0x1 FileType xlsx 256
    Snapshot in Excel /_layouts/images/ewr134.gif /sites/Indianapolis/surgery_training/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 0x0 0x1 FileType xlsb 256

    Workflow History
    View workflow reports

    The following events have occurred in this workflow.
    Date Occurred
    Event Type
    User ID

    Description
    Outcome

    11/3/2009 14:39 Comment “Set Status to Waiting, Using Item ReminderDate”
    11/3/2009 14:39 Comment “1 Day Reminder – Pausing Until:”
    11/3/2009 14:39 Comment 1/1/1900 12:00:00 AM
    11/3/2009 14:39 Comment System Account
    Pausing for 0 minutes

    • trockwell said

      Hi Tonya,
      It looks like your workflow isn’t capturing the date correctly – notice in the workflow history that it is showing 1/1/1900 in the comment.
      I suggest walking through the steps again looking closely at your date variables. Make sure they are capturing the input value – you might want to add a “log to history” to out put the variable when it is created and when it is populated to help determine what is going wrong.
      tony

  23. Lois Lane said

    so I did everything you said in this marvelous post and I had it working fine.

    Then I decided to mess with it and try to add a ‘people’ field to the email addresses.

    that did not work.

    so I tried to edit what I had and edit it to match exactly what you had – I even deleted step #4 but it’s still not working.

    11/10/2009 5:24 PM Comment ReminderStatus Set
    11/10/2009 5:24 PM Workflow Completed System Account
    No Reminder Requested

    …is all I get.

    do I have to rebuild the whole thing from scratch?

    And how can I select the users from a list?

    Can I put the default as the author?

    Thanks!!

    • trockwell said

      It is difficult to determine what is missing or not working correctly from the details you provided. Unfortunately the best thing to do is walk through the whole workflow step-by-step to determine what isn’t working now.

      You should be able to use a people picker as long as your settings for that field ensure that you are pulling the email address rather than their name/identity. Often you end up with something other than an email address and SharePoint isn’t going back out to interpret the information in that workflow variable. I would check that variable assignment.
      You also can select “Created By” in your email TO or CC column is you always want the message to go to the creator/author of the calendar event.

      • Lois Lane said

        thank you! thank you thank you! I will try your suggestions about the names.

        I ended up rebuilding the whole thing, deleted the columns, the workflow and everything and that appeared to work except now my link using ‘Encoded Absolute URL’ does not encode correctly

        I’m getting this as a link:
        …Lists/Test%20Checklist%20Tasks/28_.000

        when the actual link is opened is much more involved.

        It DID work the first time I successully created the workflow… but not after I rebuilt it. Ugh.

      • Lois Lane said

        This worked nicely for the URL:

        http://www.sharepointdiy.com/articles/encoded-absolute-url-doesnt-work-with-a-list-in-sharepoint

      • Lois Lane said

        The ReminderDate is sort of an ‘override’ date field, correct?

        Will the ReminderDays be ignored completely? I’d like to change my workflow email notification to reflect that as opposed to what I have:

        “You have a reminder that a task is due in [ReminderDays] day(s)”

        And can I remove the EndTime column from the view? It’s a copy based off of the standard calendar view and I can’t see how to remove it. The task list is just to reflect due dates not a spanned date range.

      • Lois Lane said

        Can this be imported/exported with Designer 2007?

      • No. Workflows cannot be imported or exported with Designer – they will only work where you build them.
        If you build your workflow in Visual Studio you can apply it to different lists.
        I understand that this is different in the 2010 version.

      • Lois Lane said

        that was the answer – I had to create the column as not multi value, finish creating the workflow and test it , etc. then change the column again.

        I rebuilt this workflow so many times in the past few days that I totally forgot about that bug!

        I appreciate you taking the time to respond to my ?s and technical problems.

        This workflow now resides in a Calendar view with items that have already been created.

        When I update existing appointments for the reminders I want, even thought I reset them with a date in the future, I still get a reminder within 10 minutes. Is that normal behavior?

        Also, how should I deal with ‘recurring’ events and reminders?

        Many thanks!

      • It is not normal unless you have something setup to send the email at that time. The workflow won’t kick-off for items that were created before the workflow – it is initiated by the creation of the reminder. So if your existing events need a reminder you would need to edit them and add the reminder, then check to verify the workflow starts for that event. You may need to start the workflow manually for all previously created events that need a reminder.

        This workflow doesn’t recognize recurring events, it is a one time reminder. It was created to be a simple reminder to provide a fairly simple solution to a specific need. If you need more complex behaviors you might want to look at some 3rd party calendar web parts to provide the solution you need.

      • Lois Lane said

        Thanks.

        As a quick fix I will create the individual appointments for the ‘recurring’ events with the appropriate reminders.

        However – I think I may have something incorrectly set in the workfow.

        11/19/2009 10:29 AM Comment Reminder Requested
        11/19/2009 10:29 AM Comment Set Status to Waiting, Using ITEM Reminder Date
        11/19/2009 10:29 AM Comment ReminderDays 0
        11/19/2009 10:29 AM Comment Sending Reminder To:
        11/19/2009 10:29 AM Comment
        11/19/2009 10:29 AM Comment Email Sent – Ending Normally

        And the email was set. The date is set for next year. shouldn’t the workflow be pausing for a year? Do I need to ‘reset this’ workflow to be sure it runs for next year?

        Thanks.

      • Something is still not correct in your workflow, assuming the “Emain Sent” comment in the history log is correct. This looks like your workflow ended. Have you looked at the workflow history to see if the workflow is still running? It should be paused as you mentioned.

      • Lois Lane said

        I assume it ended as well since the email was sent. once the email is sent I have to set the new date to send manually, correct?

        Step 3 is what triggers this to move forward, correct?

        mine is (looks just like yours):

        is reminderdays equals 0
        and reminderdate is greater than or equal to today

        then

        log pausing un til date…
        log calendar reminderdate
        pause until calendar reminderdate

        So moving forward to step 4

        reminder = yes
        then
        log and send email…

  24. Lois Lane said

    ok figured out creating your own list part and displaying it in a calendar view – however my email now gets sent as soo as something is created regardless of the date. As far as I can tell the date is being set… I’ll see if I can change the logging to reflect the date that’s being set.

    11/16/2009 11:51 AM Comment 90 Day Reminder – Pausing Until:
    11/16/2009 11:51 AM Comment 1/1/1900 12:00:00 AM
    11/16/2009 11:51 AM Comment System Account
    Pausing for 0 minutes
    11/16/2009 11:55 AM Comment System Account
    Pausing complete
    11/16/2009 11:55 AM Comment Sending Reminder to: …

    Here is my item:
    Title test test 90 days
    Start Time 11/5/2010
    Description
    Item Type1
    Reminder Yes
    ReminderDate
    ReminderDays 90
    ReminderEmail xxx@abc.com
    ReminderStatus
    DateOnlyFormat 05 November 2010

    • Notice that your 2nd comment from the top display’s 1/1/1900. That is the cause of the email being sent right away. Check the variable that you are presenting in that comment/”Log to History” action. It looks like it isn’t being set so SharePoint thinks it is time to send the email.

  25. Lois Lane said

    ugh. Sorry. Sorry Sorry.

    In step 2 I was adding days to the reminderdate, not start time 😦

    • Lois Lane said

      last time before I tear all my hair out I swear….

      so I created the list on the production site – recreated the workflow. and now it looks like the ReminderEmail field is clearing itself out.

      when I open the item it’s blank, in the view the field is blank… what am I doing wrong? This is soooo not intuitive to me and I don’t know why.

      I can set it to send specifically to me but I want it to send to my multi value lookup people field. which I did have working i swear. the log just shows the workflow sending to

      • Double check that your ReminderEmail variable is set as a string within the workflow. Also, if the number of characters in your multi-value lookup is over 255 or doesn’t include semi-colons between the email addresses then this variable could behave oddly.

  26. Lois Lane said

    Here’s my log:

    11/16/2009 6:06 PM Comment Reminder Requested
    11/16/2009 6:06 PM Comment Set Status to Waiting, using ITEM ReminderDate
    11/16/2009 6:06 PM Comment ReminderDays is 0
    11/16/2009 6:06 PM Comment Pausing Until Date:
    11/16/2009 6:06 PM Comment 11/16/2009 6:10:00 PM
    11/16/2009 6:06 PM Comment System Account
    Pausing for 3.83854166666667 minutes
    11/16/2009 6:10 PM Comment System Account
    Pausing complete
    11/16/2009 6:10 PM Comment Sending Reminder to:
    11/16/2009 6:10 PM Comment
    11/16/2009 6:10 PM Comment Email Sent – Ending Normally

  27. Lois Lane said

    perhaps it has something to do with that ‘multi value’ field issue… with SPD… I’ll get back to you with after testing…

  28. Lee said

    Hey, first off thanks so much for this – being a total sharepoint newb, this is very helpful.
    Is this whole process you laid out possible if I wanted to have an option for the reminder to go out 15 mins prior to the event? Is there an easy way to integrate that?
    Thanks!

    • Lee said

      …actually, it looks like the add time to date will accept negative values, so ill try that 🙂
      Can you tell me how the reminders will react with recurring calendar items? Will it notify for each occurance?

    • I haven’t played with setting the time for reminders, but theoretically it should work. My only caution would be that you cannot depend on your server timer, network, and email system to be synched up and completely accurate. I would suggest that you leave a larger window for your reminder. For example if you have a reminder 1 hour before an event you could be confident that the email will make it prior to the event. With 15 minutes prior to the event it is POSSIBLE that the reminder would not arrive when you want it to. I have seen 5-10 minute variances between when I set an email to execute and when it actually arrives.

  29. Lois Lane said

    and everytime I change the workflow, what happens to the existing ‘paused’ workflows?

    Does the workflow in play retain the logic of the workflow that was in place when the workflow was initiated?

    • Yes the workflow logic is the version that was in place when the workflow was initiated.
      Go to your list- the calendar, and to into the list settings…select Workflow Settings under Permissions and Management. There you can see the workflows associated with that list and how many are in progress.
      You can also go out to one of your calendar events, view it in a list view rather than the calendar view, select the event and choose Workflows from the dropdown (rather than edit, etc.). This will take you to the workflow screen for that event. It displays Running and Completed workflows. I assume this is where you are looking at your log to see the comments from your workflow. However, you should be able to see if there are versions running here and how many versions you have. If you have old versions, click the “In Progress” link for that workflow – that takes you to the Workflow Status screen where you can “Terminate this workflow now”. I suggest terminating any to make sure you only run the latest version so your behavior matches your logic.

      Once the email is sent the workflow should end. No other action happens unless you initiate the workflow again by creating an event or manually starting it with a new date/time reminder.

  30. Lois Lane said

    I think I have issues:

    From my List Settings/Workflows:
    Calendar Reminder Workflow 1 0
    Calendar Reminder Workflow 1 (Previous Version:11/16/2009 6:44:28 PM) 0
    Calendar Reminder Workflow 1 (Previous Version:11/16/2009 6:48:08 PM) 0
    Calendar Reminder Workflow 1 (Previous Version:11/16/2009 6:51:48 PM) 0
    Calendar Reminder Workflow 1 (Previous Version:11/16/2009 7:08:54 PM) 2
    Calendar Reminder Workflow 1 (Previous Version:11/17/2009 10:16:38 AM) 0
    Calendar Reminder Workflow 1 (Previous Version:11/17/2009 10:21:54 AM) 1
    Calendar Reminder Workflow 1 (Previous Version:11/17/2009 9:51:02 AM) 0
    Calendar Reminder Workflow 1 (Previous Version:11/19/2009 10:51:34 AM) 25

    So terminate all the ones prior to today? Yet I’m still not sure why the email is sending as soon as i create it even though I have a date further out than today in the reminderdate.

    And I tried Editing in Datasheet and autofilling data to create multiple appointments but nothing was created.

    Shouldn’t this happen automagically?

    • I would terminate all of those running as step 1 to resolve this. It gets to complicated to recognize what behavior is caused by which version of the workflow otherwise. My guess is that emails are getting sent because of some crossed behaviors between the versions running. An update from one workflow can cause another workflow to trigger. Either that or there may be a clock problem on your server or mail server.
      I don’t believe you can edit in Datasheet to update multiple entries and get the workflow to start. I really don’t know the inner workings well enough, but I believe that the way the Windows Workflow Foundation is implemented within SharePoint 2007 limits the behavior.

  31. Lois Lane said

    I think everything is working correctly now… I deleted the other workflows and haven’t gotten any other rogue notifications.

    Still can’t bulk edit them in a datasheet though – can’t understand THAT one = so now I’m painfully creating appointments for each item 5 years in advance.

    Is there a way for me to not allow users to setup recurring events? Or if they do to NOT allow them to put in reminders?

  32. Lois Lane said

    oh and my other ?s is about what happens to the workflows if this list is migrated to another server?

    • If you created the workflow in Visual Studio you can migrate it to other lists. If the workflow and list is migrated together to another server it MIGHT work depending on the tool used to migrate them. The workflow will likely break if you are migrating the list by hand. This is because the workflow uses the internal ID of the list when it was created, when you move a list to another server (or site for that matter) SharePoint gives the list another unique internal ID. The workflow now has a mis-match that it cannot resolve. I have seen certain instances where the workflow on the new list updated the old list when they were on the same site collection.

      The best option is to use either Visual Studio or a 3rd party workflow tool to create a re-usable workflow if you plan to move them around and use them against different lists. If you are doing a one-time migration, then look at the great migration tools out there (mostly 3rd party) because they will give you a better chance of migrating the workflow along with the list.

  33. Phillip said

    Tony, I’m new to sharepoint and this was a great example. I tried it and it worked. However, I’m trying to find a workflow example that uses nintex workflow 2007 with recurring calendar events (daily,weekly,monthly,quarterly,yearly etc..). Can you point me in a direction that might have some examples.

    Thanks Much!

  34. Scott said

    Hi,

    Excellent article. I had one question. Everything works great for me except when i edit a item. It appears that once i try to edit the reminder time, it no matter what, stays with the original entry time. It won’t let me modify the time (well it lets me but email gets sent at original time). Is that correct? Forgive me if i missed it in your post, but i didn’t see it. Thanks!

    • Hi Scott,

      The behavior you are experiencing is expected. Since this is a simple workflow and not a dynamic service, once you create the item and the workflow starts – that workflow uses the reminder time at the start of the workflow. Changing the reminder time after the workflow starts has no effect on the workflow.

  35. Hope you don’t mind a comment on an old post, but I wanted to thank you so much for having this out here. Saved me a ton of work and grief.

    I have a quick question: If the event repeats, will the user get one email or one per repeat?

    Thanks,

    Jennifer Sigman
    Project Coordinator

    • Jennifer,
      Since the workflow runs upon creation, the ReminderDate will be set at that time so the email will not be sent more than once. The way this was designed, a reminder based on days prior to the event is a one time email also. I haven’t tried to get this to work on recurring events. You would have to evaluate how to get the workflow to run multiple times appropriately, or create additional workflows to trigger additional reminder email messages for recurring events.
      Hope that helps,
      regards,
      tony

      • Yes it does, thanks.

        Now I just need to track down why it thinks 4am is still 33 minutes from now… *muttering*

      • Sorry to bother you again on this old post, but I have a question: how did you get around the issue where the time is incorrect? The server is set correctly, my computer is set correctly, but the workflow has not sent me emails that should have come Monday.

        6/25/2010 2:49 PM Comment Set Status to Waiting,Using Item ReminderDate
        6/25/2010 2:49 PM Comment 2 Day Reminder – Pausing Until:
        6/25/2010 2:49 PM Comment 6/28/2010 12:00:00 AM
        6/25/2010 2:49 PM Comment System Account
        Pausing for 3430.67984693833 minutes

        What can I look for to troubleshoot this?

        Thanks for you time!

      • One thing to remember is that the email won’t necessarily be sent at a specific time that you select because it is dependent on a number of things, including how often your timer service runs, your SMTP server processing, and most likely your mail server (Exchange for example). So the most likely scenario is for these messages to come into your mailbox “sometime” on the day you expect.

        Once my server time was set correctly I never experienced the problem you are seeing here. That said, the first thing I would look at is the workflow history again. Is it still pausing?
        If you can test, I would add a “Log to History” after the pause and run the test to see if it provides any more insight.

        I would likely also look at adding a step to your workflow to set the time portion of the date (ReminderDate and Variable:date1) to something specific rather than allow SharePoint to use a default time (which appears to be 12:00 AM in your case). The Action is “Add Time to Date”. By doing this you should be able to set it to a time that will help you know when to expect the email, and give you something more to log.

        It could be that there is some other problem altogether – like the email address, the smtp service, or even your mail server that is just holding up the email from this workflow. I would try tracing the email through those systems if you don’t find anything that helps resolve it in the workflow.

  36. Patrick said

    Tony,

    Great job explaining the process, it was very easy to understand and build from your instructions.

    I am having one little issue dealing with this line (then Email Variable:EmailAddresses) in step 4…

    The part where you actually send the email is not working for me when I use the Variable:EmailAddresses. I set this variable to Calendar:ReminderEmail in the previous steps but I can’t seem to get it functioning properly. When I try and close the designer I receive and error message saying that the EmailAddresses variable will not work and then it gets highlighted in red. What I do instead is type an actual email address in its place for the time being.

    Here is the process I am following if it helps:
    1) click actions
    2) select ‘send an email’
    3) click the link that reads ‘this message’ and it brings up a blank email
    4) select the address lookup icon
    5) from the list, select ‘workflow lookup…’
    6) Source = workflow data
    7) Select Variable:EmailAddresses from the second dropdown

    Thanks for your help,
    Patrick

    • Hi Patrick,

      I suggest verifying that your EmailAddresses variable is being set to the Calendar ReminderEmail field & that field in the calendar is a text field and not a person lookup. Then verify that the Calendar ReminderEmail field is populated with valid email addresses.
      Typically, if SPD is throwing the error then there is a mismatch in the field types or the variable is not defined, or the value of the variable is invalid for the method it is being used. The three above verifications should help find the cause that correlates to one of these reasons for the error.
      Hope that helps,
      tony

  37. MD said

    Tony,

    This is a great article and I have been able to set up a calendar reminder workflow by following the instructions.
    I saved this calendar as a template and created another one from the template. When I add an entry in the new calendar, the workflow also gets kicked off, but the send time is not calculated correctly. It shows pausing for 0 time and the workflow hangs. Can you provide some suggestions as to what might be the cause?

    Thanks
    MD

    • MD, technically the workflow in 2007 shouldn’t work when you use the template to create the calendar. Workflows are connected to the list ID, so your workflow is probably confused about which list (calendar) it is supposed to run against. You will have to find all references to the list ID and make sure they all use the ID of the new calendar.

  38. […] by sharepoinTony on September 8, 2010 The Calendar Reminder (Part 2) post has been the most viewed post on my blog over the past year.  There have been a few weeks […]

  39. disabled said

    is there a less complicated alternative?

    • Not really. There are several 3rd party solutions to enable different features like this, you would need to review the options out there based on your requirements. Alternatatives include training users to use the Alert Me feature to monitor the calendar list themselves.
      Your options are build or buy, with the method described in this post being a low-effort build option. If you have a developer available, they could build a web part for you that enables the specific features you need.

  40. disabled said

    Here’s a paid alternative, but it’s REALLY not cheap:

    http://www.pentalogic.net/sharepoint-products/reminder/reminder-purchase

  41. […] The busiest day of the year was January 6th with 153 views. The most popular post that day was Calendar Reminder (Part 2). […]

  42. Drew said

    Tony,

    Everything works perfect except my Start Time for my event always comes back with a default time.

    1/18/2011 7:56 AM Comment System Account Reminder Requested ​
    1/18/2011 7:56 AM Comment System Account Set Status to Waiting, Using ITEM ReminderDate ​
    1/18/2011 7:56 AM Comment System Account 1/18/2011 12:00:00 AM ​ This is logging Current Item:Reminder Date
    1/18/2011 7:56 AM Comment System Account 1/1/0001 12:00:00 AM ​
    This is logging Parameter: TempDateTime
    1/18/2011 7:56 AM Comment System Account Monday, January 01, 0001 ​
    This is logging Current Item:Start Time
    1/18/2011 7:56 AM Comment System Account Friday, January 21, 2011 ​
    This is logging Current Item:End Time

    So if I set a Reminder Date everything works but when I use the numerical days to subtract from the start date it does not work because the Start Time is wrong.

    Do you have any suggestions to try?

    1/18/2011 7:56 AM Comment System Account Reminder Days is 0 ​
    1/18/2011 7:56 AM Comment System Account Pausing Until Date: ​
    1/18/2011 7:56 AM Comment System Account 1/18/2011 12:00:00 AM

    • It sounds like either your Start Time is not being set correctly during the initial calendar item creation. Check that and if that field is being set, then you may have to update that field in the workflow to the current date.

  43. Aron said

    Hey there…..another newbie here. First off, this is very cool! After playing around with it and reading comments I have it working the way it should. Email alerts work great too. EXCEPT….I can only do one a day. For some reason it seems like it is almost caching the start time from a previous Reminder setup.

    2/16/2011 11:13 AM Comment System Account Pausing until 2/16/2011 10:50:00 AM

    You can see here that I setup this Reminder at 11:13 AM but “pausing until” time is 10:50 AM from the previous Reminder I setup earlier. Once Sharepoint syncs and sends email, I will get the Reminder right away. I must have a setting goofed up on pulling a new time for each new Reminder. Do you have a suggestion for me on what I goofed on?

  44. Aron said

    I went back and played with this a little more today. I just can’t seem to get it to reset the time for the reminder after the first one has been created for that day. Basically once a reminder has been set (on any particular day) the time on that reminder to be sent will be the time for all other reminders for that day to be sent. Just weird!

  45. 6/22/2011 3:35 PM Comment
    No presence information System Account
    ​jdharia
    6/22/2011 3:36 PM Comment
    No presence information System Account
    “Email Sent – Ending Normally
    6/22/2011 3:36 PM Error
    No presence information System Account
    The e-mail message cannot be sent. Make sure the outgoing e-mail settings for the server are configured correctly.

    I constantly get this error.. any ideas? My email settings are working properly..

  46. Steve said

    I’m trying to apply your blog to SP2010. I’ve never tried workflows before and I’m not an IT person but I was surprised to find that it seemed to work until the final step. See below:

    7/1/2011 10:56 AM Comment System Account 1 Day Reminder – Pausing Until:

    7/1/2011 10:56 AM Comment System Account 2011-06-30T23:00:00Z

    7/1/2011 10:56 AM Comment System Account Pausing until 7/1/2011 12:00:00 AM

    7/1/2011 11:00 AM Comment System Account Pausing complete

    7/1/2011 11:00 AM Comment System Account Sending reminder to:

    7/1/2011 11:00 AM Comment System Account steve.pethers@ivs-global.com

    7/1/2011 11:00 AM Error System Account Coercion Failed: Unable to transform the input lookup data into the requested type.

    What does this error mean? I Googled the error and they were talking about using ID’s rather than strings but I can’t see where I had that option (although it does ring a bell).

  47. Ahmad said

    I don’t know why my workflow does not start automatically!! i have to start it manually..
    any idea?

  48. Kelsnz said

    Hi Steve,

    This is fabulous! Thank you very much for the easy to follow steps. Unfortunately, I have come across a couple of issues…

    1. It doesn’t matter whether I chose ReminderDays or ReminderDate, if I add an e-mail address into the ReminderEmail field, it will not send and in the log for that task its says “The e-mail message cannot be sent. Make sure the outgoing e-mail settings for the server are configured correctly”.

    2. In Step 4, if I “hard code” the e-mail address in the To box, it will send if I use ReminderDays but not ReminderDate.

    The only way I can the reminders to work is if I add my e-mail address to the “To” box and use ReminderDays. I have been over your instructions a couple of times but cannot see what I have missed. Any ideas would be fantastic!

    p.s. I use Alerts with no problems on other lists in my site.

  49. Siva said

    Great work! Worked the first time around.

    Is there way to change the from address on the reminder emails?

    • The From address is set globally in your SharePoint farm – Outgoing email settings. You can change it, but it will change for all outgoing email.

      • Siva said

        Thanks for the reply. I did notice the from address is the global SP address but the display name was the site, thought I could chage the display name. I’ll take a wonder down SP config.

        Cheers
        Siva

  50. DBB said

    New to SPD, but your setup instructions were detailed enough to walk me through it. However, I – like a couple of other posts here – am having an issue with the “then Email Variable:EmailAddresses” action line throwing a workflow error in Step 4.

    I’ve verified that:

    – my Calendar column for email recipients is of type (plain) text, and that
    – the EmailAddresses variable is defined and set to type String

    So in my mind, the error should not be due to a type mismatch, correct?

    In post #36, in addition to the two possible causes I’ve mentioned above, you state “Then verify that the Calendar ReminderEmail field is populated with valid email addresses.” I’m not sure I follow this, because at workflow design time, there isn’t even a calendar event created yet, let alone the calendar column field populated with recipient email addresses.

    Am I missing something? The error is so vague – is there possibly something else, like reserved keywords, etc. that may cause this? I’ve deleted and recreated this multiple times to no avail.

    Thanks for any help you can provide.

    -DBB

    • It sounds like you don’t have a type mismatch, however if the error is happening within Designer then I suspect that there is a problem with that variable. You can verify that by temporarily removing the use of the EmailAddresses variable in step 4. The workflow won’t be fully functional, however if you don’t get an error when saving etc. then you know that it is something to do with that variable.
      Add it back in after that exercise and then you can try to track down the error, which you should verify that is still occuring within Designer.

      • DBB said

        Oh, it’s definitely something to do with the variable. I’ve removed/recreated it several times. Right now, I’ve replaced it so that emails will be sent to Team Members, and that seems to work, so I’m not sure what/how else to troubleshoot the variable issue…

        One thing I’ve noticed: if the event is created and one forgets to select the “send reminder,” the email will not send if the event is edited after creation to choose that option. Is that normal?

        Thanks!
        DBB

Sorry, the comment form is closed at this time.

 
%d bloggers like this: