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>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

 

时间: 2024-09-21 05:53:07

SharePoint 中关于event receivers的讨论的相关文章

在Sharepoint 2010中复制日历列表中的Event数据

在SharePoint 中没有 copy item的功能, 是有   file 是有copy 的 所以我们要复制 event 数据只能 用程序 一个一个对应着赋值. 那改怎么赋值 不会丢失数据呢 ? 如下程序可做参考 .这个 程序中 没有 "工作区"这个字段的赋值.因为在我的项目日历列表中不需要这个. oItem["Title"] = p_item["Title"]; oItem["Location"] = p_item[&q

怎样在SharePoint中在线编辑文档

我一直以为只有在Document Library里面的File才会支持在线编辑.直到今天早上我才发现用IE打开List里面的Attachments也是支持在线编辑的,但前提是必须是IE浏览器. 目前正在开发的项目,我开始设计时是把所有的审批信息存放在List中,上传的文档以Attachments形式保存于List中,昨天客户来公司,我演示的时候,用Chrome打开附件,直接下载了(以后建议用IE),客户需要在线编辑功能,还狠狠的批了我们一顿,附件不能在线编辑,那我审核个毛线.(其实是可以的,用I

SharePoint中如何利用Jquery Chosen创建新的人员选择器

基于SharePoint平台开发时,人员选择器使用频率是非常高的,但是原生的人员选择器使用太麻烦,而且非常笨拙,非常不友好,特别是对呆在政府部门的老爷们,要让他们手动输入人员,简直就是痴心妄想.总之一句话,越简单越好. 为了让客户满意,必须要对人员选择器进行改造,原生的PeopleEditor彻底抛弃.只能另辟蹊径,寻找适合的JQuery插件,创建新的人员选择器,分析了一下需求,可以归纳新的人员选择器必须支持如下情况: 支持人员的多选,比如像会议.通知需要对多人进行发送,当然也要支持删除. 对于

Javascript中的Event属性

altKey, button, cancelBubble, clientX, clientY, ctrlKey, fromElement, keyCode, offsetX, offsetY, propertyName, returnValue, screenX, screenY, shiftKey, srcElement, srcFilter, toElement, type, x, y 1.altKey 描述: 检查alt键的状态. 语法: event.altKey 可能的值: 当alt键按

在SharePoint中使用SilverLight的注意事项

在SharePoint中使用SilverLight,说起来虽然简单,但是还是折腾了我一些时间: 在SharePoint中使用SilverLight注意事项 首先,需要将Silverlight程序中产生的xap文件拷贝到您的sp站点可以访问到的地方.然后创建一个 webpart,在其中创建Silverlight的实例对象,然后为其指定Source="****.xap"特别注意的是, SilverLight的运行需要ScriptManager的支持. 在我练习的过程中,主要遇到的问题是we

SharePoint中如何集成Excel数据和Excel Web Access Web部件

Excel Web Access Web部件在SharePoint中Excel电子表单里呈现数据. 1. 打开Excel 2010.创建空白工作薄. 2. 添加数据. 3. 点击另存为,选择文档库,点击确定,选择文档,点击确定.

如何在SharePoint中利用Jquery Chosen创建新的人员选择器

基于SharePoint平台开发时,人员选择器使用频率是非常高的,但是原生的人员选择器使用太麻烦,而且非常笨拙,非常不友好,特别是对呆在政府部门的老爷们,要让他们手动输入人员,简直就是痴心妄想.总之一句话,越简单越好. 为了让客户满意,必须要对人员选择器进行改造,原生的PeopleEditor彻底抛弃.只能另辟蹊径,寻找适合的JQuery插件,创建新的人员选择器,分析了一下需求,可以归纳新的人员选择器必须支持如下情况: 支持人员的多选,比如像会议.通知需要对多人进行发送,当然也要支持删除. 对于

SharePoint中如何使用Visio Service展示业务数据

SharePoint中可以通过Visio Service可以在浏览器中查看Visio图,功能部署到系统中,一切安好. 而现实总是很折磨人,使用该功能后,相关使用者随后提出,Visio图能否与我的业务数据进行绑定,实现数据变动,图形也随之变化? 记得这个功能是有的,在2010时代就有,一直没尝试使用过. 测试案例 以IT运维中服务器监控为例,建一"服务器列表"的自定义列表 字段清单:标题.状态(下拉选项:正常.警告.关机).IP地址 录入一部分数据,如下图所示: 打开Visio,创建新文

SharePoint中添加我们的自定义BCD菜单

前言:在SharePoint中,我们常见的操作就是添加我们的自定义BCD菜单,下面,简单介绍下添加自定义BCD菜单的操作.主要介绍两种熟悉的方法,一种通过xml方式,另一种是通过js的方式. 环境:SharePoint 2010 Server,理论上2007和2013也会支持,不过我没有进行测试. 方法一.通过Xml方式(图比较多,不过我不是贴图党) 1. 新建一个空的项目,如下图. 2.选择场的解决方案,测试地址选择你需要的测试地址即可. 3.在Features上面,右键添加新的Feature