How to add event receiver to SharePoint2010 content type programmatically

Posted by ybbest on YBBest See other posts from YBBest or by ybbest
Published on Sat, 17 Mar 2012 03:16:58 +0000 Indexed on 2012/03/18 18:25 UTC
Read the original article Hit count: 768

Today , I’d like to show how to add event receiver to How to add event receiver to SharePoint2010 content type programmatically.

1. Create empty SharePoint Project and add a class called ItemContentTypeEventReceiver and make it inherit from SPItemEventReceiver and implement your logic as below

public class ItemContentTypeEventReceiver : SPItemEventReceiver
{
private bool eventFiringEnabledStatus;

public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
UpdateTitle(properties);
}

private void UpdateTitle(SPItemEventProperties properties)
{
SPListItem addedItem = properties.ListItem;
string enteredTitle = addedItem["Title"] as string;
addedItem["Title"] = enteredTitle + " Updated";
DisableItemEventsScope();
addedItem.Update();
EnableItemEventsScope();
}

public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
UpdateTitle(properties);
}

private void DisableItemEventsScope()
{
eventFiringEnabledStatus = EventFiringEnabled;
EventFiringEnabled = false;
}

private void EnableItemEventsScope()
{
eventFiringEnabledStatus = EventFiringEnabled;
EventFiringEnabled = true;
}
}

2.Create a Site or Web(depending or your requirements) scoped feature and implement your feature event handler as below:


public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb web = GetFeatureWeb(properties);
//http://karinebosch.wordpress.com/walkthroughs/event-receivers-theory/

string assemblyName =  System.Reflection.Assembly.GetExecutingAssembly().FullName;
const string className = "YBBEST.AddEventReceiverToContentType.ItemContentTypeEventReceiver";
SPContentType contentType= web.ContentTypes["Item"];
AddEventReceiverToContentType(className, contentType, assemblyName, SPEventReceiverType.ItemAdded, SPEventReceiverSynchronization.Asynchronous);
AddEventReceiverToContentType(className, contentType, assemblyName, SPEventReceiverType.ItemUpdated, SPEventReceiverSynchronization.Asynchronous);
contentType.Update();
}
protected static void AddEventReceiverToContentType(string className, SPContentType contentType, string assemblyName, SPEventReceiverType eventReceiverType, SPEventReceiverSynchronization eventReceiverSynchronization)
{
if (className == null) throw new ArgumentNullException("className");
if (contentType == null) throw new ArgumentNullException("contentType");
if (assemblyName == null) throw new ArgumentNullException("assemblyName");
SPEventReceiverDefinition eventReceiver = contentType.EventReceivers.Add();
eventReceiver.Synchronization = eventReceiverSynchronization;
eventReceiver.Type = eventReceiverType;
eventReceiver.Assembly = assemblyName;
eventReceiver.Class = className;
eventReceiver.Update();
}

3.Deploy your solution and now you have a event receiver that attached to the Item contentType.

You can download the complete source code here.You can also check how to add event receiver to a list using SharePoint event receiver item in Visual Studio2010 in my previous blog.


© YBBest or respective owner

Related posts about SharePoint 2010

Related posts about event receiver