1. 摘要

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

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

2. 活动

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

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

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

3. CodeActivity

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

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

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

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

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

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

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

4. IfElseActivity

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最后的总体代码如下:

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();}
}

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

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

5. 总结

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

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

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

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

  1. 湖南工业大学教务系统爬虫(模拟登陆篇)

    湖南工业大学教务系统爬虫(模拟登陆篇) 之前写了一个教务系统的爬虫程序,可以根据用户要求爬取任何一部分的数据,也可以模拟提交数据,可能这也是部分工大计算机学生比较感兴趣的,所以今天就在这分享一下整个的 ...

  2. 辛巴学院-Unity-剑英陪你零基础学c#系列(四)函数和封装

    辛巴学院:正大光明的不务正业. 国庆长假结束了,我的心情是这样的: 你总是起不早,起不早 独自一个人沉睡到天亮 你无怨无悔的梦着那副本 我知道你根本就不想上班 你总是起不早,起不早 放假总是短暂,上班 ...

  3. mysql root用户可以同时几个人连接_重学MySQL系列(四):10分钟快速掌握MySQL用户与权限管理

    在这篇文章中,我们来聊聊怎么管理MySQL的用户及如何为不同用户分配不同的管理权限,其实,在日常使用MySQL的过程中,这部分的工作是由DBA(数据管理员)来完成的. 而我们作为一般的开发人员,只要拿 ...

  4. appium获取元素节点的方法_Appium学废系列(四) 如何写出优雅又健壮的脚本

    ‍‍正文共:3716字  预计阅读时间:10分钟 1 合理使用appium自动化等待方法 在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在 ...

  5. Python 淘宝系列(三): 模拟登陆成功后获取购物车信息

    http://my.oschina.net/u/811744/blog/192604(本文的转载地址) ================================================ ...

  6. python模拟淘宝登录后上下架商品_Python 淘宝系列(三): 模拟登陆成功后获取购物车信息...

    依然采用IE的F12开发者工具分析抓取到的数据. 关键问题 获取token后,重定向地址的获取 一般网站登录成功后,跳转方式主要有两种:(1)服务器返回的响应头中包含 location header, ...

  7. 一步一步学Silverlight 2系列(3):界面布局

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 一步一步学Silverlight 2系列(4):鼠标事件处理

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

最新文章

  1. 微信公众号消息推送-模板消息发送
  2. oracle form 滚动条,jQuery实现的自定义滚动条实例详解
  3. K3 LEDE固件更改FRP客户端版本
  4. git编辑器选哪个_[Git]Git创建和修改代码库
  5. “企业知识产权管理与预警”培训活动在省技术产权交易市场成功举办
  6. 一段字符串修改某一个位置的值
  7. Facebook 推出新聊天机器人,号称击败谷歌?
  8. 悲观锁 HibernateTest.java
  9. Java时间类之间的转换案例——计算自己活了多少天
  10. OSChina 周五乱弹 ——我们测算过无数代码却依旧算不准没钱的这一生
  11. C 语言用链表实现集合交并差,集合交差并三种操作的C实现
  12. 配置 nginx server 出现nginx: [emerg] root directive is duplicate in /etc/nginx/server/blogs.conf:107...
  13. JAVAWEB常用测试浏览器
  14. 彻底解读剪不断理还乱的\r\n和\n, 以Windows和Linux为例
  15. SQL 如何查询时竖着的数据横着显示
  16. php 数组压缩成一行,php对特定数组进行压缩
  17. 谷歌的15条招人秘诀
  18. Windows Phone 游戏——黑白棋 开发总结
  19. 漏洞5万美元一个贵不贵?
  20. Linux下安装EDB

热门文章

  1. oracle 2018 深圳大会,2018中国科幻大会深圳时间、地点、亮点
  2. 虚拟服务器ip是什么意思,虚拟主机独立ip是什么意思
  3. Oracle/PLSQL AFTER DELETE Trigger
  4. vs code使用问题
  5. Django讲课笔记10:使用QuerySet删除和查询数据表
  6. Python案例:猜数游戏
  7. 【BZOJ1202】【HNOI2005】狡猾的商人
  8. 2017.8.8 loli测试
  9. 2017.6.27 树上操作 思考记录
  10. abb机器人开通选项_ABB机器人623-1Multitasking选项 ABB机器人多任务使用方法教程...