在WF4.0中提供了一系列如“If”、“Whiel”、“Assign”和“Sequence”等程序要素,(注:这些要素与我们在C#语言中的关键字is, while,=,List类似),为了说明这些要素是如何工作的,我们会设计一个“祝福”程序,类似老式的“座钟”报时一样,发出“铛”的声响。
首先,让我们的解决方案中打开“Workflow1.asmx”文件。
使用变量
在WF4.0中但凡要使用到的变量,都必须事先定义(预定义)。在本例中我们将定义两个变量,为别为标示需要发声的次数“numberBells”和记录已经响过次数的“counter”。
首先,选中主活动“Sequence”,点击左下角的“变量”,可现如下页面:(注:详细过程可参阅《Beginning WF4读书笔计 - 第一章 01创建一个简单的工作流》)
(图1-7)
然后,点击“创建变量”,改名为“counter”,并分别填写类型、范围及默认值如下图:
(图1-8)
同时查看其属性页面如下:
(图1-9)
接下来,以同样的方法创建变量“numberBells”,并设置类型为“Int32”,范围为“Sequence”;这时从属性“Default”的右侧的按钮来设置“VB表达式”,如下图:
(图1-10)
说明:VB表达式,他大爷!看来得找本VB的书来翻一翻了。不过我试了一个DateTime.Now.Hour,结果一样,没细究。
表达式“DateAndTime.Now.Hour”表示以小时来表示需要响的次数。现在变量总体示图如下:
(图1-11)
IF
由于DateAndTime返回的时间是以24小时制,所以比如14点,其实应该只响两次,而非14次。如果是在程序代码中,我们可以简单的采用如下代码进行控制。
f (numberBells > 12)
{
numberBells -= 12;
}
但在,在WF4.0中我们就需要使用“If”和“Assign”两个活动来协作完成这个功能。步骤如下:
首先,我们在“WriteLine”活动的下面拖放一个“If”活动,
(图1-12)
[如果活动存在问题,那么在期右上角将会出现一个“!”号,把鼠标放置其上,可显示且体的问题说明]
接下来,将其名称改为“Adjust for PM”。同时,把“Condition”设置为“numberBells > 12”
Assign
“Assign”活动,可实现对一个变量或参数进行赋值
(图1-13)
在本例中,从工具栏中拖曳一个“Assign”到上述的“IF”活动的的“THEN”中,并在其属性页面中设置“TO”和“Value”分别为“numberBells”和“numberBells-12”。如图:
(图1-14)
其实很多“活动”属于“复合活动”(compound activities),而这类活动是允许包含其它活动的,If就是其中的一个!
While
现在我们需要添加一个“While”活动来发出声响了(注:在本例中只是输出文本)。我们从工具箱中拖一个“While”活动到“Adjust for PM”之下。同时命名为“Sound Bells”。
(图1-15)
在“While”活动中,如果“condition”的条件为“true”,时其“Body”中的活动就会执行,真到“condition”为“false”为终止。
说明:DoWhile就不细说了,知道C#中while与do{}while区别的就能了解这个。
在本例中,把“Condition”设置为“counter <= numberBells”,同时拖一个“Sequence”到其“Body”中,并更名为“Sound Bell”。
(图1-16)
Sequence
接下来,我们将使用3个活动来完成“Sound Bell”。在这个示例中,并不会真正的发声,取而代之的是输出一段表示响过次数的文本。
所以首先拖一个“WriteLine”到“Sound Bell”活动中,并设置期Text属性为“counter.ToString()”。
接下来,在“WriteLine”活动之下再添加一个“Assign”活动,并设置其“TO”和“Value”属性分别为“counter”、“counter + 1”。即表示每输出一次,已响过的声音加1。
Delay
最后,拖一个“Delay”活动到“Assign”活动之下。“Delay”活动会暂停工作流一段时间(指定的时间)。“Delay”活动有一个参数“Duration”用来设置需要暂停的时间长。我们可以设置为:TimeSpan.FromSeconds(1)
(图1-17)
其它修饰
我们可以通过点击活动右上角的“箭头”来收起和展开活动细节,如图
(图1-18)
接下来我们将在“Sound Bells”活动之下,新增一个“WriteLine”活动来显示报时的时间(注:以体现Delay的效果)。并设置期名称为“Display Time”把其Text属性设置为如下表达式:
"The time is: " + DateAndTime.Now.ToString()
再添加一个“If”活动来输出问候语,并把这个活动命名为“Greeting”,并把其“Condition”设置为如下:
DateAndTime.Now.Hour >= 18
同时分别在其“THEN”和“ELSE”中各拖一个“WriteLine”活动,并把其Text分别设置为:“Good Evening”和“Good Day”。
(图1-19)
运行程序(F5)