WF4.0 入门系列(六)If/Else Logic

在前面的练习中,我们输出了定制的问候信息,现在我们将向工作流中添加If/Else逻辑来根据指定条件显示不同的问候信息。

在练习中,我们还是采用“先写测试”的方式,也就是说,首先根据新需求写测试用例,然后补充测试通过所必须的code。我们继续从上次的代码开始。

1、我们现在对我们的程序有个新的要求,如果输入的name包含奇数个字母,则我们的问候将以Greetings开始,否则以Hello开始,简单来说,我们的逻辑如下:

    private static string SayHello(string userName)
    {
        string FirstWord = null;

        if (userName.Length % 2 == 0)
            FirstWord = "Hello";
        else
            FirstWord = "Greetings";

        return FirstWord + ", " + userName + " from Workflow 4";
    }

下面我们在SayHelloFixture.cs文件创建一个新的测试方法ShouldReturnGreetingWithOddLengthName

    [TestMethod]
    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、保存输出的第一个单词

我们将在If-Else逻辑中根据用户姓名的长度,将不同的值(“Hello”,“Greetings”)保存到一个变量中,最后将变量值加入到输出参数。下面我们在Sequence活动中创建一个字符串类型的Variable变量,变量名称FirstWorld。

WF4.0 入门系列(六)If/Else Logic_第1张图片

在WF中,变量代表着数据存储,而参数表示数据流动,流入进Activity还是从activity流出。WF中的变量和C#中的变量一样,是有使用范围的。如果你在设计器中创建变量,但是又没有选中任何活动,那么是不可能添加变量的。一旦你选中某个活动,那么这个活动(也就是类)就是这个变量的使用范围,变量就是这个类内部的全局变量。言下之意,类中的变量在方法中是可以访问的。本例中,我们创建的变量属于Sequence活动,那么Sequence活动的WriteLine等其他活动是可以访问此变量的,但是,如果你在WriteLine中定义一个变量,在Sequence中是访问不了的。

3、从工具栏的“控制流”组中拖拽【If】活动到Sequence中,放在Assign活动之前。修改【If】活动的DisplayName为“If UserName is Even”(选中活动,按F4)。

4、输入If条件

在If的Condition下方的Expression文本框中输入If条件:

UserName.Length % 2 == 0

Expressions表达式是一段程序声明,可以是一个文本字符串,一个条件声明,或者是多个字符串的串联、方法的调用及对其他活动的调用。Expressions可以使用VB的语法编写,即使应用程序是C#的应用程序。

5、修改最下方的Assign活动,将Value文本框的值修改为:

FirstWord + UserName + " from Workflow 4"


6、再次运行测试,通过

 系列文章

一 Hello Workflow4

二 The CodeActivity

三 Dynamic Workflows with XAML

四 Testing Workflows

五 WorkflowApplication

六 If/Else Logic

你可能感兴趣的:(入门,WF4.0)