Tag: Code

For some reason (at least to my knowledge) SharePoint 2010 does not provide a function to automatically refresh a SharePoint calendar view’s items at a given interval. The lack of this feature means a full page refresh is required any time a user wishes to check for any updates. While this might be suitable for infrequently updated calendars, for calendars that get frequently updated this is not desirable.

Fortunately, SharePoint does include a JavaScript library that provides methods for updating calendar views asynchronously. The particular library of interest is:

SP.UI.ApplicationPages.CalendarInstanceRepository

This repository contains a pointer to all of the calendar instances on the current page. If there is only one instance on the page, or you’re only interested in the first instance, there is a helper method firstInstance() to retrieve that calendar. Otherwise, you can find the collection of calendars as properties on the $o_0 property. You can turn this into a list using the following code:

Using The Calendar Repositories

Now that we have access to the calendar(s) we need to use them. One way of doing this is to create a hidden content editor web part that uses the following script to call refreshItems() every 10 seconds. First, create a new file RefreshCalendar.html and publish it somewhere on your SharePoint site.

Next, add a content editor web part to the same page as the calendar view you wish to update automatically; setting the content link to the location of the RefreshCalendar.html page, and setting the Chrome Type to none to remove any headers, borders, e.t.c. (i.e. make the content editor web part invisible to the user).

Now, when a user goes to the calendar view, the items are automatically updated every 10 seconds. Because the call is asynchronous the user will not be impacted when an update occurs, even if they are adding, or editing, a calendar item.