java代码实现流程中的会签_工作流-组任务(会签)

什么是会签

我们在使用工作流引擎的时候,最常用的肯定是任务节点,因为在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

流程图配置

18dd4f822a998c25a3c9b620e0b77b66.png

Sequential属性代表了活动的实例为是否是顺序执行,false为并行。

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

f619377afb3e56c077e41a557df9e4ed.png

assignee属性来决定当前执行任务的处理人

请注意collection属性会作为表达式进行解析。如果表达式解析为字符串而不是一个集合,不论是因为本身配置的就是静态字符串值,还是表达式计算结果为字符串,这个字符串都会被当做变量名,在流程变量中用于获取实际的集合。

处理

/**

* 完成任务

*/

public void complete(String taskId, TaskCompleteParam param){

taskService.complete(taskId,null,param.toMap());

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Flowable ,要实现多实例任务的退回,可以通过以下步骤进行操作: 1. 首先,创建一个实现了 MultiInstanceActivityBehavior 接口的自定义活动行为类。这个类将负责处理多实例任务的具体逻辑。 ```java public class MyMultiInstanceActivityBehavior implements MultiInstanceActivityBehavior { // 实现 MultiInstanceActivityBehavior 接口的方法 // ... } ``` 2. 在该类实现 `leave` 方法,该方法负责处理任务每个实例完成后的操作。在这个方法,可以判断每个实例的完成情况,并根据需要进行退回操作。 ```java @Override public void leave(ActivityExecution execution) { // 判断当前实例是否需要退回 if (shouldReject(execution)) { // 获取任务的执行实例 ExecutionEntity multiInstanceExecution = (ExecutionEntity) execution.getParent(); // 将当前实例退回到上一步 CommandContext commandContext = Context.getCommandContext(); commandContext.getExecutionEntityManager().deleteChildExecutions(execution.getParent()); commandContext.getAgenda().planContinueMultiInstanceOperation(multiInstanceExecution); } else { // 正常离开任务 super.leave(execution); } } ``` 3. 将自定义的活动行为类应用到多实例任务流程定义。在 BPMN 文件,使用 `class` 属性指定自定义类的全限定名。 ```xml <userTask id="multiInstanceTask" name="Multi-Instance Task" flowable:activiti:class="com.example.MyMultiInstanceActivityBehavior" /> ``` 通过以上步骤,就可以在 Flowable 实现多实例任务的退回功能。自定义的活动行为类的 `leave` 方法可以根据业务逻辑判断是否需要退回,并执行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值