现在的位置: 首页 > 综合 > 正文

一步一步学WF系列(四)——工作流模拟登陆

2011年07月17日 ⁄ 综合 ⁄ 共 2713字 ⁄ 字号 评论关闭

1. 摘要

我们之前已经熟悉了关于WF的基本概念,相信各位也都跃跃欲试。想步入真正的WF开发。

从本文开始,我们就先来熟悉在WF中的活动。

2. 活动

WF的核心就是一系列的活动。

而工作流就是多个活动通过某种控制模组合起来形成一个连续有序的,通过工作流引擎并且根据业务需要自定义和自流转的系统。

通过以上的两个定义,相信我们都应该了解活动之于工作流意味着什么。

3. CodeActivity

Code控件是我们在WF中算是使用率最高的控件了。用户通过Code控件执行完成某项功能。

Code控件常用的功能是检查工作流的状态,更改局部变量和信息。一般意义上,Code代码不应该去调用外部的资源,例如WebService。

在CodeActivity中,最重要的一个关键事件就是ExecuteCode。这个事件在Code执行时发生。

这些用途在今后的实例讲解阶段会慢慢理解。在这里我们来看一个简单的例子:

image

image

之后在后台写这样的代码:

private void HelloExecute(object sender, EventArgs e)
{
    Console.WriteLine("hello");
}

image

之前我们已经讲过这个,这里就不再继续说了。

4. IfElseActivity

这个活动我们在第一章也提到过,他就是相当于我们在语言中的if---else。

有条件地运行类型为IfElseBranchActivity的两个或更多的活动之一。

我们用实例来慢慢讲解,在这里,我们来模拟一个用户登陆的过程。

首先我们来做准备工作,新建一个Winform窗体,形成一种登陆界面:

image

然后我们在工作流的后台代码中写这样两个属性:

private string userName;
private string userPassword;

public string UserName
{
    set { userName = value; }
}
public string UserPassword
{
    set { userPassword = value; }
}

接下来我们来向工作流中拖放一个IfElse控件。

image

接下来,我们右击ifElseBranchActivity1,来看一下他的一个重要的属性。

ifElseBranchActivity1相当于一个if---else的一个分支。所以,我们当然要需要去指定他的入口条件。

image

我们注意其中的Condition属性,展开后我们可以看到:

image

这样,让我们选择添加分支,来再添加一个if---else子句:

image

让我们对ifElseBranchActivity1选择声明性规则条件:

image

并且选择….,我们会看到这样的对话框,然后选择新建:

image

我们在这里首先判断用户名和密码是否为空:

this.userName == "" || this.userPassword == ""

然后,我们在ifElseBranchActivity2中使用代码条件:

image

然后在后台写下这样的代码:

private void Validate(object sender, ConditionalEventArgs e)
{
    e.Result = this.userName.Equals("admin") && this.userPassword.Equals("admin");
}

这就是两个条件,首先判断用户名密码是否为空,如果不为空,再判断用户名和密码是否合法。

之后,我们向if-else中添加三个Code控件:

image

最后的总体代码如下:

WorkFlow2.cs:

public sealed partial class Workflow2 : SequentialWorkflowActivity
{
    private string userName;
    private string userPassword;

    public string UserName
    {
        set { userName = value; }
    }
    public string UserPassword
    {
        set { userPassword = value; }
    }

    public Workflow2()
    {
        InitializeComponent();
    }

    private void codeActivity1_ExecuteCode(object sender, EventArgs e)
    {
        MessageBox.Show("用户名和密码不能为空");
    }

    private void Validate(object sender, ConditionalEventArgs e)
    {
        e.Result = this.userName.Equals("admin") && this.userPassword.Equals("admin");
    }

    private void codeActivity2_ExecuteCode(object sender, EventArgs e)
    {
        MessageBox.Show("登陆成功");
    }

    private void codeActivity3_ExecuteCode(object sender, EventArgs e)
    {
        MessageBox.Show("用户名和密码不正确");
    }
}

Winform后台代码:

public partial class Form1: Form
{
    private WorkflowRuntime workflowRuntime;
    private WorkflowInstance instance;

    public Form1()
    {
        InitializeComponent();

        workflowRuntime = new WorkflowRuntime();
        workflowRuntime.StartRuntime();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Dictionary<string, object> dic = new Dictionary<string, object>();
        dic.Add("UserName", this.textBox1.Text);
        dic.Add("UserPassword", this.textBox2.Text);

        instance = workflowRuntime.CreateWorkflow(typeof(Workflow2), dic);
        instance.Start();
    }
}

这样,我们就完成了一个登陆的过程:

image

image

image

当然,这只是一个登陆的简单模拟,至于连接数据库判断,其实道理上是一样的,大家可以回去试试做一个正常的连接数据库的登录界面。

5. 总结

在上文中,我们主要学习了Code控件和IfElse控件的使用,并且用这两个控件去制作了一个简单的登陆界面。

还希望大家再自己动手敲一遍代码加深印象。

欢迎大家继续关注,让我们共同一步一步学习WF !

抱歉!评论已关闭.