本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation中的HOL02中的第三个练习,其中包括两个任务:

添加一个验证来检查Email参数。

Ø         添加一个Email验证的Code Activity

Ø         测试这个验证

这个练习中,将扩展练习2中的项目,验证发送邮件地址的属性内容Email格式是否正确。

Designer:这个组件定义了workflow中的activity和custom activity设计的直观表示。

Code generator:这是一个扩展,用来生成工作流中activity的自定义代码。InvokeWebService这个开箱即用的activity就是这样。

Validator:这个组件增强了设计时和运行时的activity符号。

Toolbox item:定义了activity在Visual Studio的设计环境中,在工具箱中显示的自定义行为。

Executor:这是一个无状态的组件,用来执行activity的execution semantics。这个组件不会在简单的情况下定义,例如前面一个练习的情况下才会被覆写。

Serializer:如果需要提供自定义的序列化行为。

Deployer:当工作流包含activity,运行代码时将部署到主环境中。

1.在解决方案资源管理器中,在SendMailActivityLibrary中添加一个Code File,名字为ParametersValidator.cs

2.添加如下代码来建立适当的继承关系。ActivityValidator类包含设计时和运行时的验证逻辑来确保activity被适当的配置。自定义的验证类继承自ActivityValidator还是CompositeActivityValidator基类,依赖于你的activity是一个基本的还是一个复合的。在工作流编译的时候和运行时,当activity动态更新执行时自动执行验证。

using System;

using System.Collections.Generic;

using System.Text;

using System.Workflow.Activities;

using System.Workflow.ComponentModel;

using System.Workflow.ComponentModel.Compiler;

using System.Text.RegularExpressions;

using System.Net.Mail;

namespace SendMailActivityLibrary

{

public class ParametersValidator : ActivityValidator

{

}

}

3.覆写ValidateProperties方法,这样我们可以在自定属性上执行自定义验证。Activity的ValidateProperties方法主要用来校验Activity属性的编译语法。这个验证组件将检查Email地址是否为正确的格式。

public override ValidationErrorCollection ValidateProperties(ValidationManager manager, object obj)

{

ValidationErrorCollection validationErrors = new ValidationErrorCollection(base.ValidateProperties(manager, obj));

SendMailActivity sendMailActivityToBeValidated = obj as SendMailActivity;

if (sendMailActivityToBeValidated == null)

{

throw new InvalidOperationException("Parameter obj is not of type SendMailActivity");

}

if (!IsValidEmailAddress(sendMailActivityToBeValidated.To))

{

ValidationError CustomActivityValidationError = new ValidationError(String.Format("\'{0}\' is an Invalid destination e-mail address", sendMailActivityToBeValidated.To), 1);

validationErrors.Add(CustomActivityValidationError);

}

if (!IsValidEmailAddress(sendMailActivityToBeValidated.From))

{

ValidationError CustomActivityValidationError = new ValidationError(String.Format("\'{0}\' is an Invalid source e-mail address", sendMailActivityToBeValidated.From), 1);

validationErrors.Add(CustomActivityValidationError);

}

return validationErrors;

}

4.你会注意到里面调用了一个方法叫IsValidEmailAddress。这是验证部分的引擎,它检查字符串是否为一个有效的Email地址。

public Boolean IsValidEmailAddress(string address)

{

// must only proceed with validation if we have data

// to validate

if (address == null || address.Length == 0)

return true;

Regex rx = new Regex(@"[^A-Za-z0-9@\-_.]", RegexOptions.Compiled);

MatchCollection matches = rx.Matches(address);

if (matches.Count > 0)

return false;

// Must have an '@' character

int i = address.IndexOf('@');

// Must be at least three chars after the @

if (i <= 0 || i >= address.Length - 3)

return false;

// Must only be one '@' character

if (address.IndexOf('@', i + 1) >= 0)

return false;

// Find the last . in the address

int j = address.LastIndexOf('.');

// The dot can't be before or immediately after the @ char

if (j >= 0 && j <= i + 1)

return false;

return true;

}

5.查看SendMailActivity代码。把ActivityValidator加到SendMailActivity上。

[ActivityValidator(typeof(ParametersValidator))]

public partial class SendMailActivity : System.Workflow.ComponentModel.Activity

6.生成解决方案。

任务一完成。

7.打开SendMailWorkflow设计视图。选中SendMailActivity。在From属性中输入一个不正确的Email地址。

8.在设计视图上,SendMailActivity右上角会出现一个红色的叹号,将鼠标放在上面会看到验证后的错误提示。
   

9.修改后,Email地址验证通过,错误提示会消失。

10.保存文件,编译生成解决方案。

任务二完成。

参考资料:

Microsoft Hands-on Labs for Windows Workflow Foundation

