Workflow笔记一

什么是工作流?

工作流(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;}

时间: 2024-10-03 14:02:01

Workflow笔记一的相关文章

Workflow笔记2——状态机工作流(转)

出处:http://www.cnblogs.com/jiekzou/p/6192813.html 在上一节Workflow笔记1——工作流介绍中,介绍的是流程图工作流,后来微软又推出了状态机工作流,它比流程图功能更加强大. 状态机工作流:就是将工作流系统中的所有的工作节点都可以看做成一个状态节点.每个节点都有N个状态,其中都包含初始状态.进入状态.离开状态等.当节点的状态变化的时候会执行某个节点. 新建项目StatueWorkflowConsoleApp 自动添加了一个起始节点和一个状态节点.

Workflow笔记二

状态机工作流 在上一节Workflow笔记1——工作流介绍中,介绍的是流程图工作流,后来微软又推出了状态机工作流,它比流程图功能更加强大. 新建项目StatueWorkflowConsoleApp 自动添加了一个起始节点和一个状态节点. 运行结果如下: 注意执行顺序.接下来,扩展此工作流. 1.设置全局变量Num 2.双击T1,为变量Num赋值 new Random().Next(0,10) 运行结果如下: 启动工作流 之前我们新建的工作流项目,都是通过如下方式来启动工作流的. Activity

Workflow笔记3——BookMark和持久化

BookMark 我们在平时的工作流使用中,并不是直接这样一气呵成将整个工作流直接走完的,通常一个流程到了某一个节点,该流程节点的操作人,可能并不会马上去处理该流程,而只有当处理人处理了该流程,流程才会继续往下走.对于不同流程节点的处理人,他所能处理的是不同的流程节点. 就好像我们看书,我们需要书签来标识,我现在已经看到哪个地方了,工作流也是一样的,我需要通过书签,来确定不同角色的人能处理的是哪一个流程. 1.在项目WindowsWorkFlowApp中,新建“代码活动” BookMarkCod

workflow笔记

1 概要介绍 1)什么是流程定义 ? 流程定义是按照bpmn2.0标准定义业务流程,将流程定义的文件(.bpmn和.png(不是必须的))部署到activiti中,activiti就可以管理该业务流程. 2)什么是流程实例 ? 参与者(可以用户,也可以程序)按照流程定义发起一个流程,这个流程就是一个流程实例 .流程定义的内容就是一个静态文件(.bpmn),流程实例的内容是该 流程的执行过程(动态). 3)如何启动一个流程实例 ? 常用方式:启动一个流程实例时指定一个业务标识. // 业务标识 ,

《Sams Teach Yourself Windows? Workflow Foundation in 24 Hours》读书笔记目录

目录 1 Part I - The Basics 1.1 Hour 1 - Understanding Windows Workflow Foundation 1.2 Hour 2 - A Spin Around Windows Workflow Foundation 1.3 Hour 3 - Learning Basic Hosting 1.4 Hour 4 - Learning Host-Workflow Data Exchange 1.5 Hour 5 - Creating an Esca

《WF in 24 Hours》读书笔记 - Hour 1 - Understanding Windows Workflow Foundation

1.1 Hour 1 - Understanding Windows Workflow Foundation 1.1.1 What workflow is in general A workflow is logic-consisting of one or more steps that are predicated by one or more conditions-that a system or person must perform to complete a function. Be

《WF in 24 Hours》读书笔记 - Hour 2(1) - 第一个Workflow程序

创建第一个Workflow项目 1. 创建Workflow项目 – 选择Workflow Console Application 2. 添加CodeActivity 3. 打开CodeActivity,添加一行代码到Execute方法中 1 public sealed class CodeActivity1 : CodeActivity 2 { 3 // Define an activity input argument of type string 4 public InArgument<st

Dynamic CRM 2013学习笔记(四十二)流程5 - 实时/同步工作流(Workflow)用法图解

实时工作流跟插件一样,也是用事件执行管道来执行,能在pre,post或核心操作中执行.跟插件一样,不能在创建之前和删除之后执行.如果执行过程中有异常发生,会取消并回滚整个操作.实时工作流里所有的活动和子流程都是一个事务,不像异步工作流里,子流程是单独的一个事务.不能使用等待或并行等待条件步骤.如果执行成功,就看不到执行的log.实时工作流能被转到异步工作流,还能再转回实时工作流.下面详细介绍如何创建一个实时工作流.   一.创建实时工作流 1. 打开 Setting > Process, 点击N

Dynamic CRM 2013学习笔记(四十一)流程4 - 异步工作流(Workflow)用法图解

在CRM 2013 里,工作流被分成二类:异步工作流和实时工作流.异步工作流依赖一个windows 服务: Microsoft Dynamics CRM Asynchronous Processing Service , 这个服务必须在CRM 服务器上运行,否则异步工作流不会运行.异步工作流有可能不会立即执行,如果想要立即执行的工作流,可以考虑用实时工作流.CRM 里把它当作实体,所以可以在高级查找里查找它,还可以基于它生成报表.下面详细介绍如何使用异步工作流. 为了使用工作流,要注意权限是否打