工作流-组任务(会签)
< 返回列表时间: 2020-03-13来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
什么是会签
我们在使用工作流引擎的时候,最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,在流程运转的时候,可能我们有这样的一个需求,在一个任务节点的时候,我们需要多个人对这个节点进行审批,比如实际中这样一个例子,假如是一个部门的投票,这个部门有5个人,那么当5个人都投票的时候大概分为如下几种: 部门所有人都去投票,当所有人都投票完成的时候,这个节点结束,流程运转到下一个节点。(所有的人都需要投票) 部门所有人都去投票,只要有任意2/3的人同意,这个节点结束,流程运转到下一个节点。(部分人投票只要满足条件就算完成)。 部门中有一个部门经理,只要部门经理投票过了,这个节点结束,流程运转到下一个节点(一票否决权)。 部门中根据职位不同,不同的人都不同的权重,当满足条件的时候,这个节点结束,流程运转到下一个节点。比如说所有的人员权重加起来是1,a有0.2的权重,其他的四个人分别是0.1的权重,我们可以配置权重达到0.3就可以走向下一个节点,换言之a的权重是其他人的2倍,那就是a的投票相当于2个人投票。这种需求还是很常见的。 部门所有人都去投票,a投票结束到b,b开始投票结束到c,一直如此,串行执行。最终到最后一个人再统计结果,决定流程的运转。
上面的五种情况,我们可以提取出来一些信息,我们的activiti 工作流引擎,必须支持如下功能,才能满足上面的需求: 任务节点可以配置自定义满足条件。 任务节点必须支持串行、并行。 任务节点必须支持可以指定候选人或者候选组。 任务节点必须支持可以循环的次数。 任务节点必须支持可以自定义权重。 任务节点必须支持加签、减签。(就是动态的修改任务节点的处理人)
因为实际上的需求可能比上面的几种情况更加的复杂,上面的6个满足条件,工作流支持前4个,后面的2个条件是不支持的,所以我们必须要扩展activiti 工作流引擎才能使用5、6等的功能。下面我们将详细的介绍前四种条件的使用,在掌握基本使用之后,我们在后面的章节中将详细的介绍,5、6这两种功能以及可能更加复杂的操作。
版权声明:本文为CSDN博主「分享牛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.csdn.net/qq_30739519/article/details/51239818
流程图配置

Sequential 属性代表了活动的实例为是否是顺序执行, false 为并行。
Collection 属性会后会开启多实例(会签),假设变量 assigneeList 包含[kermit, gonzo, fozzie]。上面的代码会创建三个并行的用户任务。每一个执行都有一个名为 assignee 的(局部)流程变量,含有集合中的一项,并在这个例子中被用于指派用户任务。

assignee 属性来决定当前执行任务的处理人 <usertask id="miTasks" name="My Task" flowable:assignee="${assignee}"> <multiinstanceloopcharacteristics issequential="true" flowable:collection="assigneeList" flowable:elementvariable="assignee"> </multiinstanceloopcharacteristics> </usertask>
请注意collection属性会作为表达式进行解析。如果表达式解析为字符串而不是一个集合,不论是因为本身配置的就是静态字符串值,还是表达式计算结果为字符串,这个字符串都会被当做变量名,在流程变量中用于获取实际的集合。
处理 /** * 完成任务 */ public void complete(String taskId, TaskCompleteParam param){ taskService.complete(taskId,null,param.toMap()); }
数据库 nrOfInstances 实例的总数。 nrOfCompletedInstances 当前已经完成的实例。 nrOfActiveInstances :激活的的实例个数。 loopCounter 已经循环的次数。
如何区分多实例节点 // 当前任务的key String currentTaskDefinitionKey = taskEntity.getTaskDefinitionKey(); // 当前任务 FlowNode currentActivity = (FlowNode) process.getFlowElement(currentTaskDefinitionKey); // 获取行为 Object behavior = currentActivity.getBehavior(); //多实例任务 if (behavior instanceof MultiInstanceActivityBehavior)
热门排行