Windows Workflow HOL学习笔记(七):添加一个验证来检查Email参数相关推荐

  1. Windows Workflow HOL学习笔记(十二):创建状态基工作流

    W indows Workflow HOL学习笔记(十二):创建状态基工作流 本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation ...

  2. Polyworks脚本开发学习笔记(七)-完成一个自动化任务

    Polyworks脚本开发学习笔记(七)-完成一个自动化任务 利用之前的命令建立一个自动化脚本 第一步: 设置环境参数 设置注释字体避免出现不兼容中文的乱码,常用微软雅黑 #设置注释字体 VIEW A ...

  3. Windows编程课程学习笔记

    一. Windows程序内部运行机制--Windows编程课程学习笔记 二. MFC框架程序分析--Windows编程课程学习笔记 三. 简单绘图--Windows编程课程学习笔记 四. 文本编程-- ...

  4. Windows驱动开发学习笔记(七)—— 多核同步内核重载

    Windows驱动开发学习笔记(七)-- 多核同步 基础知识 并发与同步 分析 InterlockedIncrement 原子操作相关API 内核文件 多核同步 临界区 示例一:错误的临界区 示例二: ...

  5. Windows保护模式学习笔记(七)—— PDEPTE

    Windows保护模式学习笔记(七)-- PDE&PTE Cr3 PDE(页目录表项) PTE(页表项) 物理页的属性 10-10-12分页的补充 实验1:证明PTE的特征1 第一步:选择一个 ...

  6. Windows phone 8 学习笔记(8) 定位地图导航

    Windows phone 8 学习笔记(8) 定位地图导航 原文:Windows phone 8 学习笔记(8) 定位地图导航 Windows phone 8 已经不使用自家的bing地图,新地图控 ...

  7. Windows phone 8 学习笔记(5) 图块与通知

    基于metro风格的Windows phone 8 应用提到了图块的概念,它就是指启动菜单中的快速启动图标.一般一个应用必须有一个默认图块,还可以有若干个次要图块.另外,通知与图块的关系比较密切,我们 ...

  8. 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例(转)

    和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例 今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验.但是,资料以 ...

  9. Windows x64内核学习笔记(四)—— 9-9-9-9-12分页

    Windows x64内核学习笔记(四)-- 9-9-9-9-12分页 前言 9-9-9-9-12分页 实验一:线性地址转物理地址 页表基址 定位基址 PTE to PXE 实验二:通过页表基址定位各 ...

  10. Windows x64内核学习笔记(一)—— 环境与配置

    Windows x64内核学习笔记(一)-- 环境与配置 前言 新特性 基础要求 实验环境 Guest Win10配置 问题解决 参考资料 前言 之前,跟着海哥学习了windows内核的一些机制,包括 ...

最新文章

  1. Docker Day 4 Docker基础之Dockerfile语法
  2. SQL Server 2008 R2 安装时提示“Reporting Services目录数据库文件存在”
  3. arduino服务器_如何使用Arduino检查Web服务器的响应状态
  4. 前端学习(2547):数据代理
  5. android 微积分计算器,高数计算器1.0(高数计算工具app)
  6. 三种强大的物体识别算法——SIFT/SURF、haar特征、广义hough变换的特性对比分析
  7. salt一键部署jdk
  8. 一次完整的HTTP请求过程(深入分析)
  9. 为什么微信无法打开html文件,微信网页版打不开怎么办?微信网页版无法打开的解决方法...
  10. 图片和边框的距离调整html,css图片如何设置上边框距离
  11. Chosen.1 翁克 回忆 怪事
  12. 深入理解GAN对抗生成网络
  13. 德国质量链接中国速度,奥迪一汽新能源汽车有限公司在电动化赛道上全速奔跑
  14. windows键被禁用_如何在Windows 10上禁用插入键
  15. 苏州计算机英语怎么说,苏州用英语怎么说,苏州的英语单词
  16. 数据页和数据行(翻译)
  17. 解决vagrant up启动失败,停留在Booting VM...过程的方法
  18. 高德地图 API,点击地图标记获取自定义标记 (Marker) 中的信息
  19. 水果食用大全 -- 果品食疗 - 杏
  20. Windows 11(ISO) 官方镜像文件下载

热门文章

  1. 关于Linux进程优先级数字混乱的彻底澄清
  2. SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements) ——《Using SQlite》读书笔记 .
  3. CABAC基于上下文的自适应二进制熵编码
  4. linux内核奇遇记之md源代码解读之一
  5. Linux文件系统(七)---系统调用之open操作(三) 之 open_namei函数
  6. echart 地图 某个地区_「省份」Echart系列 | 绘制世界地图含中国各个省份(地图篇)(一) - seo实验室...
  7. 小白都能理解的矩阵与向量求导链式法则
  8. 如何给awk传外部参数
  9. python贪吃蛇手机版代码_Python贪吃蛇简单的代码
  10. vs201检查更新不成功_Kubernetes玩转Pod滚动更新123