以下是一小段进行邮政编码验证的代码

string USCode = @"^(\d{5}$)|(\d{5}$\-\d{4}$)";
string CanadianCode = @"[ABCEGHJKLMNPRSTVXY]\D[A-Z]\d[A-Z]\d";

public static bool ValidatePostalCode(string str)
{
    return (Regex.IsMatch(str,USCode)||Regex.IsMatch(str,CanadianCode));
}

这没有什么特别的:“测试一个输入的字符串,如果为美国ZIP编码或者加拿大邮政编码则返回True,否则返回False”。这是一段很实用的代码,事实上假如你不想在ASP.NET中使用其它验证控件的话,你就可在你的ASP.NET中使用这段验证逻辑。我们现在就创建一个Workflow应用程序,它将进行同样的验证,并且返回验证是否通过的信息。

创建一个基于控制台的Workflow项目

1.启动Visual Studio 2008
    2.创建顺序工作流控制台应用程序项目

    3.项目名称中输入PCodeFlow
    4.点击确定,将自动生成下面的初始界面

在编辑代码或插入Workflow项前,停留片刻看看Workflow项目为你生成的两个文件:
    Program.cs:从许多方面可以看出,这是一个典型的控制台应用程序源文件。然而,这个模板增加了大量代码来支持Workflow的操作。理解这些代码是本书的一个主要目标,但本章只是简单了解一下它做了些什么。
    Workflow1.cs:这是一个Workflow组件,我们将对其进行修改以进行邮政编码的验证,第一次使用你就可以放入许多东西,但我们现在还是从使用这个简单的Workflow开始工作吧。

创建一个工作流

在工具箱中拖一个IfElse活动组件到workflow设计界面上。
    我们现在将使用IfElse活动组件来问下面的问题:“我们已有的一个字符串是一个合法的邮政编码吗?”。我们在代码中将确实使用先前你看到的代码段中的正则表达式来问这一问题。
    但在我们进行这一步前请仔细看看workflow的视图设计器。workflow视图设计器提醒我们没有提供相应的代码来做这一决定。假如你看看命名为“ifElseBranchActivity1”的左边分支的右上角,你将看到里面有一个惊叹号标记的小圆形图标。这是workflow视图设计器在告诉你workflow并不完整。假如你试图编译带有这种提醒图标的项目时,将会编译报错。如你把鼠标移到图标上并单击呈现出的向下箭头时,你还能看到更多关于这一错误情况的信息。

在IfElse活动的分支上添加代码
    1.移动鼠标到命名为“ifElseBranchActivity1”的左边分支上,单击以在属性面板上激活这一分支的属性。
    2.我们添加一个条件,意思是说workflow执行到分支时将强制其执行一些动作(条件判断为True时,将执行左边分支)。为做到这些,单击“condition”属性激活条件类型属性的下拉列表。从列表中你可以选择“代码条件”类型、“(无)”类型和“声明性规则条件”类型。这里选择“代码条件”类型。
    3.上述步骤完成后,“condition”类型属性用户界面会包含一个“+”号,我们单击展开它的子属性,该子属性也命名为“condition”,单击以激活它。
    4.“condition”属性需要输入我们想添加的内部事件名字。当条件需要判断时这个事件将激发。在本例子中我们输入“EvaluatePostalCode”。
    Visual studio 2008在幕后为你在workflow源文件中添加了你在“condition”属性中所指明的事件。稍候我们将添加在事件激发时所要执行的正则表达式代码段。

在我们做这些工作之前,让我们继续在workflow视图设计器上工作,我们刚刚增加了一个条件,它将引发工作流选择左边路径还是右边路径。但是两条路径中都没有指明工作流将进行的动作。我们在左边“ifElseBranchActivity1”分支和右边“ifElseBranchActivity2”分支中添加活动。

添加Code活动
    1.拖一个“Code”活动到workflow视图设计器上,并放到左边分支(ifElseBranchActivity1)的区域内。
    2.就像先前添加条件判断的代码一样,我们将为该分支添加被选中时执行的代码。单击“codeActivity1”图标以在属性面板中激活它的属性。
    3.在“ExecuteCode”属性中输入“PostalCodeValid”。
    Visual Studio 2008会自动插入该事件。稍候我们会提供对应的执行代码。右边分支也同样做,只是要在“ExecuteCode”属性中输入“PostalCodeInValid”。

在我们的workflow中添加事件处理代码
    1.打开Workflow.cs准备进行编辑
    2.添加引用:using System.Text.RegularExpression;
    3.定位到“EvaluatePostalCode”方法上,插入下面的代码:

        private void EvaluatePostalCode(object sender, ConditionalEventArgs e)
        {
            string USCode = @"^(\d{5}$)|(\d{5}$\-\d{4}$)";
            string CanadianCode = @"[ABCEGHJKLMNPRSTVXY]\D[A-Z]\d[A-Z]\d";             e.Result = (Regex.IsMatch(_code, USCode) || Regex.IsMatch(_code, CanadianCode));
        }

变量e是“ConditionalEventArgs”类型的实例,它用来告知“IfElse”活动应选择哪条路径。

4.我们也需要为workflow活动添加一种能力,以便接受输入的字符串来进行验证工作。为此我们添加下面的代码,我们将声明一个名为“PostalCode”的公有属性。

private string _code=string.Empty;
public string PostalCode
     {
         get
         {
             return _code;
         }
         set
         {
             _code = value;
         }
     }

