跟我一起学Windows Workflow Foundation(7)-----给定制活动添加有效性验证

原创 2007年09月17日 09:53:00
 

 

给定制活动属性添加有效性验证

这个实验也没什么可详细说的了,无非就是给我们之前发送E-Mail的活动的属性里加个验证,这里我们验证了E-mail的To和From属性是否符合邮件的格式。如果不是正确的邮件格式,我们则在编译的时候不允许进行编译。

下面大概过一下:

1. 打开我们上次的那个定制活动项目,在 SendMailActivityLibrary这个项目上添加一个新的代码文件,名称叫做ParametersValidator.cs

2. 在代码文件中输入如下代码,代码继承自ActivityValidator,如果是合成的活动(就是上上次我们拼出来的那个自定义活动),那么代码应该继承自CompositeActivityValidatorActivityValidator在设计和运行时状态会进行验证,这些验证依赖于活动,在我们进行编译和运行时活动时,会自动运行这些代码查看我们的属性是否符合规则。

using System;
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方法来完成我们的验证。活动的ValidateProperties方法是在进行编译时执行的验证方法。这些验证语句将验证我们输入的这些属性是否是正确的E-mail格式

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;
}
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;
}

4. 修改 SendMailActivity.cs 的代码

5. 添加 ActivityValidator 属性到 SendMailActivity, 如下面所示:

namespace SendMailActivityLibrary

{

[ActivityValidator(typeof(ParametersValidator))]

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

{

6. 重新进行编译.

7. 下面我们进行测试,修改SendMailWorkflow.cs 中的SendMailActivity活动,修改他的From属性,让他不是一个正确的E-mail格式,如:shinji3292163.com。

8. 重新进行编译。

9. 可以看到如下界面:

10. 修改成正常的,就可以编译成功了。

《跟我一起学C++》

《跟我一起学C++》视频下载地址:   《跟我一起学C++》第一季(入门篇)总共38集,目录列表如下: 01C++介绍 为什么要学习C++ C++为什么难学 C++ 11值得学习的新特性 ...
  • oAmamatthew
  • oAmamatthew
  • 2014年05月16日 18:51
  • 577

跟我一起学C++之C++介绍(笔记)

C++介绍 为什么学习C++?  1.C++能提升性能,C++之父BjarneStroustrup戏称C++可以减轻全球变暖问题。  2.编程语言需求总结为四个:效率(efficiency)、灵活(f...
  • kongshuai19900505
  • kongshuai19900505
  • 2016年05月25日 23:24
  • 366

一起学习CMake – 04

转载--网易博客--水灵
  • xinranzhang0911
  • xinranzhang0911
  • 2014年06月09日 13:46
  • 311

跟我一起学Makefile

一、 清空目标文件的规则: 每个Makefile中都应该有一个
  • XinYu1234789
  • XinYu1234789
  • 2014年07月21日 13:47
  • 422

跟我一起玩WPF-走进WPF

WFP     是Windows演示基础(WindowsPresentation Foundation)。一个用于windows的图形显示系统。WPF是针对.net设计的,受现代显示技术(如HTML...
  • u010176014
  • u010176014
  • 2015年10月28日 23:28
  • 621

跟我一起学CMake

CMake是一个很强大的工具,在这里以一个学习者的身份来和大家一起学习,可以让大家更快的学习和领会这个强大工具...
  • aysycd
  • aysycd
  • 2014年05月30日 10:53
  • 943

跟我一起学extjs5(10--使用MVVM控制菜单样式,含前10节源码)

跟我一起学extjs5(10--使用MVVM特性控制菜单样式)         菜单的样式多了,怎么可以灵活的切换是个问题。         在使用标准菜单的时候,在菜单最前面有二个按钮,可以切换...
  • jfok
  • jfok
  • 2014年07月03日 11:00
  • 15322

一起学Netty(一)之 Hello Netty

四月份花了大概一个月的时间翻译了2015年12月出版的《Netty in Action》 说实话,翻译完了,感觉只是对Netty有了一些初步的了解,对Netty的模型在脑海中也是有了初步的雏形,好记性...
  • linuu
  • linuu
  • 2016年05月07日 17:13
  • 8458

跟我一起学Makefile

概述     什么是makefile?或许很多Winodws程序员都不知道这个东西,因为那些Windows IDE都为你做了这个工作,但我觉得要做一个好的和professional的程序员,ma...
  • cherish_2012
  • cherish_2012
  • 2014年06月04日 10:48
  • 442

跟我一起学makefile

说明:本文转自  陈皓 (CSDN) 概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得...
  • JXH_123
  • JXH_123
  • 2014年05月28日 08:50
  • 629
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跟我一起学Windows Workflow Foundation(7)-----给定制活动添加有效性验证
举报原因:
原因补充:

(最多只允许输入30个字)