Event receiver for copying an event
In SharePoint 2013, we discovered a problem with copying events that have recurring properties or the All Day setting selected. Users could not copy the event to another site in a SharePoint workflow, even when using the activity to create a new item and then copy each column. A sandboxed event receiver overcame this problem. While the name of the destination list is hard-coded in this example, I would update this code to read the name of the destination list from a SharePoint list so that site managers can configure the event receiver with whatever list they want to copy to.
namespace MyNameSpace.RecurringEventAdded
{
/// <summary>
/// List Item Events
/// </summary>
public class RecurringEventAdded : SPItemEventReceiver
{
/// <summary>
/// An item was added.
/// </summary>
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
using (SPSite site = properties.OpenSite())
{
using (SPWeb web = site.OpenWeb())
{
var destinationWeb = "http://mysite.mydomain.com/sites/mysitecollection/mysubsite";
using (SPSite destSite = new SPSite(destinationWeb))
{
using (SPWeb destWeb = destSite.OpenWeb())
{
var list = destWeb.Lists["MyCalendarList"];
var itemCopy = list.Items.Add();
itemCopy["Title"] = properties.ListItem["Title"];
itemCopy["RecurrenceData"] = properties.ListItem["RecurrenceData"];
itemCopy["EventType"] = properties.ListItem["EventType"];
itemCopy["EventDate"] = properties.ListItem["EventDate"];
itemCopy["EndDate"] = properties.ListItem["EndDate"];
itemCopy["UID"] = System.Guid.NewGuid();
itemCopy["TimeZone"] = 13;
itemCopy["Recurrence"] = -1;
itemCopy.Update();
}
}
}
}
}
}
}
Leave a Reply
You must be logged in to post a comment.