禁止删除列表项的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.
09EventReceiverToItemDeleting.EventReceiverToItemDeleting</Class>
10        <SequenceNumber>10000</SequenceNumber>
11      </Receiver>
12  </Receivers>
13</Elements>

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

ItemDeleting事件接收器代码

图4

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

01using System;
02using System.Security.Permissions;
03using Microsoft.SharePoint;
04using Microsoft.SharePoint.Security;
05using Microsoft.SharePoint.Utilities;
06using Microsoft.SharePoint.Workflow;
07  
08namespace 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

转载于:https://www.cnblogs.com/EricLee007/archive/2012/06/14/2548816.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值