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
Building Steps – Workflow 1
My workflow has four steps, each described below. To build this workflow:
- Launch SPD (SharePoint Designer)
- Open your site
- Select File, New, Workflow
- In the Workflow Designer window, Name your workflow (default is Workflow 1)
- Select the Calendar list that has the “reminder” columns added
- Check the Automatically start this workflow when a new item is created check-box
- Keep the check in the Allow this workflow to be manually started from an item check-box
- 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:
- In the Workflow Initiation Parameters window click the Add… button
- Field Name: ResetDate
- Information Type: Choice (menu to choose from)
- Click Next
- Enter the Choices: “No” and “Yes”
- Default value: No
- Display as: Radio buttons
- Click Finish
- Click Add…
- Field Name: TempDateTime (I chose this name to avoid any possible conflict with other variables, functions, reserved words, etc)
- Information Type: Date and Time
- Next
- Select the Use date and time item creation as default or Blank default value radio button
- Display format: Date and time
- Click Finish
- Click OK to save the Initiation Parameters and close the Workflow Initiation Parameters window

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
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
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
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.