Friday, June 12, 2009

Working with Event Receiver Through SharePoint Object Model

Class For the Event Receiver

using System;
using Microsoft.SharePoint;

namespace Bijaya {
public class VendorListEventReceiver : SPListEventReceiver {

public override void FieldAdding(SPListEventProperties properties) {
properties.ErrorMessage = "You cannot change this list schema!";
properties.Cancel = true;
}

public override void FieldUpdating(SPListEventProperties properties) {
properties.ErrorMessage = "You cannot change this list schema!";
properties.Cancel = true;
}

public override void FieldDeleting(SPListEventProperties properties) {
properties.ErrorMessage = "You cannot change this list schema!";
properties.Cancel = true;
}
}
}

Bind the event handlers within this event receiver class to a list type:

<elements xmlns="http://schemas.microsoft.com/sharepoint/">

<receivers listtemplateid="10001">
<receiver>
<name>Field Adding Event</name>
<type>FieldAdding</type>
<assembly>LitwareTypes, [full 4-part assembly name goes here] </assembly>
<class>LitwareTypes.VendorListEventReceiver</class>
<sequencenumber>1000</sequencenumber>
</receiver>
<receiver>
<name>Field Updating Event</name>
<type>FieldUpdating</type>
<assembly>LitwareTypes, [full 4-part assembly name goes here] </assembly>
<class>LitwareTypes.VendorListEventReceiver</class>
<sequencenumber>1000</sequencenumber>
</receiver>
<receiver>
<name>Field Deleting Event</name>
<type>FieldDeleting</type>
<assembly>LitwareTypes, [full 4-part assembly name goes here] </assembly>
<class>LitwareTypes.VendorListEventReceiver</class>
<sequencenumber>1000</sequencenumber>
</receiver>
</receivers>
</elements>


Bind Event Receiver to a List Instance:

public override void FeatureActivated(SPFeatureReceiverProperties properties) {

SPSite siteCollection = (SPSite)properties.Feature.Parent;

SPWeb site = siteCollection.RootWeb;

SPList lstVendors = site.Lists["Vendors"];

string asmName = "Bijaya, [full 4-part assembly name goes here] ";

string listReceiverName = "Bijaya.VendorListEventReceiver";
// add event receiver to fire before, new column is added

lstVendors.EventReceivers.Add(SPEventReceiverType.FieldAdding,
asmName, listReceiverName);

// add event receiver to fire before existing column is updated
lstVendors.EventReceivers.Add(SPEventReceiverType.FieldUpdating,
asmName, listReceiverName);

// add event receiver to fire before existing column is updated
lstVendors.EventReceivers.Add(SPEventReceiverType.FieldDeleting,
asmName, listReceiverName);

}