MOSS 2010:Visual Studio 2010开发体验(14)——列表开发之事件接收器
通过前面几篇,我们已经完成了内容类型,列表定义,列表实例的开发。本篇继续讲解列表中的一个重要环节——事件接收器开发。
我们的场景是:我希望之前做好的订单列表这个内容类型自动地具有某些事件特征,例如当用户在添加一个条目的时候,检查订购日期,如果小于今天的话,就不让添加。(这只是一个假设的场景,现实工作中可以依照业务逻辑而定)
我们应该如何实现这个需求呢?Follow me
1.添加一个事件接收器
下面是默认生成的两个文件
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListTemplateId="10000">
<Receiver>
<Name>OrderItemEventReceiverItemAdding</Name>
<Type>ItemAdding</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>OrderListSolution.OrderItemEventReceiver.OrderItemEventReceiver</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
</Receivers>
</Elements>
2. 修改有关代码实现业务逻辑
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow; namespace OrderListSolution.OrderItemEventReceiver
{/// <summary>/// List Item Events/// </summary>public class OrderItemEventReceiver : SPItemEventReceiver{/// <summary>/// An item is being added./// </summary>public override void ItemAdding(SPItemEventProperties properties){ SPItemEventDataCollection data = properties.AfterProperties;SPList list = properties.OpenWeb().Lists[properties.ListId];string fieldName= list.Fields.GetField("订购日").InternalName; var date = DateTime.Parse(data[fieldName].ToString());if (date > DateTime.Now){properties.ErrorMessage = "当前添加的日期不合法";properties.Cancel = true;return; } } }
}
3.部署和调试,按下F5键
【注意】我们这里故意将订购日设置于大于当前日期。根据事件中的逻辑,我们预期它会报告一个错误,而且取消当前的提交
我们看到了这个错误页面,看起来有些吓人,不是吗?对于一般用户来说,他们可能要被吓坏了
接下来,我们可以定义一个专门的页面来显示错误消息,提高用户体验
然后修改一下代码
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;namespace OrderListSolution.OrderItemEventReceiver
{/// <summary>/// List Item Events/// </summary>public class OrderItemEventReceiver : SPItemEventReceiver{/// <summary>/// An item is being added./// </summary>public override void ItemAdding(SPItemEventProperties properties){SPItemEventDataCollection data = properties.AfterProperties;SPList list = properties.OpenWeb().Lists[properties.ListId];string fieldName= list.Fields.GetField("订购日").InternalName;var date = DateTime.Parse(data[fieldName].ToString());if (date > DateTime.Now){//properties.ErrorMessage = "当前添加的日期不合法";properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;properties.RedirectUrl = "/_layouts/OrderListSolution/ErrorPage.aspx";properties.Cancel = true;}}}
}
MOSS 2010:Visual Studio 2010开发体验(14)——列表开发之事件接收器相关推荐
- MOSS 2010:Visual Studio 2010开发体验(19)——ECMAScript Object Model
这篇文章部分材料摘自下面这个地址,我做了翻译,并且按照我的案例场景做了补充 http://www.codeproject.com/Articles/60348/SharePoint-2010-Clie ...
- MOSS 2010:Visual Studio 2010开发体验(26)——工作流开发概述
这一篇开始,我将介绍在MOSS 2010中进行工作流开发的最佳实践.这一篇主要介绍有关的几个概念 1.什么是工作流 工作流开发是这几年都比较火的一个领域.工作流,顾名思义就是工作的流程,而软件系统所要 ...
- MOSS 2010:Visual Studio 2010开发体验(15)——LINQ to SharePoint
这一篇我们来讨论的是,如何通过LINQ的技术实现对SharePoint 2010列表的读取.我还记得当年.NET Framework 3.5发布,第一次接触到Linq的时候那种不可思议的感觉.现在,S ...
- MOSS 2010:Visual Studio 2010开发体验(16)——客户端对象模型
转载自:http://www.cnblogs.com/chenxizhang/archive/2010/04/26/1721653.html 上一篇,我们讲到了LINQ to SharePoint.它 ...
- 关于在Office 2010,Visual Studio 2010环境下开发Office 2007解决方案的问题
Office解决方案分应用级解决方案(application-level solution 也就是Add-in)和文档级解决方案(document-level solution包括Excel temp ...
- 在 Visual Studio Code 中体验 Java Web 开发
上一篇博文介绍了如何将 Visual Studio Code 作为 Java 的开发环境.我们知道,Java Web 开发是 Java 开发的主战场,那么在 VS Code 中开发 Java Web ...
- MOSS 2010:Visual Studio 2010开发体验(22)——利用BCS和WCF进行应用程序集成
上一篇,我们讲到了如何利用BCS服务,直接连接到SQL Server数据库实现一些简单的应用程序集成的场景.看起来很不错,不是吗? 但是,事实上,直接连接到数据库也许有时候是不可能实现的任务,很多系统 ...
- Visual Studio 2010 美女与程序员的爱情网剧+《耀和你一起》壁纸包
微软这次给 Visual Studio 2010 做的广告转向了美女+感情的套路,特意为产品拍了一套爱情短剧视频,讲述美女与程序员的爱情,这给无数本来就是单身宅男的程序员们提供了不少YY的空间. 在爱 ...
- ASP.NET 4 和 Visual Studio 2010 Web 开发概述
声明:本文是ASP.NET 白皮书 ASP.NET 4 and Visual Studio 2010 Web Development Overview 的阅读摘要,只是本人的学习记录,并非完整翻译,仅 ...
最新文章
- 达摩院年终预测重磅出炉:AI for Science 高居榜首,2022 十大科技趋势!
- Spring Boot 2.x基础教程:JdbcTemplate的多数据源配置
- Qt5 中 QWebEngineView 的使用,让桌面客户端和 web 端友好通信
- RxJava中常见的几种Subject
- 常对象成员和常成员函数
- linux磁盘信息文件,Linux查看硬盘信息方法总结归纳
- Java-日期 正则表达式
- docker swarm 实战
- linux mysql 安装测试_linux下安装MySQL - 1583651986的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 高清3D人体解剖图谱
- Python进行灰色关联度综合评价
- IOS版本APP STORE上架流程
- 360主机卫士正式上线
- Prometheus最佳实践 Summary和Histogram
- win7 IIS Web.config节点锁定问题
- 五、伊森商城 前端基础-Vue v-on 事件修饰符 按键修饰符 v-for v-if 和v-show v-else和v-else-if p24
- 弘辽科技:淘宝宝贝上下架有哪些规则?该如何优化?
- leetcode 714 买卖股票的最佳时机含手续费-动态规划(中等)
- 电子屏幕的51c语言程序,单片机控制LCD液晶显示器(含程序)
- loadrunner入门教程(13) --思考时间