通过前面几篇,我们已经完成了内容类型,列表定义,列表实例的开发。本篇继续讲解列表中的一个重要环节——事件接收器开发。

我们的场景是:我希望之前做好的订单列表这个内容类型自动地具有某些事件特征,例如当用户在添加一个条目的时候,检查订购日期,如果小于今天的话,就不让添加。(这只是一个假设的场景,现实工作中可以依照业务逻辑而定)

我们应该如何实现这个需求呢?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)——列表开发之事件接收器相关推荐

  1. MOSS 2010:Visual Studio 2010开发体验(19)——ECMAScript Object Model

    这篇文章部分材料摘自下面这个地址,我做了翻译,并且按照我的案例场景做了补充 http://www.codeproject.com/Articles/60348/SharePoint-2010-Clie ...

  2. MOSS 2010:Visual Studio 2010开发体验(26)——工作流开发概述

    这一篇开始,我将介绍在MOSS 2010中进行工作流开发的最佳实践.这一篇主要介绍有关的几个概念 1.什么是工作流 工作流开发是这几年都比较火的一个领域.工作流,顾名思义就是工作的流程,而软件系统所要 ...

  3. MOSS 2010:Visual Studio 2010开发体验(15)——LINQ to SharePoint

    这一篇我们来讨论的是,如何通过LINQ的技术实现对SharePoint 2010列表的读取.我还记得当年.NET Framework 3.5发布,第一次接触到Linq的时候那种不可思议的感觉.现在,S ...

  4. MOSS 2010:Visual Studio 2010开发体验(16)——客户端对象模型

    转载自:http://www.cnblogs.com/chenxizhang/archive/2010/04/26/1721653.html 上一篇,我们讲到了LINQ to SharePoint.它 ...

  5. 关于在Office 2010,Visual Studio 2010环境下开发Office 2007解决方案的问题

    Office解决方案分应用级解决方案(application-level solution 也就是Add-in)和文档级解决方案(document-level solution包括Excel temp ...

  6. 在 Visual Studio Code 中体验 Java Web 开发

    上一篇博文介绍了如何将 Visual Studio Code 作为 Java 的开发环境.我们知道,Java Web 开发是 Java 开发的主战场,那么在 VS Code 中开发 Java Web ...

  7. MOSS 2010:Visual Studio 2010开发体验(22)——利用BCS和WCF进行应用程序集成

    上一篇,我们讲到了如何利用BCS服务,直接连接到SQL Server数据库实现一些简单的应用程序集成的场景.看起来很不错,不是吗? 但是,事实上,直接连接到数据库也许有时候是不可能实现的任务,很多系统 ...

  8. Visual Studio 2010 美女与程序员的爱情网剧+《耀和你一起》壁纸包

    微软这次给 Visual Studio 2010 做的广告转向了美女+感情的套路,特意为产品拍了一套爱情短剧视频,讲述美女与程序员的爱情,这给无数本来就是单身宅男的程序员们提供了不少YY的空间. 在爱 ...

  9. ASP.NET 4 和 Visual Studio 2010 Web 开发概述

    声明:本文是ASP.NET 白皮书 ASP.NET 4 and Visual Studio 2010 Web Development Overview 的阅读摘要,只是本人的学习记录,并非完整翻译,仅 ...

最新文章

  1. 达摩院年终预测重磅出炉:AI for Science 高居榜首,2022 十大科技趋势!
  2. Spring Boot 2.x基础教程:JdbcTemplate的多数据源配置
  3. Qt5 中 QWebEngineView 的使用,让桌面客户端和 web 端友好通信
  4. RxJava中常见的几种Subject
  5. 常对象成员和常成员函数
  6. linux磁盘信息文件,Linux查看硬盘信息方法总结归纳
  7. Java-日期 正则表达式
  8. docker swarm 实战
  9. linux mysql 安装测试_linux下安装MySQL - 1583651986的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  10. 高清3D人体解剖图谱
  11. Python进行灰色关联度综合评价
  12. IOS版本APP STORE上架流程
  13. 360主机卫士正式上线
  14. Prometheus最佳实践 Summary和Histogram
  15. win7 IIS Web.config节点锁定问题
  16. 五、伊森商城 前端基础-Vue v-on 事件修饰符 按键修饰符 v-for v-if 和v-show v-else和v-else-if p24
  17. 弘辽科技:淘宝宝贝上下架有哪些规则?该如何优化?
  18. leetcode 714 买卖股票的最佳时机含手续费-动态规划(中等)
  19. 电子屏幕的51c语言程序,单片机控制LCD液晶显示器(含程序)
  20. loadrunner入门教程(13) --思考时间

热门文章

  1. nodejs -- promise的返回
  2. C# 如何创建Excel多级分组
  3. 《Linux From Scratch》第二部分:准备构建 第三章:软件包与补丁- 3.1. 简介
  4. JS传中文到后台需要的处理
  5. JetBrains发布DataGrip 1.0——数据库与SQL领域中的瑞士军刀
  6. Android中怎么使图片显示
  7. cisco aaa 授权后门测试
  8. 转《两个个很形象的依赖注入的比喻》
  9. 智能合约语言Solidity 类型介绍
  10. 【廖雪峰Python学习笔记】面向对象高级编程