什么是工作流?
工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。
BPM:是Business Process Management的英文字母缩写.即业务流程管理,是一套达成企业各种业务环节整合的全面管理模式。
工作流软件,顾名思义,就是业务信息数据在多个环节模块之间的流转。
企业内部业务种类非常多、变化也非常多。虽然业务变化非常多,但是流程的控制基本是不变的。我们常说的工作流或者是“流程”就是指 控制流程流转的核心引擎。
市面常见的工作流开发框架如下所示。
Windows Workflow Foundation
Windows Workflow Foundation(以下简称WWF)提供了一个编程框架和工具以开发和执行各种不同的基于工作流的应用程序,比如文档管理、线型的商业应用、贸易单据流程、IT管理、B2B应用以及消费者应用。
WF(Windows Workflow Foundation)是微软的工作流基础组件。它是DotNet Framework中提供基于模型或者是声明方式的流程执行引擎。
WF由DotNet Framework3.0一起发布。而且已经被应用与微软的Sharepoint技术中。
WF包括3个核心组件:
- 活动框架
- 工作流活动运行时环境
- 工作流设计器
第一个工作流项目
1、打开VS新建一个解决方案,在解决方案中新建项目——WorkFlow——工作流控制台应用程序,命名为WorkflowConsoleApp
2、视图——工具箱,添加WriteLine基元
WriteLine Activity:用于输出一段字符串。
再添加一个WriteLine基元
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}
会自动将这两个基元包装在一个Sequence序列容器里面,然后执行顺序从上至下。当然也我们可以先添加一个Sequence序列容器,然后再往这个容器里面添加基元。
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}
3、我们来看Program.cs中的代码如下:
Activity workflow1 = new Workflow1(); WorkflowInvoker.Invoke(workflow1);
这里就是工作流的启动方式。WorkflowInvoker 包含同步调用工作流的实例方法和静态方法。
为了更好的查看运行效果,添加如下代码:
Console.ReadLine();
4、按F5运行
WF入门之活动
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}
Activity在WF中是一个最基本的概念,当谈及Activity时,通常是指如下两个概念:
- Activty Class 。
- 在工作流中任意Activity派生类的统称。
活动也就是流程中的步骤如果下图
这里,我们新建一个财务审批流程。
1、 新建活动
右键单击项目WorkflowConsoleApp,添加“新建项”,选择活动,命名为MoneyApproveActivity.xaml
2、 添加流程
修改名称为”财务审批流程”。
3、 添加两个WriteLine基元
4、 添加代码活动
右键单击项目WorkflowConsoleApp,添加“新建项”,选择“代码活动”,然后命名为InputMoneyCodeActivity.cs
这个时候,我们看见默认的代码如下:
public sealed class InputMoneyCodeActivity : CodeActivity { // 定义一个字符串类型的活动输入参数 public InArgument<string> Text { get; set; } // 如果活动返回值,则从 CodeActivity<TResult> // 派生并从 Execute 方法返回该值。 protected override void Execute(CodeActivityContext context) { // 获取 Text 输入参数的运行时值 string text = context.GetValue(this.Text); } }
这里,我需要修改一下代码,因为我要的并不是输入参数,而是要输出一个金额给到当前这个流程,然后再根据这个金额的大小来判断流程的走向。
5、 修改代码如下:
public sealed class InputMoneyCodeActivity : CodeActivity { // 定义一个字符串类型的活动输入参数 //public InArgument<string> Text { get; set; } //定义一个Int类型的输出参数 public OutArgument<int> Money { get; set; } // 如果活动返回值,则从 CodeActivity<TResult> // 派生并从 Execute 方法返回该值。 protected override void Execute(CodeActivityContext context) { // 获取 Text 输入参数的运行时值 //string text = context.GetValue(this.Text); int money; var v = Console.ReadLine(); int.TryParse(v,out money); context.SetValue(Money, money); } }
6、 生成项目WorkflowConsoleApp
7、 回到MoneyApproveActivity.xaml页面
会发现工具箱中多了一个组件InputMoneyCodeActivity,将其拖放到MoneyApproveActivity.xaml界面中。
8、 重命名,双击InputMoneyCodeActivity组件,修改名称为“获取输入金额”。
9、添加变量,用于接收InputMoneyCodeActivity代码活动中的输出参数的值,这样在整个流程中才能够访问到这个接收的金额。
右键单击活动代码“获取输入金额”,选择“属性”,将Money的值赋值给全局变量GetMoney。
10、 添加WriteLine基元,流转到“经理审批”
11、添加条件分支
添加条件,让500作为一个判断条件,分为大于500为True和小于等于500为False。
12、添加两个WriteLine基元,当条件为True和False各执行一个基元。
13、 将MoneyApproveActivity活动设为启动项。
修改Program代码如下:
//Activity workflow1 = new Workflow1(); Activity workflow1 = new MoneyApproveActivity(); WorkflowInvoker.Invoke(workflow1); Console.ReadLine();
14、运行结果如下:
源码下载地址:WorkflowConsoleApp.zip
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}