SharePoint 中关于event receivers的讨论
来源:互联网 发布:不想学英语知乎 编辑:程序博客网 时间:2024/04/28 15:22
今天一早,跟几个小伙伴在群里讨论了有关事件触发器的东西,感觉收获颇多,拿出来和大家分享。讨论的内容,主要就是关于事件触发器的同步/异步的设置以及作用。
其实接触SharePoint颇久,对于事件触发器写的不多,但是同步/异步这个概念还是了解的,不过没有深究罢了。今天,和大家讨论了一下,也更加深刻的理解了这个概念;当然,有人说异步是单开一个线程操作,这个我不了解,但是不反对,因为无论如何,不是执行完毕操作立即执行事件,这就是异步了,我们不讨论内部机制是如何开辟线程,或者组织异步队列的。
SharePoint中事件触发器,关于before事件(就是ing标志的事件),默认都是同步的,我理解就是完成一个操作之前,马上执行这个事件;而after的事件(就是ed标志的事件),默认都是异步的,也就是完成一个操作,不是立刻马上执行事件。至于为什么ed结尾的事件都是异步的呢?因为SharePoint为了方式UI上的操作和触发的事件冲突,所以把它设置为异步,至于内部如何处理异步,我觉得没必要太抠细节了。
关于before事件,就是完成操作之前触发,这个只能是同步,SharePoint不允许定义为异步;而after事件呢?就是完成操作之后触发,默认异步,但是可以设置为同步,但是设置为同步以后,就不能再更新属性了,防止和UI操作的冲突。
举个简单的例子,上传一个文档,然后都OK了弹出了上传以后的标题,然后UI会弹出修改属性的页面,这时,时间触发器同步修改了标题,但是却没有被属性页面加载出来,所以这时修改属性,会造成保存上的冲突。当然,有人说执行完事件以后,再弹出UI修改属性的页面,这样如果事件需要时间,就会造成效率上的问题。
当然例子比较简单,就是给大家理解加一个参考罢了。也许自己的理解并不够深刻,希望有独特见解的,大家能够留言讨论。
简单介绍下,after事件如何设置同步,在属性的xml文件里,设置即可,如下:
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"><Receivers ListUrl="ListName"><Receiver><Name>EventReceiver1ItemAdded</Name><Type>ItemAdded</Type><Assembly>$SharePoint.Project.AssemblyFullName$</Assembly><Class>EventReceiverProject1.EventReceiver1.EventReceiver1</Class><SequenceNumber>1000</SequenceNumber><Synchronization>Synchronous</Synchronization></Receiver></Receivers></Elements>
最后,感谢SharePoint技术联盟的几个好伙伴,忘忧草、四毛和Berkaroad,我相信有讨论取长补短,大家才会有进步。
参考资料
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.speventreceiverdefinition.synchronization(v=office.15).aspx
- SharePoint 中关于event receivers的讨论
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 介绍远程Event Receivers
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 远程Event Receivers App级别生命周期
- SharePoint 2013 App Remote Event Receivers
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结
- Creating SharePoint 2010 Event Receivers in Visual Studio 2010
- 关于SharePoint 讨论板的一些知识
- Event Receivers vs Workflows
- SharePoint 2007中所有的Event Handlers事件清单
- SharePoint 2010中Event 10016错误
- 如何解决Event Viewer中SharePoint Error
- C# 中关于listview的一些讨论
- 关于VC中时间函数的讨论
- 关于汇编中ASSUME的讨论
- 程序中关于数据交换的讨论
- 关于子类中virtual可有可无的讨论
- VC6.0中关于模板的讨论。
- Sharepoint 2013 关于"SPChange"简介
- 基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]
- 第一篇博客序言
- 深入探索C++对象模型 第三章 Data语意学
- 关于iOS Keychain Services Tasks
- SharePoint 中关于event receivers的讨论
- 聚类——混合高斯模型 Gaussian Mixture Model
- g.hibernate.hql.ast.QuerySyntaxException: tbl_base_count is not mapped [SELECT COUNT(*) FROM tbl_bas
- gridview repeater DataList 鼠标经过改变背景颜色
- 《The Definitive Guide to Linux Network Programming》 (《Linux 网络编程指南》) Chapter 2
- SharePoint 2013 手动删除爬网项目
- Android中程序与Service交互的方式
- zip压缩加密解密的开源工具包zip4j
- int (*a)[10] 和 int *a[10]d的区别