SharePoint2010在列表及列表项的操作上给二次开发提供了方便,使开发人员很容易的就可以控制列表及列表项的相关操作。这些API都在Microsoft.SharePoint.dll中,有时候我们在操作列表项时,总会产生一些误操作,将一些重要的数据给删除掉了,后悔莫及,虽然也可以通过回收站把数据找回来,但如果回收站也给清空了,那麻烦可就大了,这时就有必要在列表项上做一个事件接收器,当有列表项要删除时,就提示用户此项的重要性,不可删除。
这就要对列表项做删除前的事件监听,如果有用户试图要删除列表项,则接收器就会禁止删除并给出提示信息,下面我们就在VS2010创建列表项删除前事件接器,如图1所示:
图1
在图1中左侧选择“SharePoint 2010”然后在右侧选中“事件接收器”,名称为:EventReceiverToItemDeleting,点击“添加”按钮,如图2所示:
图2
在图2的自定义向导中:
1) 需要哪种类型的事件接收器:因为我们是监听列表项的删除动作,所以在这里要选择“列表项事件”。
2) 哪个项应为事件源:在这里要选择列表项事件应依附于那个列表,也就是在那个列表上删除项时要附加事件,在这里选择“任务”列表。
3) 处理以下事件:在这里选择使用列表项的那个动作,因为我们是监听删除前的动作,所以这里要选择“正在删除项”,表示在删除前调用的。
上面的3项选择完成之后点击“完成”按钮,如图3所示:
图3
从图3可以看出来,SharePoint2010的事件接收器项目只有两个文件,一个是Elements.xml,另外一个是EventReceiverToItemDeleting.cs,其中Elements.xml文件主要是用来存储与事件接收器部署时相关的内容,其内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http: //schemas.microsoft.com/sharepoint/">
<Receivers ListTemplateId="107">
<Receiver>
<Name>EventReceiverToItemDeletingItemDeleting</Name>
<Type>ItemDeleting</Type>
<Assembly>$SharePoint.Project.
AssemblyFullName$</Assembly>
<Class>Example.SharePoint2010.EventReceiver.
EventReceiverToItemDeleting.
EventReceiverToItemDeleting</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
</Receivers>
</Elements>
而EventReceiverToItemDeleting.cs主要是用来编写事件接收器的代码的,如图4所示:
图4
在图4中可以看到我们创建的类继承了SPItemEventReceiver类,在SharePoint2010中所有的列表项事件都继承于SPItemEventReceiver类。而SPItemEventReceiver又继承于SPEventReceiverBase基类。然后我们就可以重载ItemDeleting方法编写删除前事件了,由于我们编写的删除前事件接收器的功能是禁止删除列表项,所以代码如下:
/// <summary>
/// 正在删除项.
/// </summary>
public override void ItemDeleting(SPItemEventProperties properties)
{
//取消删除事件操作
properties.Cancel = true;
//错误提示信息
properties.ErrorMessage = "此项非常重要,禁止删除!";
}
所有SharePoint 2010列表项事件接收器都有一个SPItemEventProperties类型的参数,所有与列表项相关的操作都可以在与参数中获得。
在ItemDeleting事件中,使用SPItemEventProperties类型参数的Cancel=true来取消删除列表项动作,然后使用ErrorMessage属性输出错误提示信息。
完成之后在VS2010的项目右键菜单中使用“部署”命令来完成事件接收器的部署,部署完成之后我们就可以测试一下此事件接收器了,如图5所示:
图5
由于我们在图1选择的事件源为“任务”列表,所以我们测试时就要删除某个任务项看是否能删除掉,在图5中点击“删除项目”,如图6所示:
图6
如图6所示,SharePoint2010弹出了错误提示信息,也就是我们在代码中使用
properties.ErrorMessage属性设置的信息。现在我们再返回到任务列表并刷新一下,如图7所示:
图7
如图7所示,任务列表中的第二项还存在,刚才的删除操作没有成功,也就是我们开发的禁止删除列表项功能事件接收器已经起作用了。