Have you ever worked with SharePoint 2007 List Item Events? If you have then you would have probably noticed that when we attach any event receiver with a list then it gets attached at the template level.
What I mean is, suppose I have created an event receiver for say a Calculations List which is basically a custom list (template id = 100) , so in SharePoint 2007 all events will be called for all lists which are created by using custom list template id = 100.
And the workaround was that, we were using code to avoid this in SP 2007, like we can check the name of a list every time an event receiver gets called and execute only for the desired list.
Sample Code:
public override void ItemAdded(SPItemEventProperties properties)
{
if (properties.ListTitle.Equals("YourList"))
{
//here you go
}
}
Now to avoid this in SharePoint 2010, the framework comes with some enhancements done in Event Receivers section.
Now we can associate a particular event receiver at Site / Web / List levels and so this is more granular now.
Basically there are three more attributes added for <Receivers> element and those are:
Scope: we can define the scope of Event Receiver to SiteCollection (Site) or Web level
RootWebOnly: event receiver will be attached to all lists under root web created using particular template
ListUrl: we can specify particular list on which Event Receiver will be active (/Lists/MyList/)
Example:
<Receivers ListTemplateId="100" ListUrl="/Lists/CustomList/">
<Receiver>
<Name></Name>
<Type></Type>
<Assembly></Assembly>
<Class></Class>
<SequenceNumber></SequenceNumber>
</Receiver>
</Receivers>