【IT168 技术文档】在前面的练习中,你学会了如果使用自定义的问好消息建立一个Hello Workflow程序。在这个练习中,你将会添加在工作流中添加If/Else逻辑 ,使之更具用户的状态显示不同消息。
这个练习将会采用测试优先的方法,首先为新要求编写一个测试,然后实现需要的代码使测试通过。
1.打开解决方案
你可以使用练习6中建立的解决方案作为这个练习的起始方案。或者你可以根据以下步骤开始练习7。
(1)选择Start | All Programs | Microsoft Visual Studio 2010以运行Microsoft Visual Studio 2010。
(2)打开%TrainingKitInstallFolder%\Labs\ IntroToWF\Ex7-????\Begin目录下的练习7 的起始方案以开始这个练习。
(3)按CTRL+SHIFT+B键编译解决方案。
2.为新需求建立测试
我们的程序有一个新的需求。如果名称是奇数个字母,我们就使用“Greetings”来问候,否则使用“Hello”来问候“”“”。以下是一个和工作流功能相同的代码范例。
{
string FirstWord = null;
if (userName.Length % 2 == 0)
FirstWord = "Hello";
else
FirstWord = "Greetings";
return FirstWord + ", " + userName +" from Workflow 4";
}
(1)建立一个测试来验证新的需求。首先打开HelloWorkflow.Test 项目中的SayHelloTests.cs文件 (C#)或SayHelloTests.vb (Visual Basic)并加入下列代码
public void ShouldReturnGreetingWithOddLengthName()
{
var output = WorkflowInvoker.Invoke(
new SayHello() { UserName = "Odd" });
string greeting = output["Greeting"].ToString();
Assert.AreEqual("Greetings Odd from Workflow 4", greeting);
}
(2)右键单击测试方法并选择Run Tests ( )。测试将会失败,因为你还没有修改工作流使根据情况其返回不同的问号消息。
ShouldReturnGreetingWithOddLengthName测试失败
3.在工作流中实现新的需求
(1)在Solution Explorer中双击SayHello.xaml文件,将它打开。
(2)添加名为FirstWord的变量用于储存问候消息的第一个单词为"Hello"或"Greetings"。按照如下步骤:
·单击选择Sequence活动。
·单击Variables按钮。弹出一个显示当前Sequence活动中有效变量的窗口。
·单击Create Variable.
·在Name输入框中输入FirstWord。
在Sequence中添加类型为String的FirstWord变量
在Windows Workflow Foundation (WF)中,变量用于存储数据。参数则是用于表示活动的输入输出数据流。同C#或Visual Basic一样,变量存在域的概念。如果你在打开变量设计窗口时没有选中任何活动,你将不能添加任何变量。被选中的活动将会提供变量的域。在这个例子中FirstWord属于Sequence域。
(3)现在你需要检测UserName 变量,以确定它的字母数为偶数或奇数。首先在工具栏中选中Control Flow组,拖放If 活动到Sequence中,位于Assign活动的上方。
(4)单击选中If设计器图形,按F4设定If活动的DisplayName 为If UserName is Even。或者你可以在属性窗口中设置。
注意:工作流设计器允许你通过改变DisplayName给活动图形设定一个更易读的名称。
有描述设定的If活动
注意
红色的图标 ( )表示当前活动没有正确配置。If活动需要你为其Condition参数设置表达式。
(5)为If活动设置条件。首先双击以展开If活动,在Condition输入框中输入下列表达式。它将检查名称长度为奇数还是偶数。
Visual Basic
UserName.Length Mod 2 = 0
表达式是一种程序片断,它可以使一个常量字符串、一个条件语句、几个字符串的连接、调用一个方法或调用其它的活动。 即使你的程序使用C#,表达式依旧使用Visual Basic语法。这意味着不区分大小写,使用单个等于号表示 “==”,并使用单词"And"和"Or"表示"&&"符号"||"。
(6)对于名字长度为偶数的情况,修改FirstWord变量的值为”Hello”。在工具栏中选中Primitives组,拖放Assign活动到Then区域中。之后在To输入框(左边)中输入FirstWord,在Value输入框(右侧)中输入”Hello”。
(7)对名字长度为奇数的情况,修改FirstWord变量的值为”Greetings”。在工具栏中选中Primitives组,拖放Assign活动到Then区域中。之后在To输入框(左边)中输入FirstWord,在To输入框(左侧)中输入”Greeting”。
一个完整的If活动
(8)修改最终的Assign使自定义的消息基于FirstWord的值显示。修改If活动下方的Assign 活动,将Value输入框(右侧)的内容设置为下面的表达式:
& " from Workflow 4"
一个完整的工作流
(9)按CTRL+SHIFT+B编译解决方案