今天一早,跟几个小伙伴在群里讨论了有关事件触发器的东西,感觉收获颇多,拿出来和大家分享。讨论的内容,主要就是关于事件触发器的同步/异步的设置以及作用。

  其实接触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,我相信有讨论取长补短,大家才会有进步。

参考资料

  http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.speventreceiverdefinition.synchronization(v=office.15).aspx

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

  1. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 远程Event Receivers App级别生命周期

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers  远程Event Receivers App级别生命周期 ...

  2. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers         本章中,你讲学到: 了解远程evernt ...

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

  4. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers  总结         本章节向你介绍了SP平台上eve ...

  5. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发         之前提到过, ...

  6. [NodeJs系列][译]理解NodeJs中的Event Loop、Timers以及process.nextTick()

    译者注: 为什么要翻译?其实在翻译这篇文章前,笔者有Google了一下中文翻译,看的不是很明白,所以才有自己翻译的打算,当然能力有限,文中或有错漏,欢迎指正. 文末会有几个小问题,大家不妨一起思考一下 ...

  7. 在SharePoint中创建可自定义属性的文件夹

    概况 阅读时间:约5分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户.管理员.开发人员 难度指数:★★★☆☆ SharePoint中的文件夹分为2种,一种是文档库 ...

  8. jquery中使用event.target的几点

    jquery中使用event.target的几点 1.this和event.target的区别: js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事 ...

  9. SharePoint 中用户控件的开发及应用

    1.新建解决方案以及SharePoint项目,步骤比较简单略过,然后映射CONTROLTEMPLATES文件夹,在里面添加用户控件(仅场解决方案),如下图: 2.解决方案结构,如下图: 简单介绍一下, ...

随机推荐

  1. 在自己的框架中引用 PHPExcel

    如果直接在框架中的controller中直接引用 xxxx/PHPExcel.php,由于框架中有autoload 与PHPExcel的autoload冲突(加载目录原因), 那么在不想做太多修改的情 ...

  2. android判断EditText输入的数字、中文还是字母方法

    String txt = edInput.getText().toString(); Pattern p = Pattern.compile("[0-9]*");      Mat ...

  3. 关于在for循环中绑定事件打印变量i是最后一次。

    其实函数引用的外部变量都是最后一次的值. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  4. Understanding apps: mobile, native or responsive

    Background Maybe you have decided to get an app built. You will not build it yourself (obviously!) s ...

  5. andriod手机签到应用服务器设计

    最近导师要求我和另一个同学开发一个手机上课签到应用,我负责客户端和服务器之间的通信架构编写和数据的存储 本人大学四年只用过汇编和C/C++,因此对andriod开发还是一窍不通,花了一个星期写出来了基 ...

  6. 使用uploadify上传控件无法进入后台问题分析

    分别在.net mvc 和java struts2中使用到 uploadify上传 文件,遇到同样的问题,选中文件上传后,文件无法上传,打上断点后发现没有进入后台. 逐步断点发现 项目共同点是加入了 ...

  7. djngo快速实现--使用Bootstrap

    继续django学习之旅,之前我们所做的Django练习前端都非常丑.这节我们使用Bootstrap,顿时使丑陋的页面变成白天鹅. 安装Bootstrap                        ...

  8. BackgroundCheck – 根据图片亮度智能切换元素样式

    BackgroundCheck 是一个轻量的 JavaScript 库,能够根据元素后面的图片的亮度自动切换元素样式.例如在图片幻灯片功能中,根据图片亮度调整导航箭头的颜色,这样让图片和导航的颜色形成 ...

  9. 用emacs的org2blog组件写cnblogs博客 -- 环境配置及使用

    Table of Contents 配置 使用 创建一篇博文并发布 更新一篇博文 删除一篇博文 待办 本文给出了一个安装.配置org2blog的方法,实现在emacs中书写blog文章.并发布到cnb ...

  10. 学习android开发笔记

    最近重点看了几个android工程的源代码,有几点疑问 1:为什么android客户端游戏要开启n个线程,而且通常每个线程的操作只有i++: 2:为什么很多列表在游戏逻辑和绘制逻辑里没有做同步: 3: ...