禁止删除列表项的SharePoint2010事件接收器

SharePoint2010在列表及列表项的操作上给二次开发提供了方便,使开发人员很容易的就可以控制列表及列表项的相关操作。这些API都在Microsoft.SharePoint.dll中,有时候我们在操作列表项时,总会产生一些误操作,将一些重要的数据给删除掉了,后悔莫及,虽然也可以通过回收站把数据找回来,但如果回收站也给清空了,那麻烦可就大了,这时就有必要在列表项上做一个事件接收器,当有列表项要删除时,就提示用户此项的重要性,不可删除。

这就要对列表项做删除前的事件监听,如果有用户试图要删除列表项,则接收器就会禁止删除并给出提示信息,下面我们就在VS2010创建列表项删除前事件接器,如图1所示:

VS2010选择事件接收器项目

图1

在图1中左侧选择“SharePoint 2010”然后在右侧选中“事件接收器”,名称为:EventReceiverToItemDeleting,点击“添加”按钮,如图2所示:

VS2010选择事件接收器设置

图2

在图2的自定义向导中:

  1. 需要哪种类型的事件接收器:因为我们是监听列表项的删除动作,所以在这里要选择“列表项事件”。
  2. 哪个项应为事件源:在这里要选择列表项事件应依附于那个列表,也就是在那个列表上删除项时要附加事件,在这里选择“任务”列表。
  3. 处理以下事件:在这里选择使用列表项的那个动作,因为我们是监听删除前的动作,所以这里要选择“正在删除项”,表示在删除前调用的。

上面的3项选择完成之后点击“完成”按钮,如图3所示:

事件接收器项目代码

图3

从图3可以看出来,SharePoint2010的事件接收器项目只有两个文件,一个是Elements.xml,另外一个是EventReceiverToItemDeleting.cs,其中Elements.xml文件主要是用来存储与事件接收器部署时相关的内容,其内容如下:

01 <?xml version="1.0" encoding="utf-8"?>
03   <Receivers ListTemplateId="107">
04       <Receiver>
05         <Name>EventReceiverToItemDeletingItemDeleting</Name>
06         <Type>ItemDeleting</Type>
07         <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
08         <Class>Example.SharePoint2010.EventReceiver.
09 EventReceiverToItemDeleting.EventReceiverToItemDeleting</Class>
10         <SequenceNumber>10000</SequenceNumber>
11       </Receiver>
12   </Receivers>
13 </Elements>

而EventReceiverToItemDeleting.cs主要是用来编写事件接收器的代码的,如图4所示:

ItemDeleting事件接收器代码

图4

在图4中可以看到我们创建的类继承了SPItemEventReceiver类,在SharePoint2010中所有的列表项事件都继承于SPItemEventReceiver类。而SPItemEventReceiver又继承于SPEventReceiverBase基类。然后我们就可以重载ItemDeleting方法编写删除前事件了,由于我们编写的删除前事件接收器的功能是禁止删除列表项,所以代码如下:

01 using System;
02 using System.Security.Permissions;
03 using Microsoft.SharePoint;
04 using Microsoft.SharePoint.Security;
05 using Microsoft.SharePoint.Utilities;
06 using Microsoft.SharePoint.Workflow;
07   
08 namespace Example.SharePoint2010.EventReceiver.EventReceiverToItemDeleting
09 {
10     /// <summary>
11     /// 列表项事件
12     /// </summary>
13     public class EventReceiverToItemDeleting : SPItemEventReceiver
14     {
15        /// <summary>
16        /// 正在删除项.
17        /// </summary>
18        public override void ItemDeleting(SPItemEventProperties properties)
19        {
20            //取消删除事件操作
21            properties.Cancel = true;
22            //错误提示信息
23            properties.ErrorMessage = "此项非常重要,禁止删除!";
24        }
25     }
26 }

所有SharePoint 2010列表项事件接收器都有一个SPItemEventProperties类型的参数,所有与列表项相关的操作都可以在与参数中获得。

在ItemDeleting事件中,使用SPItemEventProperties类型参数的Cancel=true来取消删除列表项动作,然后使用ErrorMessage属性输出错误提示信息。

完成之后在VS2010的项目右键菜单中使用“部署”命令来完成事件接收器的部署,部署完成之后我们就可以测试一下此事件接收器了,如图5所示:

任务列表项的删除菜单项

图5

由于我们在图1选择的事件源为“任务”列表,所以我们测试时就要删除某个任务项看是否能删除掉,在图5中点击“删除项目”,如图6所示:

禁止删除列表项事件

图6

如图6所示,SharePoint2010弹出了错误提示信息,也就是我们在代码中使用

properties.ErrorMessage属性设置的信息。现在我们再返回到任务列表并刷新一下,如图7所示:

任务列表

图7

如图7所示,任务列表中的第二项还存在,刚才的删除操作没有成功,也就是我们开发的禁止删除列表项功能事件接收器已经起作用了。

转载:http://www.360sps.com/item/b9e458a0ea724578b09a5008a73021f5.aspx

posted on 2012-06-14 09:35  EricLee007  阅读(309)  评论(0编辑  收藏  举报