WF从入门到精通(第一章):WF简介_wf从入门到精通(c# wf学习)_thy822的博客-程序员宅基地

技术标签: 活动  WF从入门到精通  workflow  string  asp.net  正则表达式  工作  

http://tech.ddvip.com/2008-09/122250806572034.html (豆豆网)

http://file.ddvip.com/2008_09/1222508239_ddvip_5406.rar

学习下面内容,你将掌握:
     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.创建顺序工作流控制台应用程序项目

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/thy822/article/details/5096664

智能推荐

2016HDU多校联赛-HDU-5813-Elegant Construction(构造联通图)_构造联通的数_Prim233的博客-程序员宅基地

Elegant ConstructionTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 301 Accepted Submission(s): 158 Special JudgeProblem Description Being

清华博士解读 AlphaGo 战胜李世石背后的黑科技 | 人物志_CSDN资讯的博客-程序员宅基地

受访者 | 肖智清采访者 | 伍杏玲出品| CSDN(ID:CSDNnews)强化学习是机器学习的一个重要分支,主要用来解决连续决策的问题。2016年3月,人工智能界发生一件里程碑事件——AlphaGo 战胜李世石,其核心技术的深度强化学习引起开发者的关注和研究。强化学习是怎样的一项技术?又该如何学习呢?有一位清华博士,肖智清,为了帮助开发者更好地学习AI,紧跟技术潮流,撰写配套TensorFl...

考研大纲有那么重要吗?21考研大纲还会在7月发布吗?_计算机与软件考研的博客-程序员宅基地

考研大纲的重要性应该没有人不知道吧?作为官方发布的唯一对考生复习内容有指导意义的权威材料,它可以有效矫正考生复习方向偏差的问题,让复习方向化零为整,提高效率。所以把“吗”字去掉,考研大纲...

android 通知滚动动画,android 公告 滚动 (跑马灯效果)_琥珀棋子的博客-程序员宅基地

notice_vf 为 ViewFlipperxml:android:id="@+id/notice_vf"android:layout_width="0dp"android:layout_marginStart="16dp"android:layout_height="match_parent"android:layout_weight="1"&gt;activity:private var m...

macOS Catalina 新系统根目录只读问题的解决__Genesis的博客-程序员宅基地

macOS Catalina 新系统根目录只读问题的解决最近更新了 macOS Catalina,然后当我要启动 mongodb 的时候发现报了/data/db:Read-only file system的错误,网上谷歌了一番发现有人也出现了同样的问题。首先说一下这是因为苹果新系统升级了根目录的文件权限,变成只读了,这么做对用户来说是友好的,但是对我们开发人员来说简直就是灾难,好多原来的项目...

随便推点

AI上推荐 之 AFM与DIN模型(当推荐系统遇上了注意力机制)_afm算法用到dnn吗_翻滚的小@强的博客-程序员宅基地

1. 前言随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:信息消费者:如何从大量的信息中找到自己感兴趣的信息?信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注?为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

mybatis踩坑:批量插入oracle与mysql的区别_骑鱼看大海的博客-程序员宅基地

环境:mybatis+oracle功能需求:做项目时遇到一个需求,需要把几条数据批量插入到数据库。内容:开始做的时候,一下子就想到了&amp;lt;insert id=&quot;save&quot;  useGeneratedKeys=&quot;false&quot; parameterType=&quot;java.util.List&quot;&amp;gt;insert into table (ID,IMAGE_URL,STATE,UPDATE_T...

linux 硬件故障 日志_对Linux中的硬件问题进行故障排除_cumo3681的博客-程序员宅基地

linux查看硬件故障 Linux服务器在许多不同类型的基础架构中运行关键任务业务应用程序,包括物理机,虚拟化,私有云,公共云和混合云。 对于Linux系统管理员来说,了解如何管理Linux硬件基础结构(包括与网络 ,存储,Linux容器以及Linux服务器上的多个工具相关的软件定义的功能)非常重要。 在Linux上进行故障排除和解决与硬件相关的问题可能需要一些时间。 即使是经验丰富的系统管...

pythonsqlite锁定,Sqlite python sqlite3.OperationalError:数据库被锁定_weixin_39786534的博客-程序员宅基地

I have written the following code, which is showing the sqlite3.OperationalError: database is locked error. Any help to debug would be much appreciated.Basically I am trying to copy data from table1 ...

AD模数转换之热敏电阻_旭日初扬的博客-程序员宅基地

AD转换之热敏电阻传感器检测AD值软件设计main.c函数/* 实验现象:下载程序后数码管前4位显示热敏传感器检测的AD值 1,单片机--&gt;AD/DAC模块 管脚释义 P34--&gt;DI DIN 串行数据输入端,当CS为低电平时,数据在 DCLK上升沿锁存进来 P35--&gt;CS CS 片选信号,控制转换时序和使能串行输入输出寄存器,高电平时ADC掉电 P36--&gt;CL DCLK 时钟,外部时钟信号输入 P37-

Vue项目的创建_diaodu8047的博客-程序员宅基地

一、 node/vue安装1)如果不确定自己是否安装了node,可以在命令行工具内执行: node -v (检查一下 版本);2)如果执行结果显示: xx 不是内部命令,说明你还没有安装node , node 安装地址:http://nodejs.cn/download/3) vue安装:npm install vuevue中文文档:https://cn.vuejs.org/...

推荐文章

热门文章

相关标签