sharepoinTony

@info – The practical side of SharePoint

Posts Tagged ‘Calendar’

Epilogue to Calendar Reminder

Posted 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 where other posts surfaced as number 1, but when I review the stats for the past 12 months, the calendar post is certainly the most popular.    There is obvious interest in this topic.

Since the time of the original post, I have had several other calendar related requests and from them I have pulled one feature that might be of particular interest to those of you who found the Calendar Reminder post useful.  This is a twist on the reminder, but certainly related.

How would you like your SharePoint Calendar event email reminder to include a link to create an Outlook event for the user?

Here is how to accomplish this using SharePoint 2007

Requirements

  1. A SharePoint calendar
  2. A workflow associated with that calendar

Steps to add a link to add the event to the users Outlook calendar in the email they receive from SharePoint.

  1. Create (or go to) the event in the SharePoint calendar
  2. Open the event (view) and Right-Click on the Export Event link, Copy the link
  3. Jump over to SharePoint Designer, open the workflow for the SharePoint Calendar where the event resides
  4. In your email (or the variable used to create the message text) add in an html anchor tag and paste in the link you copied in step 2
  5. Find the “ID=” portion of the link, remove the id number and insert a lookup – use the <Add Lookup> button
  6. Select the ID of the current item for your lookup (this way the link works for any item created in this calendar)
  7. Don’t forget to add the quotes and end tag syntax to your anchor – see example below:

If you would like to add this event to your Outlook calendar, <a href=”http://webappname/sites/sitename/_vti_bin/owssvr.dll?CS=109&Cmd=Display&List={ec72e475-45aa-4f06-83e0-855ec9ca94d4}&CacheControl=1&ID=[%Calendar:ID%]&Using=event.ics“>CLICK HERE</a>, then click to Open, then click Save & Close in the Outlook calendar item.

This example provides both the Outlook calendar item and instructions on how to use it.  Notice that the portion highlighted above should contain the link you copied with the ID removed.  The link must come from your server and the specific SharePoint Calendar that you are providing to the Outlook item.

Perhaps you would rather not create such a complex workflow as the Calendar Reminder posts provide.  If want to just send an email at the time of the event creation that included the ability to add the event to the Outlook calendar – you can simplify the workflow to notify the recipients and include the above link.   This allows the user to create their own reminder using Outlook!

I want to point out that this idea originated (for me) with Laura Rogers 2009 post entitled “Appointment email Link, via SPD workflow“.  Thanks and kudos to Laura for sharing the idea and steps with the SharePoint community.

Posted in Calendar, SharePoint 2007, Tips and Tricks | Tagged: , , , | Leave a Comment »

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.

Posted in Calendar, Designer, Reminder, SharePoint 2007, Workflow | Tagged: , , | 96 Comments »

Poor Folk’s Calendar Reminder (part 1)

Posted by sharepoinTony on April 10, 2009

I received a request from a small department that has a (MOSS 2007) site on one of our SharePoint portals.  The group is an accounting group who, like most accounting groups, has a calendar full of due dates for various accounting activity.  There are a handful of those due dates which are for accountants in other locations to submit something back to this accounting group.   The accounting group establishes these due dates and enters them on this one specific SharePoint calendar.

The Problem

Although everyone involved in this process has access to the calendar, most of the remote accountants do not regulary visit the calendar.  They call and ask when something is due.  Often they don’t call, someone in the local accounting group has to call them looking for something that was due today or yesterday.

The Request

Allow the user creating the calendar item to mark it for reminders and define who should receive the reminders for each event.

Discussion

This is a sore spot for me.  Microsoft obviously knows how to enable reminders on calendars, it has been around in Outlook for a very long time.   They really should have enabled reminders in SharePoint calendars without having to fully integrate with Outlook…and in my opinion, should have enabled the features requested above as part of the base SharePoint calendar feature set.

Additionally, I know there are several very good third-party tools to accomplish this.  I also know there are numerous methods to accomplish this with some custom coding.  However, as the title of this indicates, this is one possible method which I was able to implement at no cost and doesn’t require me to tap our understaffed, overworked and highly paid developers.

I am happy to hear any and all comments, improvements, or arguments about my implementation, I believe in continuous improvement.

The Poor Folk’s Solution

After reviewing several good blogs related to this topic of setting up reminders using a workflow, I came up with the following for my solution.  Relatively easy to implement, easy to use, and flexible enough to allow some notification options for the users.  Primary requirement was to meet the basic needs of the users.

Plan of attack – Overview of solution

My workflow is actually very simple from a flow-chart point of view.  I have 4 steps, the first checks to see if a ‘reminder’ flag is set, if it isn’t the workflow stops.  The second step checks selections made by the creator of the event, sets variables, and pauses for a pre-determined amount of time – if the user chose to remind a certain number of days prior to the event.  The third step checks for a specific date reminder and pauses until that date – if that is what the user chose.  The fourth step verifies the flag after the pause and sends the email notification.

My concept evolved during the implementation of this solution.  At first I made the user select a specific date that they wanted the reminder email sent out.  This wasn’t very flexible and required the user to calculate out the dates themselves.  After talking with the primary users, I learned that they had a short list of possiblities that they expected.  The would want to set reminders 1, 2, 3, 4 or 7 days in advance of the event.  Why not just let them chose one of these options.  Since I already set up the “reminder date” column in the list from my starting concept, I decided to keep it and allow additional flexibility.  The user could then either choose a specific date for the reminder or select one of the predetermined options.

Building Steps – List Fields

I added the following fields to the Calendar list:

Reminder – This is a Yes/No column (actually setup as a Choice column with Yes/No options)

ReminderDate – This is a Date and Time column

ReminderDays – This is a Choice column, with choices of “0,1,2,3,4,7” and a default of 0

I also added ReminderStatus as a Single line of text column so that I could update it from within the workflow to provide some status information right in the calendar list (I create a standard view displaying these fields rather than the standard calendar view).  You may not want this, so consider it an optional field.

These fields need to be created first so that they are available to SharePoint Designer when creating the workflow.

Next Time:
Building Steps – People

Building Steps – Workflow 1

Calendar Reminder (Part 2)

Posted in Calendar, Designer, Lists, Reminder, SharePoint 2007, Workflow | Tagged: , , , | 3 Comments »