有了这些,我们的workflow应用程序就可以进行编译了,但程序并不完整,我们还要在Workflow1.cs文件中定位到“PostalCodeValid”方法并插入下面的代码:
    Console.Write("The postal code {0} is valid.", _code);   
    同样在“PostalCodeInValid”方法中插入下面的代码:
    Console.Write("The postal code {0} is *invalid*.", _code);

调用工作流
    1.打开Program.cs文件。
    2.定位到:
    WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(PCodeFlow.Workflow1),wfArgs);
    3.把上述代码替换为:

Dictionary<string, object> wfArgs = new Dictionary<string, object>();
wfArgs.Add("PostalCode", args.Length > 0 ? args[0] : ""); WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(PCodeFlow.Workflow1),wfArgs);

编译应用程序

执行你的工作流应用程序
    1.打开命令提示符窗口。
    2.在命令提示符下定位到编译后所生成的应用程序目录。
    3.输入pcodeflow 12345查看执行结果。
    4.输入pcodeflow 1234x再看看执行结果。

源码下载:PCodeFlow

转载于:https://www.cnblogs.com/EricGu/archive/2008/03/20/1114907.html

【翻译】WF从入门到精通(一)相关推荐

  1. 【翻译】WF从入门到精通(第十一章):并行活动

    上一篇:[翻译]WF从入门到精通(第十章):事件活动 学习完本章,你将掌握:     1.理解在工作流环境中Parallel活动是怎样执行的,并且懂得如何使用它们     2.并行执行路径中的同步数据 ...

  2. 【翻译】WF从入门到精通(第六章):加载和卸载实例

    上一篇:[翻译]WF从入门到精通(第五章):workflow跟踪 学习完本章,你将掌握:     1.理解工作流实例为什么要卸载和重新加载及其时机     2.理解工作流实例为什么要持久化及其时机   ...

  3. 【翻译】WF从入门到精通(第八章):调用外部方法及工作流

    上一篇:[翻译]WF从入门到精通(第七章):基本活动的操作例 学习完本章,你将掌握:     1.创建并调用你的工作流外部的本地数据服务     2.理解怎样使用接口来为宿主进程和你的工作流之间进行通 ...

  4. 【翻译】WF从入门到精通(第十七章):关联及本地主机通信

    上一篇:WF从入门到精通(第十六章):声明式工作流 学习完本章,你将掌握:      1.了解工作流关联(correlation)以及在什么地方必须去使用它.它为什么是重要的      2.使用工作流 ...

  5. [导入]【翻译】WF从入门到精通(第八章):调用外部方法及工作流

    摘要: 学习完本章,你将掌握: 1.创建并调用你的工作流外部的本地数据服务 2.理解怎样使用接口来为宿主进程和你的工作流之间进行通信. 3.使用设计的外部方法在你的工作流和宿主应用程序之间传输数据. ...

  6. [导入]【翻译】WF从入门到精通(第十章):事件活动

    摘要: 学习完本章,你将掌握: 1.使用HandleExtenalEvent活动创建特定的事件处理程序 2.在你的工作流中使用Delay活动 3.在你的工作流中使用EventDriven活动 4.在你 ...

  7. [导入]【翻译】WF从入门到精通(第二章):workflow运行时

    摘要: 学习完本章后,你将掌握: 1.在你的应用程序中使用workflow 2.理解"WorkflowRuntime"对象的的基本功能 3.知道如何启动和停止workflow运行时 ...

  8. WF从入门到精通(第十章):事件活动 (转)

    在第八章("调用外部方法和工作流")中,你看过工作流怎样使用CallExternalMethod活动来和宿主应用程序进行通信.当工作流调用一个外部方法时,使用一个你提供的本地通信服 ...

  9. meteor从入门到精通_我已经大规模运行Meteor一年了。 这就是我所学到的。

    meteor从入门到精通 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 我已经大规模运行Meteor一年了. 这就是我所学到的. (I've been runni ...

最新文章

  1. 智能家居市场的魔方法则深度剖析
  2. 今日浅谈循环 for与while
  3. 深度学习核心技术精讲100篇(二十二)-深度解析数学建模核心知识之搜索与推荐模型中用户建模原理
  4. 多目标决策---基本概念
  5. git tag和分支的区别_GIT常用命令大全
  6. hello world_AngularJS Hello World示例
  7. Hbase 的Java API 操作
  8. 计算机音乐与制谱,电脑音乐编辑、制谱与视唱练耳一本通
  9. 15 JS运算符优先级
  10. eclipse 里边的 字体颜色代表了什么意思?
  11. 都在谈中台,究竟什么是中台?
  12. 关于IRR的一些总结
  13. 苹果手机电池恢复方法_recover恢复实用教程:苹果手机恢复误删照片的几种方法...
  14. hive优化——严格模式
  15. win10-未知的USB设备-解决自己问题的记录
  16. ant design 预览图片_Ant Design Pro上传图片
  17. 查看linux Mac地址
  18. 弦民谣吉他音源 Orange Tree Samples Evolution Steel Strings Kontakt
  19. 5天突击GRE(155+170+4.0)
  20. C语言如何制作dIL文件,C语言怎么加循环

热门文章

  1. 关于文件整理的一些心得
  2. 安川伺服调试软件_2020南昌三菱伺服回收广东收购价
  3. idea git 密码修改
  4. 如何在没有安全启动或 TPM 2.0 的传统 BIOS 上安装 Windows 11
  5. vc6可编译的 linux 源码,winpcap+vc6编译环境配置,以及获取网络设备列表的源代码...
  6. Centos7通过yum安装jdk8
  7. AWS服务器上安全组端口设置和访问的问题
  8. Docker版本介绍(5)
  9. 深入理解 LINQ to SQL 生成的 SQL 语句
  10. woff字体MIME类型配置