How to add event receiver to SharePoint2010 content type programmatically
- by ybbest
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.