What is the best practice around adding event receivers across all the lists in a Site Collection?
4 Answers
As Per said, you can attach the following code to add the Event receivers to all the lists in a Site Collection:
All you need to do it to add this code in a Feature Receiver's class file. Note: I did it only for ItemAdding event but you can add other methods as per your likings.
public class Feature1EventReceiver : SPFeatureReceiver
{
// Uncomment the method below to handle the event raised after a feature has been activated.
private SPContentType fetchContentType(SPContentTypeCollection contentTypeCollection, string ID)
{
SPContentType publContentType = null;
foreach (SPContentType contentType in contentTypeCollection)
{
//if (contentType.Id.Equals(ID))
if (string.Equals(contentType.Id.ToString(), ID, StringComparison.InvariantCultureIgnoreCase))
{
publContentType = contentType;
break;
}
}
return publContentType;
}
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite siteCollection = properties.Feature.Parent as SPSite;
SPWeb myweb = siteCollection.RootWeb;
try
{
SPContentTypeCollection contentTypeCollection = siteCollection.RootWeb.ContentTypes;
SPContentType publPageContentType = fetchContentType(contentTypeCollection, "0x01");
publPageContentType.EventReceivers.Add(SPEventReceiverType.ItemAdding,
"Test.Test.Com, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ea51e61ab1378806",
"Test.Test.Com.EventReceivers");
publPageContentType.Update(true, false);
myweb.Update();
}
catch
{
return;
}
finally{
}
}
You EventReceivers.cs will look like
class EventReceivers : SPItemEventReceiver
{
public override void ItemAdding(SPItemEventProperties properties)
{
if (properties.Context != null)
{
try
{
//do something here
}
catch { return; }
}
}
}
-
-
1
-
1Do not dispose SPFeatureReceiverProperties.Feature.Parent Link: docs.spcaf.com/v5/… Do not dispose SPSite.RootWeb Link: docs.spcaf.com/v5/SPC110241_DoNotDisposeSPSiteRootWeb.html– SergeySep 21, 2014 at 12:03
If you want an event receiver on anything, then it's best to attach it to the content type Item (0x01)
Example: CharlieDigital: Programmatically Adding an Event Receiver to a Content Type
-
1
-
3There is one example at CharlieDigital: Programmatically Adding an Event Receiver to a Content Type Jun 4, 2012 at 9:33
In my opinion i cannot recommend to add the event receiver to the system content type because it will effect all content types below the system content type. This might lead to unwanted problems an conflicts when the event receiver is fired. What is the reason for adding a event receiver to every list in?
-
-
One alternative is to create a feature event receiver that adds the event receiver to the required lists. I'm not quite sure why you want to add a event receiver to all lists. Jun 4, 2012 at 11:49