Beginning WF4读书笔计 - 第三章 01“Flowchart”工作流
在本章中,我们将创建基于“Flowchart”活动的工作流。其实通过名称我们可以猜到“Flowchart”活动与我们平常所说的流程图类似;这些活动都是通过判断条件来相互连接的。
使用“Sequence”活动时,所有的子活动都是由上到下顺序执行的,但是基于“Flowchart”的活动,其子活动则可以按其分支条件进行的,可以任意顺序执行。
创建“Flowchart”工作流
创建一个控制台的工作流解决方案,如下:
设计“Flowchart”
从工具箱中拖一个“Flowchart”活动到工作流窗体上(是那个叫Workflow1.maml双击后的视图)。这时工作流的“Start”节点就会出在在视图当中,它是一个绿色的圆,同时在其之下还有很大一块区域,这个区域可以用来存放其它的活动。如下图:
在本章开头已经说了,“Flowchart”与“Sequence”活动最大的不同在于其子活动的执行顺序上,如果你要更改其执行顺序的活,只能通过重新排列来进行;且他们之间的位置关联也是自动完成、自上而下的;但是基于“Flowchart”的活动可以摆放在设计视图的任何位置,并通过连接线来确定他们之间的相互关系与执行顺序。
在本例中,我们将通过对当前时间的判断来显示一个恰当“祝福”。不过,我们还得先从头开始,先在“Start”活动下面添加一个“WriteLine”活动,并把其“DisplayName”设置为“Hello”,“Text”属性设置为“Hello, World!”。
连接
把鼠标放在“Start”活动之上,这时你会发现在它的四周出现了4个连接点(热点)。如下图:
这时,我们从“Start”的一个连接点,按下鼠标,在不松开的前提下移动到“Hello”之上,这时我们会发现在“Hello”上也出现了它的4个连接点。如下图:
这时,你并不需要刻意去选择哪个连接点,设计器会智能的帮你选择,并且你可以看到实时的效果。这时只要把鼠标放开,这两个活动就被连接上了。如下图:
FlowDecision
从工具箱中拖一个“FlowDecision”活动到“Hello”活动之下。这时会出一个黄色的菱形图标,非常像们在流程图中所见的判断符的活动。这时我们要在它的属性窗中把“condition”属性设置为“DateTime.Now.Hour >= 12”。如果这时,把鼠标放在这个“FlowDecision”活动之上,同样会看见它的连接点,如下图:
与前面不同的是,这时的连接点是一个在左侧名叫“False”的分支和一个在右侧叫“True”的分支,同时它的“condition”的值也显示出来了。不过“condition”的值会随着鼠标的离开而隐藏,除非你通过其右上角的小三角按钮来进行人为控制。这时,我们要通过属性窗口,把它的“FalseLabel”和“TureLabel”分别更改为“Morning”和“Afternoon”。如果这时再把鼠标放到活动之上,连接点的显示效果与之前就不太一样了。
接下来,我们先在“Hello”与“FlowDecision”两个活动之间建立连接,并在“FlowDecision”活动的右侧拖一个“WriteLine”活动,把这个活动的“DisplayName”和“Text”属性分别设置为“Morning”和“Good Morning”。之后,我们把鼠标放在“FlowDecision”的“Morning”连接点上按下不放,并移动到“Morning”活动之上,再松开。这时“FlowDecsion”与“Morning”两活动之间的连接也建立了。如下图:
接着,我们再拖一个“FlowDecision”到第一个“FlowDecision”的左下侧,并从第一个的“Afternoon”连接点处建立连接。同进把第二个“FlowDecision”的“condition”、“FalseLabel”和“TureLabel”分别设置为“DateTime.Now.Hour >=18”、“Afternoon”和“Evening”。同时再拖两个“WriteLine”活动出来,并分别把他们的“DisplayName”设置为“Afternoon”和“Evening”,“Text”设置为“Good Afternoon”和“Good Evening”。并且与第二个“FlowDecision”的“Afternoon”和“Evening”连接点分别建立连接,效果如下:
运行程序
在运行程序之前,打开Program.cs文件,在main()函数的更改代码如下:
static void Main(string[] args) { WorkflowInvoker.Invoke(new Workflow1()); Console.WriteLine("Press ENTER to exit"); Console.ReadLine(); }
这时按“F5”运行程序,可得如下类似效果(具体效果,依运行时间可能不一样)。
与本系列相关的所有文档及代码索引请参考:
《Beginning WF : Windows Workflow in .NET 4.0》读书笔记