SharePoint 中关于event receivers的讨论
今天一早,跟几个小伙伴在群里讨论了有关事件触发器的东西,感觉收获颇多,拿出来和大家分享。讨论的内容,主要就是关于事件触发器的同步/异步的设置以及作用。
其实接触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></SequenceNumber>
<Synchronization>Synchronous</Synchronization>
</Receiver>
</Receivers>
</Elements>
最后,感谢SharePoint技术联盟的几个好伙伴,忘忧草、四毛和Berkaroad,我相信有讨论取长补短,大家才会有进步。
参考资料
SharePoint 中关于event receivers的讨论的更多相关文章
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 远程Event Receivers App级别生命周期
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 远程Event Receivers App级别生命周期 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 本章中,你讲学到: 了解远程evernt ...
- Creating SharePoint 2010 Event Receivers in Visual Studio 2010
转:http://msdn.microsoft.com/en-us/library/gg252010(v=office.14).aspx Summary: Learn how to create a ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结 本章节向你介绍了SP平台上eve ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发 之前提到过, ...
- [NodeJs系列][译]理解NodeJs中的Event Loop、Timers以及process.nextTick()
译者注: 为什么要翻译?其实在翻译这篇文章前,笔者有Google了一下中文翻译,看的不是很明白,所以才有自己翻译的打算,当然能力有限,文中或有错漏,欢迎指正. 文末会有几个小问题,大家不妨一起思考一下 ...
- 在SharePoint中创建可自定义属性的文件夹
概况 阅读时间:约5分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户.管理员.开发人员 难度指数:★★★☆☆ SharePoint中的文件夹分为2种,一种是文档库 ...
- jquery中使用event.target的几点
jquery中使用event.target的几点 1.this和event.target的区别: js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事 ...
- SharePoint 中用户控件的开发及应用
1.新建解决方案以及SharePoint项目,步骤比较简单略过,然后映射CONTROLTEMPLATES文件夹,在里面添加用户控件(仅场解决方案),如下图: 2.解决方案结构,如下图: 简单介绍一下, ...
随机推荐
- 一个程序说明标准i/O缓冲的效率
来瞧一个程序,了解一下标准I/O中的缓冲区对程序运行的影响: #include<stdio.h>#include<unistd.h> int main(){ char a[2] ...
- 让我们一起Go(十)
前言: 本系列还没流产,继续难产中,哈哈,只怪我没专心,在期间又偷偷去学了python,ruby,scala,haskell这几种语言,如果你不幸是本系列的读者,那么你得慢慢等后面的了,等不及可以过几 ...
- android手势创建及识别
使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势.这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建.这篇的内容使用到的是android.gesture包,具体的例子参考的是S ...
- Xcode 中关于"#"的小知识
在代码中使用Autolayout时,大家都会使用NSDictionaryOfVariableBindings这个宏,这个宏可以生成一个变量名到变量值映射的Dictionary.比如NSDictiona ...
- 尝试在virtualbox fedora21 下安装additions和mount share folder
安装这个additions的过程,基本上可以参照 http://gamblisfx.com/how-to-install-virtualbox-guest-additions-on-fedora-21 ...
- [作业向]tinyhttp web服务器设计及完整代码
最近看了<HTTP权威指南>和<UNP>有了写一个简单的web服务器的想法,正好这个学期没有什么课,所以就花了一个星期这样写了一个出来,鉴于本人水平有限,如果有什么设计或代码错 ...
- TF-IDF 简介
假设我们手头有大量的文档(或网页), 通常我们会比较关心以下几个问题: 1. 每一个文档的关键词(或主题词)包括哪些? 2. 给定一个(或一组)关键词,与这个(或组)词最相关的文档是哪一个? 3. ...
- vs2010安装和使用
vs2010是之前我跟老师做网站项目时安装的,这次软件工程作业我就用它了,安装过程中的截图就不存在了,我就详细说说它的使用吧. VS2010软件挺大的,下载大概要一个多小时,安装过程大概都是下一步. ...
- JS魔法堂:浏览器模式和文档模式怎么玩?
一.前言 从IE8开始引入了文档兼容模式的概念,作为开发人员的我们可以在开发人员工具中通过“浏览器模式”和“文档模式”(IE11开始改为“浏览器模式”改成更贴切的“用户代理字符串”)品味一番,它的出现 ...
- .Net反射机制分析和使用
1..NET反射的概述 .NET反射是审查元数据并动态收集关于它的类型信息的能力. 应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域.这些域在拥有相同应 ...