Windows Workflow HOL学习笔记(七):添加一个验证来检查Email参数
本文内容来自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参数相关推荐
- Windows Workflow HOL学习笔记(十二):创建状态基工作流
W indows Workflow HOL学习笔记(十二):创建状态基工作流 本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation ...
- Polyworks脚本开发学习笔记(七)-完成一个自动化任务
Polyworks脚本开发学习笔记(七)-完成一个自动化任务 利用之前的命令建立一个自动化脚本 第一步: 设置环境参数 设置注释字体避免出现不兼容中文的乱码,常用微软雅黑 #设置注释字体 VIEW A ...
- Windows编程课程学习笔记
一. Windows程序内部运行机制--Windows编程课程学习笔记 二. MFC框架程序分析--Windows编程课程学习笔记 三. 简单绘图--Windows编程课程学习笔记 四. 文本编程-- ...
- Windows驱动开发学习笔记(七)—— 多核同步内核重载
Windows驱动开发学习笔记(七)-- 多核同步 基础知识 并发与同步 分析 InterlockedIncrement 原子操作相关API 内核文件 多核同步 临界区 示例一:错误的临界区 示例二: ...
- Windows保护模式学习笔记(七)—— PDEPTE
Windows保护模式学习笔记(七)-- PDE&PTE Cr3 PDE(页目录表项) PTE(页表项) 物理页的属性 10-10-12分页的补充 实验1:证明PTE的特征1 第一步:选择一个 ...
- Windows phone 8 学习笔记(8) 定位地图导航
Windows phone 8 学习笔记(8) 定位地图导航 原文:Windows phone 8 学习笔记(8) 定位地图导航 Windows phone 8 已经不使用自家的bing地图,新地图控 ...
- Windows phone 8 学习笔记(5) 图块与通知
基于metro风格的Windows phone 8 应用提到了图块的概念,它就是指启动菜单中的快速启动图标.一般一个应用必须有一个默认图块,还可以有若干个次要图块.另外,通知与图块的关系比较密切,我们 ...
- 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例(转)
和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例 今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验.但是,资料以 ...
- Windows x64内核学习笔记(四)—— 9-9-9-9-12分页
Windows x64内核学习笔记(四)-- 9-9-9-9-12分页 前言 9-9-9-9-12分页 实验一:线性地址转物理地址 页表基址 定位基址 PTE to PXE 实验二:通过页表基址定位各 ...
- Windows x64内核学习笔记(一)—— 环境与配置
Windows x64内核学习笔记(一)-- 环境与配置 前言 新特性 基础要求 实验环境 Guest Win10配置 问题解决 参考资料 前言 之前,跟着海哥学习了windows内核的一些机制,包括 ...
最新文章
- Docker Day 4 Docker基础之Dockerfile语法
- SQL Server 2008 R2 安装时提示“Reporting Services目录数据库文件存在”
- arduino服务器_如何使用Arduino检查Web服务器的响应状态
- 前端学习(2547):数据代理
- android 微积分计算器,高数计算器1.0(高数计算工具app)
- 三种强大的物体识别算法——SIFT/SURF、haar特征、广义hough变换的特性对比分析
- salt一键部署jdk
- 一次完整的HTTP请求过程(深入分析)
- 为什么微信无法打开html文件,微信网页版打不开怎么办?微信网页版无法打开的解决方法...
- 图片和边框的距离调整html,css图片如何设置上边框距离
- Chosen.1 翁克 回忆 怪事
- 深入理解GAN对抗生成网络
- 德国质量链接中国速度,奥迪一汽新能源汽车有限公司在电动化赛道上全速奔跑
- windows键被禁用_如何在Windows 10上禁用插入键
- 苏州计算机英语怎么说,苏州用英语怎么说,苏州的英语单词
- 数据页和数据行(翻译)
- 解决vagrant up启动失败,停留在Booting VM...过程的方法
- 高德地图 API,点击地图标记获取自定义标记 (Marker) 中的信息
- 水果食用大全 -- 果品食疗 - 杏
- Windows 11(ISO) 官方镜像文件下载
热门文章
- 关于Linux进程优先级数字混乱的彻底澄清
- SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements) ——《Using SQlite》读书笔记 .
- CABAC基于上下文的自适应二进制熵编码
- linux内核奇遇记之md源代码解读之一
- Linux文件系统(七)---系统调用之open操作(三) 之 open_namei函数
- echart 地图 某个地区_「省份」Echart系列 | 绘制世界地图含中国各个省份(地图篇)(一) - seo实验室...
- 小白都能理解的矩阵与向量求导链式法则
- 如何给awk传外部参数
- python贪吃蛇手机版代码_Python贪吃蛇简单的代码
- vs201检查更新不成功_Kubernetes玩转Pod滚动更新123