设为首页 收藏本站
查看: 943|回复: 0

[经验分享] SharePoint中的EventReceiver 之二 绑定Event Receiver到列表类型或列表实例

[复制链接]

尚未签到

发表于 2015-9-29 08:31:28 | 显示全部楼层 |阅读模式
  要创建一个Event Receiver, 你必须创建继承自一个特别的由WSS Object Model的event receiver的基类. 还一个很重要的地方需要注意的是, event receiver类必须在投入使用或测试之前, 编译到强命名的程序集, 并被部署到GAC中.
  
  下面的例子中的类继承自SPListEventReceiver, 所以它可以处理基于列表的事件. 就像所有的event receiver类中一样, 你通过重写在基类里定义的方法来创建event handler方法的实现.
using System;
using Microsoft.SharePoint;
namespace LitwareTypes
{
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;
}
}
}

  
  这个VendorListEventReceiver通过重载名字为FieldAdding, FieldUpdating, 和FieldDeleting的三个方法提供了三个event handler. 因为所有这三个events都是在事件发生之前被处理的, 不管是那种原因引起事件的触发, 这些event handlers都可以取消掉事件. 在这种情况下, 三个event handler使用SPListEventProperties参数来赋予一个错误信息, 然后取消了事件.  在这些event handler被恰当地绑定到列表之后, 他们会阻止用户(即使是有管理员权限的用户)向列表中添加, 修改, 或删除任何一个field.
  
  现在让我们来讨论一下如何把event receiver类中的event handler与一个列表类型绑定起来. 你可以通过在一个feature中添加一个receiver element来完成绑定. Receivers Element有一个值为10001的ListTemplateId 属性, 它绑定receivers到自定义的列表类型的所有的实例上. 注意, 在Receiver element之中, 每一个event handler都有一个独立的Receivers element. 你应该观察到每一个event handler方法都必须绑定到它自己的Receiver Element上, 因为没有其他的方法能够一次绑定多个event handler.
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<!-- Receivers element can only be used in feature where Scope=Web -->
<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>  
  上面的通过Receivers element来绑定event handler的技术有几个值得注意的局限性.


  • 首先, Receivers element只能被用在站点范围的features中. 它不能被使用在scope为其他等级的feature中, 这意味着我们不能使用这种绑定event的技术站点集级别的feature中.
  • 第二, Receiver element仅允许你绑定event handler到一个列表类型上. 它不提供给你绑定event handlers到列表实例或者绑定到一个content type的灵活性. 在许多情况下, 你会需要WSS object model来绑定你的event handler, 因为这种通过Object Model的方式提供了更大的灵活性.

  现在我们来讨论一下如何绑定event handlers到一个列表实例上, 而不是绑定到列表类型上. 下面的例子展现了使用WSS Object Model来绑定VendorListReceiver类的event handler到名为Vendors的列表实例上. 这里的代码是写在FeatureActived方法中的. 当你使用这种方式添加event handler的时候, 事件绑定的信息会被写入内容数据库中, 就如同其他修改目标列表的自定义一样.public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite siteCollection = (SPSite)properties.Feature.Parent;
SPWeb site = siteCollection.RootWeb;
SPList lstVendors = site.Lists["Vendors"];
string asmName = "LitwareTypes, [full 4-part assembly name goes here] ";
string listReceiverName = "LitwareTypes.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);
}
  
  译自:
  Inside Microsoft Windows SharePoint Services 3.0

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120190-1-1.html 上篇帖子: Customizing and Extending the Microsoft Office SharePoint 2007 Search (Part 2 of 下篇帖子: sharepoint 2010 重写SaveButton 的一些方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表