跟我一起学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. 修改成正常的,就可以编译成功了。

相关文章推荐

和我一起学Windows Workflow Foundation(微软工作流)

和我一起学Windows Workflow Foundation(微软工作流)
  • mq0036
  • mq0036
  • 2011年04月20日 10:00
  • 2129

Workflow Foundation 4 第九課 - 活动设计器

1、 在 Solution Explorer 中,右键单击 解决方案,然后选择 Add / New Project…     选择 Workflow 模板并选择 活动库。将项目命名为 HelloWo...
  • ianok
  • ianok
  • 2011年11月20日 22:25
  • 2084

跟我一起学Windows界面封装(四) 之 窗口过程函数(下) -- 奇妙的Thunk技术

本文是笔者参考多方资料,同时研究ATL源码后写的一些心得,因为在看源码时会出现很多点不懂,因此文章主要从这些小点出发而撰写,可能外人看来会有些语无伦次或者不够流畅,请见谅,不是计算机科班出身,才疏学浅...

跟我一起学Windows界面封装(二) 之 前奏篇:显示第一个窗口

知道了如何用基本的windowsAPI创建一个窗口,但现实中我们不可能完全使用这种形式来完成一个复杂的窗口程序。为此,我们必须进行一定的封装。          封装必须要完成几件基本的事情: (...

跟我一起学extjs5(39--单个模块的设计[7数据的增加修改删除])

跟我一起学extjs5(39--单个模块的设计[7数据的增加修改删除])         从后台取得数据已经可以了,下面对记录的新增、修改和删除进行前后台的互动改造。首先将新增和修改在行内进...
  • jfok
  • jfok
  • 2014年10月14日 15:08
  • 5127

跟我一起学windows初高级调试(1) --你为什么要学调试

本系列文章使用C/C++语言,vs自带调试器和windbg等其他相关调试工具,介绍windows下用户态下的初高级调试,不涉及内核调试...

我们为什么需要Windows Workflow Foundation?

今年10月的时候在北京的微软MVP大会上我做了一个关于.NET Framework 4.0中的Workflow的讲座。一场讲座下来给我明显的感觉的大部分的工程师对Windows Workflow Fo...

现在可用:Workflow Foundation Activity Pack for Windows Azure CTP 1

我们很高兴地宣布:Workflow Foundation (WF) Activity Pack for Windows Azure发布了!请参阅我们的CodePlex 页面来查看下载信息。也可以通过N...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跟我一起学Windows Workflow Foundation(7)-----给定制活动添加有效性验证
举报原因:
原因补充:

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