SP2010开发和VS2010专家"食谱"--第一章节--列表和事件Receiver(2)--当增加项目时验证数据
2014-03-13 11:12
375 查看
这个食谱中,我们将学到如何给ItemAdding同步事件创建自定义事件处理器。我们将在给联系人添加数据时验证数据。我们会验证电话号码和邮件地址的格式。电话号码必须是美国格式。必须包含3个数字,可能在括号内,然后是一个三个数字集合和一个四个数字集合。邮件地址应该遵从标准邮件格式。我们不允许在这些字段中增加垃圾信息。如果数据失败,我们自定义的验证会取消事件,数据也不回插入到列表了。
Windows 64-bit 兼容操作系统(如win7/win 2008 R2 server)
.NET Framework 4.0(VS2010将安装Framework4.0但是SP2010要求.NET Framework3.5)
VS2010
Expression Blend(可选,但在Silverlight例子中有用)
SQL Server2008 或SQL 2008 R2(Expression版本也行)
SPD(可选)
SP Server2010
MS Office2010(InfoPath 表单)
从SP用户界面,用Contacts联系人模板创建名为Contacts的列表,如下:
2.新建项目,确保选择.NET Framework 3.5.
3.选择事件Receiver,在Visual C#|SharePoint|2010中。
4.命名为ListItemEventReceiver,并提供保存目录
5.默认VS选择机器上可用的SP网址。选择部署为场解决方案。点击下一步。
6.保证从“需要哪种类型的事件Receiver”选择列表项事件,Contacts作为事件源,在“处理以下事件”选择“正在添加项”。
7.点击完成。
8.增加必须代码,如下:
9.点击F5,生成并执行或者从调试菜单选择开始调试。默认浏览器会打开本地网址。
10.从联系人列表增加新项目,故意输入错误电话格式。
11.点击保存,调用了事件处理器,抛出如下异常。如果你注意看,会发现事件Receiver取消了请求。
12.关闭对话框,输入正确格式联系人,联系人毫无问题的添加上了.
Elements.xml是事件Receiver的配置文件。包含Name、Type以及ListTemplateId等属性。Type指的是我们处理的事件。这里是ItemAdding事件。我们将contacts列表和事件Receiver关联。从ListTemplateId属性可以看出。ListTemplateId 105指的就是联系人列表。
我们部署解决方案时,任何使用此模板的列表作为基类,都有相关事件Receiver。只要ItemAdding事件被触发,我们的代码就会执行。
Asssembly元素看起来很有意思,这被称为Visual Studio Substitution token。我们创建包时,这些标识被实际值代替。class元素提供包含命名空间的类名。
在Elements.xml中,SequenceNumber元素有特别的任务。如果同一个列表有多个事件Receiver,都是处理ItemAdding事件的,SharePoint会根据这些顺序数字决定执行顺序。还有一个缺失的元素Synchronization----可选项。你可以设置为同步执行或异步执行。但是这个元素不能应用到像ItemAdding这样的同步事件。不要在同步事件中设置此属性。在像ItemAdded这样的异步事件设置此属性。
VS也添加了Features。包含Feature1.Features用来部署自定义像事件Receiver、可视Web部件、工作流等到SP环境。如果你有大量自定义代码,改变网站模板,创建各种列表等,使用Features你可以打包这些代码,一次性部署到SP环境中。减少了复杂性。Features提供的功能有:
Scoping--决定自定义代码是否在Web应用程序、网站集或网站上运行。
可插拔操作----安装和卸载自定义代码。
容易激活或停用自定义代码。
使用Features减少了不连贯性和版本差异。本例帮我们部署自定义事件Receiver。如果你双击Feature1.feature,你会看到如下截图。这里可以修改Title、Scope和Description。我们可以部署feature到不同站点甚至不同场。
当我们生成并运行我们的解决方案时,VS自动创建WSP包,部署并激活。当我们停止调试时,VS停用此feature,卸载并做所有必要的清除工作。
WSP是SharePoint解决方案文件。基本是包含一个或多个feature的CAB文件。每个feature参照一个或更多像事件Receiver、列表定义、Web部件等项目。
FeatureReceiver集成SPFeatureReceiver,Email事件Receiver继承System.Object。其他事件Receiver继承SPEventReceiverBase。
并不是所有Event宿主支持所有事件类型。如列表事件ListAdding在列表级别就说不通,但是在site或web级别就说的通。FieldAdding事件在列表中说得通,尽管都有相同基类。
调试帮你更好理解代码。你的代码必须允许调试。默认VS开始有这个配置。当你使用调试时,您应该在某个位置停止代码,并完成:
检查代码使用的数据;
检查条件上发生的异常;
写代码时测试;
找出任何逻辑错误
当你按下F5,VS自动开始w3wp.exe进程,并附加测试器到进程。w3wp.exe是一个ISS进程,处理特定应用程序池的所有请求。下面截图显示了输出窗口。在这里你可以看到第一行指出调试器附加到的进程。也提供了进程ID(这里是3616,你的可能不一样)。
所以无论何时任何请求到达这个进程,调试器将能够在你指示的行中断,并高光该行。从这里,你可以按F11进入代码或F10跳过代码。
你可以在代码中变量上添加监控,但是运行时不能修改变量值。
准备
你应该在功能开发机器上安装SP2010并配置。也需要安装VS2010.下面是配置开发机器必须的软件:Windows 64-bit 兼容操作系统(如win7/win 2008 R2 server)
.NET Framework 4.0(VS2010将安装Framework4.0但是SP2010要求.NET Framework3.5)
VS2010
Expression Blend(可选,但在Silverlight例子中有用)
SQL Server2008 或SQL 2008 R2(Expression版本也行)
SPD(可选)
SP Server2010
MS Office2010(InfoPath 表单)
从SP用户界面,用Contacts联系人模板创建名为Contacts的列表,如下:
步骤:
1.以管理员身份打开VS20102.新建项目,确保选择.NET Framework 3.5.
3.选择事件Receiver,在Visual C#|SharePoint|2010中。
4.命名为ListItemEventReceiver,并提供保存目录
5.默认VS选择机器上可用的SP网址。选择部署为场解决方案。点击下一步。
6.保证从“需要哪种类型的事件Receiver”选择列表项事件,Contacts作为事件源,在“处理以下事件”选择“正在添加项”。
7.点击完成。
8.增加必须代码,如下:
using System; using System.Security.Permissions; using Microsoft.SharePoint; using Microsoft.SharePoint.Security; using Microsoft.SharePoint.Utilities; using Microsoft.SharePoint.Workflow; using System.Text.RegularExpressions; namespace ListItemEventReceiver.EventReceiver1 { /// /// List Item Events /// public class EventReceiver1 : SPItemEventReceiver { /// /// An item is being added. /// public override void ItemAdding(SPItemEventProperties properties) { base.ItemAdding(properties); string sWorkPhone = properties.AfterProperties["WorkPhone"].ToString(); string sEmail = properties.AfterProperties["Email"].ToString(); if (!string.IsNullOrEmpty(sWorkPhone)) { if (!System.Text.RegularExpressions.Regex.IsMatch(sWorkPhone, @"^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}$")) { properties.Cancel = true; } } if (!string.IsNullOrEmpty(sEmail)) { if (!System.Text.RegularExpressions.Regex.IsMatch(sEmail, @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$")) { properties.Cancel = true; } } } } }
9.点击F5,生成并执行或者从调试菜单选择开始调试。默认浏览器会打开本地网址。
10.从联系人列表增加新项目,故意输入错误电话格式。
11.点击保存,调用了事件处理器,抛出如下异常。如果你注意看,会发现事件Receiver取消了请求。
12.关闭对话框,输入正确格式联系人,联系人毫无问题的添加上了.
How it works...
VS创建EventReceiver解决方案时,创建了EventReceiver1.它包含两个文件Elements.xml和EventReceiver1.cs,后者用来写我们自定义事件处理器代码。Elements.xml是事件Receiver的配置文件。包含Name、Type以及ListTemplateId等属性。Type指的是我们处理的事件。这里是ItemAdding事件。我们将contacts列表和事件Receiver关联。从ListTemplateId属性可以看出。ListTemplateId 105指的就是联系人列表。
我们部署解决方案时,任何使用此模板的列表作为基类,都有相关事件Receiver。只要ItemAdding事件被触发,我们的代码就会执行。
<?xml version="1.0" encoding="utf-8"?> <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <Receivers ListTemplateId="105"> <Receiver> <Name>EventReceiver1ItemAdding</Name> <Type>ItemAdding</Type> <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> <Class>ListItemEventReceiver.EventReceiver1.EventReceiver1</Class> <SequenceNumber>10000</SequenceNumber> </Receiver> </Receivers> </Elements>
Asssembly元素看起来很有意思,这被称为Visual Studio Substitution token。我们创建包时,这些标识被实际值代替。class元素提供包含命名空间的类名。
在Elements.xml中,SequenceNumber元素有特别的任务。如果同一个列表有多个事件Receiver,都是处理ItemAdding事件的,SharePoint会根据这些顺序数字决定执行顺序。还有一个缺失的元素Synchronization----可选项。你可以设置为同步执行或异步执行。但是这个元素不能应用到像ItemAdding这样的同步事件。不要在同步事件中设置此属性。在像ItemAdded这样的异步事件设置此属性。
VS也添加了Features。包含Feature1.Features用来部署自定义像事件Receiver、可视Web部件、工作流等到SP环境。如果你有大量自定义代码,改变网站模板,创建各种列表等,使用Features你可以打包这些代码,一次性部署到SP环境中。减少了复杂性。Features提供的功能有:
Scoping--决定自定义代码是否在Web应用程序、网站集或网站上运行。
可插拔操作----安装和卸载自定义代码。
容易激活或停用自定义代码。
使用Features减少了不连贯性和版本差异。本例帮我们部署自定义事件Receiver。如果你双击Feature1.feature,你会看到如下截图。这里可以修改Title、Scope和Description。我们可以部署feature到不同站点甚至不同场。
当我们生成并运行我们的解决方案时,VS自动创建WSP包,部署并激活。当我们停止调试时,VS停用此feature,卸载并做所有必要的清除工作。
WSP是SharePoint解决方案文件。基本是包含一个或多个feature的CAB文件。每个feature参照一个或更多像事件Receiver、列表定义、Web部件等项目。
More information – Event Receivers base class
在VS创建的事件Receiver继承特定SharePoint事件Receiver类(根据你写的处理器对象不同)。例如本例中继承自SPItemEventReceiver。如果我们要写列表事件处理器,我们需要集成SPListEventReceiver。下面是完整Event Receiver继承类FeatureReceiver集成SPFeatureReceiver,Email事件Receiver继承System.Object。其他事件Receiver继承SPEventReceiverBase。
并不是所有Event宿主支持所有事件类型。如列表事件ListAdding在列表级别就说不通,但是在site或web级别就说的通。FieldAdding事件在列表中说得通,尽管都有相同基类。
调试Event Receiver
在代码间设置断点来调试Event Receiver。这里,我们在ItemAdding方法第一行放置断点,点击F5调试。调试帮你更好理解代码。你的代码必须允许调试。默认VS开始有这个配置。当你使用调试时,您应该在某个位置停止代码,并完成:
检查代码使用的数据;
检查条件上发生的异常;
写代码时测试;
找出任何逻辑错误
当你按下F5,VS自动开始w3wp.exe进程,并附加测试器到进程。w3wp.exe是一个ISS进程,处理特定应用程序池的所有请求。下面截图显示了输出窗口。在这里你可以看到第一行指出调试器附加到的进程。也提供了进程ID(这里是3616,你的可能不一样)。
所以无论何时任何请求到达这个进程,调试器将能够在你指示的行中断,并高光该行。从这里,你可以按F11进入代码或F10跳过代码。
你可以在代码中变量上添加监控,但是运行时不能修改变量值。
相关文章推荐
- 网络IPC之字节序
- memcached实现hibernate二级缓存
- 目前所有的互联网企业中是怎样定义用户流失根据
- 编写职业水准的程序
- 教你看懂卫星场强图,更好入门烧星
- 性能优化之Java(Android)代码优化
- 蓝桥杯 翻硬币(贪心)
- Linux C开发--头文件查找、动态库搜索
- 对HTML DOM的理解
- Windows 安装Django并创建第一个应用
- SP2010开发和VS2010专家"食谱"--第一章节--列表和事件接收器(2)--当增加项目时验证数据
- Apache加速模块mod_pagespeed安装使用详细介绍
- Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- MAVEN常用命令+基本配置详解
- Lisp中基础函数的意思
- css鼠标样式
- ETL
- js+CSS 实现可以编辑的下拉列表框
- iOS 基于UIWebView的应用特点