Sharepoint EventHandler使用总结
SharePoint的EventHandler主要有Web Level,List Level,List Item Level,Email几种。SharePoint的event handler主要是继承SPWebEventReceiver, SPEmailEventReceiver, SPListEventReceiver和SPItemEventReceiver类去实现其中相应的方法来完成我们的需求。SharePoint的EventHandler主要能够实现的功能是通过在sharepoint中进行不同的操作会触发相应的EventHandler,然后进去我们的重写的Handle程序,完成相关的操作。下面介绍一下在sharepoint中添加和部署Event Handler的主要步骤:
1. Event Handler的工程的创建,我们需要创建一个我们自己的工程并且集成sharepoint提供的event handler类,并且重写相应的方法,并且要对这个工程进行强命名,由于Eventhandler需要添加到GAC中,所以这个工程需要强命名。
2. 部署Event Handler,主要有两种方法,一是我们使用sharepoint提供的自定义Feature去添加这个EventHandler,二是使用程序添加EventHandler,两者的效果是一样的,所以可以根据自身的条件和需求来选择使用哪种方式来部署Event Handler。
3. 通过一个实例介绍Event Handler的开发和部署流程(使用SharePoint自定义Feature对其进行部署):
(1) 我们添加一个List Level的EventHandler,这个EventHandler主要是对SharePointList中Field进行Monitor,并完成相应的操作。
(2) 其部署的xml文件如下:
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
- <Receivers ListTemplateId="11111">
- <Receiver>
<Name>FieldAddedEventHandler</Name>
<Type>FieldAdded</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>Test,Version=1.0.0.0,Culture=neutral,PublicKeyToken=14238cf1401b271e</Assembly>
<Class>FieldAdd </Class>
</Receiver>
- <Receiver>
<Name>FieldAddingEventHandler</Name>
<Type>FieldAdding</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>Test,Version=1.0.0.0,Culture=neutral,PublicKeyToken=14238cf1401b271e</Assembly>
<Class>FieldAdding</Class>
</Receiver>
- <Receiver>
<Name>FieldDeletedEventHandler</Name>
<Type>FieldDeleted</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>Test,Version=1.0.0.0,Culture=neutral,PublicKeyToken=14238cf1401b271e</Assembly>
<Class>FieldDeleted </Class>
</Receiver>
- <Receiver>
<Name>FieldDeletingEventHandler</Name>
<Type>FieldDeleting</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>Test,Version=1.0.0.0,Culture=neutral,PublicKeyToken=14238cf1401b271e</Assembly>
<Class>FieldDeleting </Class>
</Receiver>
- <Receiver>
<Name>FieldUpdatedEventHandler</Name>
<Type>FieldUpdated</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>Test,Version=1.0.0.0,Culture=neutral,PublicKeyToken=14238cf1401b271e</Assembly>
<Class>FieldUpdated </Class>
</Receiver>
- <Receiver>
<Name>FieldUpdatingEventHandler</Name>
<Type>FieldUpdating</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>Test,Version=1.0.0.0,Culture=neutral,PublicKeyToken=14238cf1401b271e</Assembly>
<Class>FieldUpdating</Class>
</Receiver>
</Elements>
(1) 下面是这个Event Handler的后台code(ListEventHandler.cs):
class ListEventHandler:SPListEventReceiver
{
public override void FieldAdded(SPListEventProperties properties)
{
base.FieldAdded(properties);
// todo:
}
public override void FieldDeleted(SPListEventProperties properties)
{
base.FieldDeleted(properties);
// todo:
}
public override void FieldUpdated(SPListEventProperties properties)
{
base.FieldUpdated(properties);
// todo:
}
public override void FieldAdding(SPListEventProperties properties)
{
base.FieldAdding(properties);
// todo:
}
public override void FieldDeleting(SPListEventProperties properties)
{
base.FieldDeleting(properties);
// todo:
}
public override void FieldUpdating(SPListEventProperties properties)
{
base.FieldUpdating(properties);
// todo:
}
}
(1) 将xml文件部署到sharepoint的Features文件夹下,同时将我们工程生成的dll添加到GAC中,然后我们可以指定在那个scope上激活这自定义的Feature,也就是将EventHandler安装到哪个Site或者是Web上。
以上就实现了对SharePoint List Event Handler的开发和部署,同时我们还可以对Web Level,Item Level和Email等Event Handler进行开发和部署,具体的步骤都是一样的。
Update事件在接受处理程序的特殊性时,要被调用很多次,有时会达不到我们想要的效果,需要使用this.DisableEventFiring() 来关闭这个事件监听器,在更新完成之后使用this.EnableEventFiring() 来开启事件监听。