【工作流】——如何创建流程图工作流
来源:互联网 发布:网络文学社介绍 编辑:程序博客网 时间:2024/05/16 17:15
上一篇博客介绍了顺序工作流的创建以及工作流的基本知识,这篇博客就来介绍一下流程图工作流,以及流程图工作流的创建实现。
什么是流程图工作流
流程图工作流,顾名思义,是走一定流程的工作流,就像我们平常所见的流程图,它有一定的步骤,通过一定的条件又有一些分支,故叫做流程图工作流。
框架结构
流程图工作流在.NET4.5中有三个基本组成结构,分别是Flowchart、FlowDecision和FlowSwitch。
Flowchart活动是一种活动,该活动包含要执行的活动集合,可以认为是一个容器,Flowchart中可以放置控件元素。
FlowDecision是一种流控件元素,用于做流程中的布尔条件的分支,类似于If...else...,所以FlowDecision总的来说只有两种判断情况,如果有多种条件进行分支,它就不再适合。
FlowSwitch同样也是一种流控件元素,它正是解决了多种条件下分支的问题,类似于Switch<T>,也就是说一个流程遇到多个条件的分支,可以有多个不同的结果。
一般来说,Flowchart通常用于非顺序工作流,但是如果未使用FlowDecision和FlowSwitch控件元素,也可以用于顺序工作流。
实例演示
首先创建工作流项目,这里还是以工作流控制台为例,然后在工作流设计页面添加如下图的流程图,首先是If类型的流程图工作流。这个流程图执行的流程是,到了中午十二点的时候,如果手上的活还没干完,那就加会班干完,然后下班吃饭;如果手上的活已经做完了,那就直接下班吃饭。
首先添加FLowchart活动,然后在活动中分别添加WriteLine基元和FlowDecision流控件元素,分别输入相应的显示内容。
然后设置FlowDecision的Condition,FlowDecision是通过Condition来控制流程的左右流转的。如图,如果Condition是true,则流向左侧,反之则流向右侧。邮件点击Decision控件,选择属性,可以设置Condition属性。在这里我是直接设置Condition的值为true或false,同样也可以设置为参数,根据业务去传入相应的布尔值。
如果Condition设置为true,则执行效果为:
如果Condition设置为false,则执行效果为:
接下来演示Switch类型的工作流,Switch类型的工作流就像switch...case...,可以根据不同的条件,走向不同的分支,去执行不同的结果。这个工作流执行的流程是中午吃饭时,根据自己带的钱的多少判断吃什么午饭,如果带的钱小于等于十块钱,那就吃面条;如果大于十块小于等于三十块钱,那就吃麻辣烫;如果大于三十块钱,就可以吃大餐。根据下图创建工作流流程:
这时就出现了一个问题,我怎么让FlowSwitch去判断我带了多少钱呢?也就是说我怎么把我带的钱数传给FlowSwitch呢?这时现成的控件就不太好用了,我可以自己写。一共需要两个,一个用来接收我输入的钱数,一个用来判断我带的钱多少。
在自己的项目中,右击-->添加-->新建项-->选择左侧Workflow-->选择创建代码活动,创建两个代码活动,分别是JudgeMoney和InputMoney。
两个类中的代码分别如下,InputMoney中的代码为:
public sealed class InputMoney : CodeActivity { // 定义一个字符串类型的活动输出参数 public OutArgument<int> Money { get; set; } // 如果活动返回值,则从 CodeActivity<TResult> // 派生并从 Execute 方法返回该值。 protected override void Execute(CodeActivityContext context) { //从控制台读取数据,并将数据传出咱们当前流程节点 int num = 0; int.TryParse(Console.ReadLine(), out num); context.SetValue(Money, num); } }
JudgeMoney类中的代码如下:
public sealed class JudgeMoney : CodeActivity { // 定义一个字符串类型的活动输入参数 public InArgument<int> Money { get; set; } // 定义一个字符串类型的活动输入参数 public OutArgument<int> Result { get; set; } // 如果活动返回值,则从 CodeActivity<TResult> // 派生并从 Execute 方法返回该值。 protected override void Execute(CodeActivityContext context) { //定义输入的钱的值 int count = context.GetValue<int>(Money); if (count <= 10) { context.SetValue(Result, 0); } else if (count < 30) { context.SetValue(Result, 2); } else { context.SetValue(Result, 1); } } }
这样接收输入的钱的类和判断钱多少的类都有了,那么从工作流中如何获取值呢?这时就得在工作流中设置变量,用来接收传入工作流节点的值。在设计页面的最下面,有变量、参数、导入三个选项卡,选择变量选项卡,设置两个参数,分别为MyMoney和TempResult,MyMoney用来接收传入工作流的钱的值,TempResult用来接收JudgeMoney传出的判断分支的值。
设置完变量之后,要将TempResult变量和FlowSwitch绑定,毕竟FlowSwitch是根据TempResult的值判断流向的嘛。右击Switch,选择属性,在Expression属性那里填写TempResult,这样TempResult变量就和FlowSwitch绑定起来了。
此时需要生成一下解决方案,生成成功后,在左侧的工具栏中会出现两个控件,分别是InputMoney和JudgeMoney,如下图:
将这两个控件拖入工作流中,完成后如下图,然后分别设置属性,将Money和MyMoney绑定,将Result和TempResult绑定。
这时流程图工作流就都做完了,快来执行一下试试吧。
执行的结果如下:
上面说的是不是有些乱,下面简单梳理一下。该流程模拟中午吃饭前,根据自己带的钱多少,判断自己午饭可以吃什么。如果少于10块钱,只能吃刀削面;如果大于10小于30,可以吃麻辣烫;如果大于30,就可以吃大餐了。因为判断条件大于了两种,而且不能用true和false来判断,所以采用Switch的方法。拖入FLowSwitch后,设置三种条件然后分别设置结果。因为FlowSwitch要绑定一个变量,根据该变量判断走向哪一个分支,所以就有了TempResult。另外还需要一个变量,去接收我输入的钱的值,所以就有了MyMoney变量。变量有了之后,怎么接收运行和判断运行框中输入的值呢?这时候就需要InputMoney和JudgeMoney两个类。添加两个代码活动,在其中输入相应的代码。生成解决方案,从工具箱中将他们拖入设计页面,这时完整的工作流过程就设计完成了。
总结
流程图工作流也是一种比较简单的工作流,它能够承受多种分支,并且是可以多人完成一个流程。一般情况下,公司中用的审批流程,都是流程图工作流。一个流程中可以有多个节点多个审批人,每个审批人都有同意或不同意的审批意见,这就符合If类型的流程图工作流。
- 【工作流】——如何创建流程图工作流
- 【工作流】——工作流的基本介绍和如何创建顺序工作流
- 如何创建工作流项目
- 工作流——顺序工作流
- 如何创建顺序工作流库
- 如何创建空工作流项目
- Activiti获取工作流 流程图
- 工作流设计流程图
- 工作流——顺序工作流和状态机工作流
- Activiti工作流开发——工作流简介
- 17.activiti工作流-请假流程图
- activiti工作流【流程图乱码】解决
- 如何创建顺序工作流控制台应用程序
- 如何创建状态机工作流控制台应用程序
- 如何创建一个状态机工作流库
- 审批工作流—ccflow
- 工作流
- 工作流
- 算法训练 旅行家的预算
- 为没有web选项的eclipse添加web and JavaEE插件
- 树
- 算法练习——李白打酒
- JAVAH生成JNI头文件
- 【工作流】——如何创建流程图工作流
- Android基本架构
- cvEqualizeHist() 直方图均衡化(单通道)
- android 单元测试简单方法及错误处理
- SSH框架解析
- join()和split()方法
- ndk-build生成.so
- cocos2dx 3.3 pluginx protocols文件夹分析
- 抽象类