Workflow笔记1——工作流介绍
什么是工作流?
工作流(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序列容器,然后再往这个容器里面添加基元。
顺序工作流
- 顺序工作流就是将顺序工作流容器中的所有动作按照顺序往下执行。
顺序容器Sequence:是在System.Activities.dll中定义的类型,继承 NativeActivity是一个 sealed类。
1.[Activities]集合,可以存放Activity
2.[Activities]集合中的Activity按顺序从上向下执行
3.[Variables]集合用于存放变量
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、 添加代码活动
CodeActivity 代码活动
- WF4.0 提供了许多Activity,但有时这些Activtiy并不能完成具体功能,如向数据库添加数据,发送电子邮件等.在实现这些具体功能时,我们仍要使用某种编程语言,如C#.当我们需要这种功能时,可以使用 CodeActivity。
- 它是一个抽向类,继承该类后,需要override该类的Execute方法,用于编写自定义的功能代码
右键单击项目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);
}
}
这里,我需要修改一下代码,因为我要的并不是输入参数,而是要输出一个金额给到当前这个流程,然后再根据这个金额的大小来判断流程的走向。
工作流中的数据的传递
- Variable变量:跟C#一样可以再整个工作流或者是其中的一个Activity中添加一个变量。可以通过可视化的控制:变量的类型、作用域、默认值等 。
- Assign 赋值。可以对流程内定义的参数,变量赋值。
- Arguments 参数:Activity中传入的参数或者是传出的参数。
In参数:System.Activities.InArgument<T>传入参数,可以在流程启动的时候传入参数的值。只能用于数据传入流程节点内部。
Out参数:System.Activities.OutArgument<T>。用于将流程节点内部的数据传递到外部的变量或者其他流程的传入参数。
In/Out参数:System.Activities.InOutArgument<T>。即用于传入也用于传出。
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;}
Workflow笔记1——工作流介绍的更多相关文章
- Workflow笔记2——状态机工作流
状态机工作流 在上一节Workflow笔记1——工作流介绍中,介绍的是流程图工作流,后来微软又推出了状态机工作流,它比流程图功能更加强大. 状态机工作流:就是将工作流系统中的所有的工作节点都可以看做成 ...
- Workflow笔记2——状态机工作流(转)
出处:http://www.cnblogs.com/jiekzou/p/6192813.html 在上一节Workflow笔记1——工作流介绍中,介绍的是流程图工作流,后来微软又推出了状态机工作流,它 ...
- Workflow:自定义工作流 之 模型选择
Workflow:自定义工作流 之 模型选择 背景 毕业5年,做了4个版本的工作流框架,工作流几乎是每个企业应用开发人员必须跨过的门槛(我还没有跨过去),下面简要说一下之前的4个版本,然后重点介绍第5 ...
- 《The Linux Command Line》 读书笔记01 基本命令介绍
<The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...
- 【Slickflow学习】.NET开源工作流介绍、下载(一)
第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-介绍 这里摘录Slickflow官网的介绍: Slic ...
- HTML+CSS学习笔记(1) - Html介绍
HTML+CSS学习笔记(1) - Html介绍 1.代码初体验,制作我的第一个网页 <!DOCTYPE HTML> <html> <head> <meta ...
- 通达OA 小飞鱼开发培训第四讲 工作流介绍(图文)
本次课程主要解说了OA工作流相关内容,有些涉及到工作流的程序开发假设对工作流不熟悉也是有非常大难度,因此在这里进行了内容补充. 1.工作流介绍
- Git协同工作流介绍
git相关的文章和教程非常多,但是系统介绍和了解工作流的人并不多,在使用过程中用错或用偏的也不少,这里分享的是,假设你已经入门的情况下,我们如何去选择适合团队需要的工作流. git优势 这里先唠叨gi ...
- Typescript 学习笔记一:介绍、安装、编译
前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...
随机推荐
- 【转】java通用URL接口地址调用方式GET和POST方式
java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...
- TFS 安装错误
错误 问题详细: HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息 模块 Dynam ...
- BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3522 Solved: 1041[Submi ...
- 【流量劫持】SSLStrip 终极版 —— location 瞒天过海
前言 之前介绍了 HTTPS 前端劫持 的方案,虽然很有趣,然而现实却并不理想.其唯一.也是最大的缺陷,就是无法阻止脚本跳转.若是没有这个缺陷,那就非常完美了 -- 当然也就没有必要写这篇文章了. 说 ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - MProc类使用
MProc介绍 MProc:是一个用于执行SQL或存储过程的数据库操作类,它轻量高性能地类似于Dapper. MProc:它出现的场景很少,因为MAction自身就能处理掉90%-100%的数据操作( ...
- ASP.NET 5 (vNext) Linux部署
引言 工欲善其事,必先利其器. 首先,我们先明确下以下基本概念 Linux相关 Ubuntu Ubuntu是基于linux的免费开源桌面PC操作系统 十分契合英特尔的超极本定位 支持x86.64位和p ...
- AlloyTeam2015前端大会都说了啥
昨天在腾讯大厦参与了鹅厂AlloyTeam召开的AC2015前端大会,度过了充满精彩和收获的一个下午,用一句话形容这次前端Event应该是“诚意满满,干货满满”. 说实话,这次AlloyTeam没有对 ...
- 集成基于CAS协议的单点登陆
相信大家对单点登陆(SSO,Single Sign On)这个名词并不感到陌生吧?简单地说,单点登陆允许多个应用使用同一个登陆服务.一旦一个用户登陆了一个支持单点登陆的应用,那么在进入其它使用同一单点 ...
- ASP.NET Web API 管道模型
ASP.NET Web API 管道模型 前言 ASP.NET Web API是一个独立的框架,也有着自己的一套消息处理管道,不管是在WebHost宿主环境还是在SelfHost宿主环境请求和响应都是 ...
- hibernate多对一单向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...