跟我一起学Windows Workflow Foundation(7)-----给定制活动添加有效性验证
2007-04-23 17:33
519 查看
给定制活动属性添加有效性验证
这个实验也没什么可详细说的了,无非就是给我们之前发送E-Mail的活动的属性里加个验证,这里我们验证了E-mail的To和From属性是否符合邮件的格式。如果不是正确的邮件格式,我们则在编译的时候不允许进行编译。
下面大概过一下:
1. 打开我们上次的那个定制活动项目,在 SendMailActivityLibrary这个项目上添加一个新的代码文件,名称叫做ParametersValidator.cs。
2. 在代码文件中输入如下代码,代码继承自ActivityValidator,如果是合成的活动(就是上上次我们拼出来的那个自定义活动),那么代码应该继承自CompositeActivityValidator。 ActivityValidator在设计和运行时状态会进行验证,这些验证依赖于活动,在我们进行编译和运行时活动时,会自动运行这些代码查看我们的属性是否符合规则。
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 { } }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
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; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
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(7)-----给定制活动添加有效性验证
- 跟我一起学Windows Workflow Foundation(7)-----给定制活动添加有效性验证
- 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据
- 跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动
- 跟我一起学Windows Workflow Foundation(4)-----使用Listen,Delay,和其他envnt-based定制活动
- 跟我一起学Windows Workflow Foundation(4)-----使用Listen,Delay,和其他envnt-based定制活动(转)
- 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据
- 跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动
- 跟我一起学Windows Workflow Foundation(4)-----使用Listen,Delay,和其他envnt-based定制活动
- 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据
- 跟我一起学Windows Workflow Foundation(4)-----使用Listen,Delay,和其他envnt-based定制活动
- 跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动(发邮件)
- 跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动
- 跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动(发邮件)
- 跟我一起学Windows Workflow Foundation(5)-----使用activity设计器创建一个整合的定制activity(转)
- 跟我一起学Windows Workflow Foundation(5)-----使用activity设计器创建一个整合的定制activity
- 跟我一起学Windows Workflow Foundation(5)-----使用activity设计器创建一个整合的定制activity
- 跟我一起学Windows Workflow Foundation(5)-----使用activity设计器创建一个整合的定制activity
- Windows Workflow Foundation(5)- 活动和Workflow类型
- Windows Workflow Foundation(四)——(创建自定义活动)(转载)