WF 从入门到精通(第一章):Workflow 简介

学习完本章,你将掌握:

1.了解工作流的概念和理论

2.把WF 和BizTalk 与WCF 做比较

3.开始使用WF 进行编程

4.知道怎样使用Visual Studio 工作流支持

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

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.创建顺序工作流控制台应用程序项目

image.png

3.项目名称中输入PCodeFlow

4.点击确定,将自动生成下面的初始界面

image.png

在编辑代码或插入Workflow 项前,停留片刻看看Workflow 项目为你生成的两个文件:

Program.cs:从许多方面可以看出,这是一个典型的控制台应用程序源文件。然而,这个模板增加了大量代码来支持Workflow 的操作。理解这些代码是本书的一个主要目标,但本章只是简单了解一下它做了些什么。

Workflow1.cs:这是一个Workflow 组件,我们将对其进行修改以进行邮政编码的验证,第一次使用你就可以放入许多东西,但我们现在还是从使用这个简单的Workflow 开始工作吧。

创建一个工作流

在工具箱中拖一个IfElse 活动组件到workflow 设计界面上。

image.png

我们现在将使用IfElse 活动组件来问下面的问题:“我们已有的一个字符串是一个合法的邮政编码吗?”。我们在代码中将确实使用先前你看到的代码段中的正则表达式来问这一问

题。

但 在我们进行这一步前请仔细看看workflow 的视图设计器。workflow 视图设计器提醒我们没有提供相应的代码来做这一决定。假如你看看命名为 “ifElseBranchActivity1”的

左边分支的右上角,你将看到里面有一个惊叹号标记的小圆形图标。这是workflow 视图设计器在告诉 你workflow 并不完整。假如你试图编译带有这种提醒图标的项目时,将会编译报错。如你把鼠标移到图标上并单击呈现出的向下箭头时,你还能看到更多关 于这一错误情况的信息。

image.png

在IfElse 活动的分支上添加代码

1.移动鼠标到命名为“ifElseBranchActivity1”的左边分支上,单击以在属性面板上激活这一分支的属性。

2. 我们添加一个条件,意思是说workflow 执行到分支时将强制其执行一些动作(条件判断为True 时,将执行左边分支)。为做到这些,单击 “condition”属性激活条件类型属

性的下拉列表。从列表中你可以选择“代码条件”类型、“(无)”类型和“声明性规则条件”类型。这里选择“代码 条件”类型。

3.上述步骤完成后,“condition”类型属性用户界面会包含一个“+”号,我们单击展开它的子属性,该子属性也命名为“condition”,单击以激活它。

4.“condition”属性需要输入我们想添加的内部事件名字。当条件需要判断时这个事件将激发。在本例子中我们输入“EvaluatePostalCode”。

image.png

Visual studio 2008 在幕后为你在workflow 源文件中添加了你在“condition”属性中所指明的事件。稍候我们将添加在事件激发时所要执行的正则表达式代码段。

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

添加Code 活动

1.拖一个“Code”活动到workflow 视图设计器上,并放到左边分支(ifElseBranchActivity1)的区域内。

2.就像先前添加条件判断的代码一样,我们将为该分支添加被选中时执行的代码。单击“codeActivity1”图标以在属性面板中激活它的属性。

3.在“ExecuteCode”属性中输入“PostalCodeValid”。

image.png

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 再看看执行结果。


源码下载http://files.cnblogs.com/gyche/PCodeFlow.rar



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864