转:http://winsystem.ctocio.com.cn/26/11400026_2.shtml
【IT专家网独家撰稿】SharePoint 2010与以前的版本相比,天翻地覆的变化并不为过。如果大家对以前的版本已经用的非常的熟练,可能仍然需要花费比较长的时间来研究一下SharePoint2010的新功能。在这篇文章中,笔者就给大家介绍一下SharePoint2010中列表的Add和Delete事件。这也是在这个版本中新增加的一个功能。
一、Add事件、Delete事件和Splist对象。
在这个列表中增加的Add事件和Delete事件,其主要是用在Splist对象之上。在了解这两个事件之前,笔者认为各位读者需要先了解这个事件与Splist这个对象之间的关系。这对于掌握后续的内容有很大的帮助。具体的来说,需要了解如下内容。
一是需要知道,Add事件主要是用来接收SplistEventProperties的属性值。关于这个属性值的具体含义请大家参考相关的说明。由于篇幅的限制,笔者就不过多展开了。这里大家需要明白的就是,可以将这个属性的值传递给Add事件,并且在创建列表的时候引发这个事件。如现在用户需要在列表中添加一个项目。在添加之前或者之后,可能需要进行一些操作。如在保存之前,需要进行一些合法性的验证。又或者在保存之后,需要进行一些像关联的操作,如在其它表中插入相关的数据等等。
二是需要了解,这个Add事件还有一个双胞胎兄弟,即listadding事件。这个事件的作用于Add事件类似,不过在细节上有些差异。如ListAdding事件,允许用户取消列表的创建,并且是在特定命名空间中使用API还原网站时会触发这个事件。在实际工作中,对于这个事件笔者建议大家谨慎使用。特别是当管理员使用这个事件设置网站模板或者网站定义时,虽然可以取消列表的创建。但是在采取这个取消操作时,需要小心行事。另外,当列表被回收后,或者在进行还原的过程中,也会触发这个Listadding事件。【IT专家网独家撰稿】
三是需要掌握Delete事件的相关注意事项。Delete事件顾名思义,就是允许用户在操作中的任何时刻取消列表删除操作。这表面上看起来去Listadding事件还有点相似。其实他们的差别还是蛮大的。在使用Delete事件进行取消删除操作的时候,会有一条错误信息通过接口传递过来,并抛出一个异常。在应用程序开发中,程序员可以捕捉到这个异常,并进行相关的处理,而采用Listadding事件这没有这个功能。
二、使用这些事件的注意事项。
由于这些事件是2010版本中新增加的,不少用户可能还没有用到过。笔者虽然对这两个事件有所研究,但也不敢说已经百分之百的掌握了这两个事件。在这里只能够当作抛砖引玉,给大家一些参考。【IT专家网独家撰稿】
第一需要注意的是,Delete事件使用范围的限制。根据笔者的测试,并不是所有的删除操作都会引发Delete事件。如现在某个用户删除了独立列表文件夹的,则这删除操作并不会触发Delete事件。这也就是说,Delete事件触发时必须满足特定的条件。一般来说,在删除更高级的对象时,Delete事件并不会发生在比较低级的对象上。如现在有一个Delete事件发生在网站级别上,此时级别比较低的对象,如发生在各个列表上的事件(网站级别要比事件级别高),就不会被触发这个Delete事件。所以说,在使用这个Delete事件时,应确保事件级别的正确性。当事件所处的级别不正确时,就不会再特定的事件中出发这个Delete事件。笔者一开始在使用的时候,在这里也载过跟斗。希望各位读者不要犯笔者这样的错误。
第二个需要注意的是,要判断是采用Delete事件还是采用ListAdding事件。这两个事件具有类似的功能。或者说,这两个事件在功能上有交集。如两个事件都允许用户取消原先的列表创建。不过这两个事件还是有本质上的差异。至少在一些细节上有很多的不同。笔者认为,他们最大的不同就是在返回信息上。ListAdding事件在用户取消列表操作时,基本上不会返回任何的信息。那么开发人员也就无法根据其返回的信息再采取相关的操作或者限制。而Delete事件则不同。当这个事件被触发时,即使相关的操作已经正确完成,系统仍然会返回一个信息。在实际工作中,开发人员可以借助这个返回的信息,采取相关的控制动作。如当删除某个消息之后,再根据返回信息的内容,删除某个特定表中的内容。这就相当于数据库中的触发器。
三、网站上的ADD与Delete事件。
Add事件不仅可以在列表上使用,而且还可以在网站级别上使用。不过在网站上使用Add事件,比起在列表级别上使用Add事件其操作上还有所不同。如通常情况下,在网站级别使用Add事件,需要经过两个步骤才行。具体的来说,需要根据如下方式来进行操作。【IT专家网独家撰稿】
第一步是需要将某个网站添加到Spsite实例中。在上面的内容中笔者谈到过,Add事件(列表层次)与对象Splist之间的相互关系。在网站层次,Add事件主要是跟Spsite实例打交道。这是在网站级别上与在列表级别上Add事件的一个重要差异之一。为此在网站级别上,就需要将某个需要使用这个事件的网站添加到SPsite实例中。当加入到这个这个实例中之后,各位读者会发现一个比较有趣的现象。此时这个网站就好像是一个空的文件夹,只有一组属性。
第二步就是设置网站的各个项目,并对各个项目进行实例话。当然在这一步中可能也会涉及到列表层次的Add事件。不过需要注意的是,往往大部分的重要活动都是发生在这个设置阶段,所以这些与网站相关的新时间往往与添加或者设置网站的过程相关。【IT专家网独家撰稿】
当经过以上两个步骤之后,在创建网站之前就会触发这个Add事件,也就是WebAdding事件。这表示网站级别的Add事件。各位细心的读者可能已经注意到,WebAdding事件的名字与ListAdding事件的名字类似,那么他们是否有共同点呢?确实,网站级别的WebAdding事件还多了一项功能,即允许用户的操作被取消。当用户选择取消刚才的操作时,则不会创建任何SharePoint网站,也不会启动任何设置过程。在实际工作中,这个事件往往跟一些判断条件相关联。如在创建网站时,可以通过这个事件来检验用户给与的URL地址的合法性。当其违反某个命名规则(如唯一性约束时),系统就会使用这个事件来取消刚才的创建活动。可见WebAdding事件还能够执行诸如条件验证相关的活动,其确保所创建的网站都是符合规定要求的。
另外在网站级别的Add事件中,与之相对应,还有一个比较重要的WebProvisioned事件。这个事件是在网站完全设置好并且设置过程已经停止后触发的。在列表级别的Add事件中没有这个对应的时间。通常这个事件可以配置为在同步或者异步模式下运行。如最简单的应用,就是当某个网站创建完成之后(设置过程已经结束),自动将相关的插件添加到网站中。类似于一些网站制作软件的导航或者模板功能。【IT专家网独家撰稿】
四、After事件对Add事件的影响。
通常情况下,当用户更改的列表项目提交给服务器后,其他用户就可以看到列表中增加的内容。在实际过程中,这中间可能还有一个小插曲。这个小插曲的名字就叫做“After”事件。在2010中,这个事件主要是为了满足异步事件的需要。 如当某个列表项已经提交之后,但在用户实际看到列表项之间对表项执行的操作。如在实际过程中。可能某个列表项目的内容可以分为前后三个部分,而其他用户只能够看到第一个部分与第三个部分。如现在有一个用户在列表项目中增加了一个手机号码。出于保护的需要(如在抽奖程序中),其他用户往往只能够看到前三位和后三位号码。其他号码都看不到。在这个过程中,就需要使用After事件对相关字符进行屏蔽。【IT专家网独家撰稿】
这些新的事件,在很大程度上提高了SharePoint开发环境的灵活性。不过要掌握这些事件,各位读者还是需要花费一定的功夫。毕竟这些事件都是新增加的。而且与现有的对象又有着千丝万缕的关系。