Flowable27多实例(多人会签)-----------持续更新中

Flowable多实例(多人会签)详解

“多人会签”的官方术语是 “多实例活动”(Multi-Instance Activity)。它允许一个任务节点(如用户任务、服务任务等)被执行多次,通常是分配给不同的处理人。
多人会签是工作流中非常常见的场景,例如:
专家评审:一份技术方案需要3位专家同时评审。
部门联合审批:一份预算申请需要财务部、行政部、人事部的负责人共同审批。
投票表决:一个决议需要委员会半数以上成员同意。
Flowable 的多实例活动主要分为两大类:并行会签 和 串行会签。

1. 并行会签 (Parallel Multi-Instance)

并行会签是指同时为多个处理人创建任务实例。所有任务实例都处于活动状态,处理人可以不分先后地完成各自的任务。
特点:
同时创建:所有任务实例一次性生成。
无序处理:处理人完成任务的顺序没有限制。
效率高:适用于不需要等待前一个处理人意见的场景。
例子: 一份报销单需要 A、B、C 三个经理审批,系统会同时给 A、B、C 创建审批任务,他们可以随时处理,互不影响。
(在 Flowable Modeler 中,并行会签的图标是三条竖线)

2. 串行会签 (Sequential Multi-Instance)

串行会签是指任务实例按顺序逐一创建。只有当上一个任务实例完成后,下一个任务实例才会被创建。
特点:
顺序创建:一次只创建一个任务实例。
有序处理:必须按照指定的顺序依次完成。
逐级审批:适用于有层级关系或依赖关系的审批链。
例子: 一份请假申请,需要先由“项目经理”审批,通过后,再由“部门总监”审批。
(在 Flowable Modeler 中,串行会签的图标是三条横线)

如何配置多人会签

在 Flowable Modeler 中配置一个用户任务为多实例非常直观。选中一个用户任务,在属性面板中找到 “Multi-i

### Flowable 工作流引擎中会签功能的实现与配置 #### 1. 多实例活动的概念 在 Flowable 中,会签可以通过多实例活动(Multi-Instance Activity)来实现。多实例活动允许在一个业务流程中为特定步骤定义重复执行的方式[^2]。这种机制类似于编程中的 `for-each` 结构,能够针对集合中的每一项按顺序或并行地执行某个任务。 #### 2. 配置方式 为了支持会签,在设计流程时需要对目标用户任务节点启用多实例特性。以下是具体的配置方法: ##### XML 定义 通过 BPMN 文件中的 `<userTask>` 节点添加多实例扩展属性即可实现。以下是一个简单的示例: ```xml <userTask id="miUserTask" name="Multiple Instance User Task"> <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="${assignees}" flowable:elementVariable="assignee"> <!-- 设置并发模式 --> </multiInstanceLoopCharacteristics> </userTask> ``` 在此示例中: - 属性 `isSequential="false"` 表明该任务将以 **并行** 方式分配给个参与者。 - 如果设置为 `true`,则表示任务将按照指定顺序逐一完成。 - 参数 `flowable:collection` 是一个值数据源,通常是从上下文中获取的一个列表对象,比如参与者的 ID 列表。 - 参数 `flowable:elementVariable` 定义了每次迭代过程中使用的单个元素名称,这里指代每位具体参与者。 #### 3. 默认流程变量的作用 当启用了多实例特性之后,Flowable 自动提供了一些内置变量用于跟踪状态变化过程[^3]: - `nrOfInstances`: 总共创建了少个实例; - `nrOfCompletedInstances`: 当前已完成的任务数; - `nrOfActiveInstances`: 正处于活跃状态下的未结束任务数目; 这些信息可以帮助开发者监控整体进度以及判断何时满足条件从而继续后续逻辑处理。 #### 4. 示例代码展示如何动态加载参与者名单 假设我们需要根据实际场景计算得出最终审批员,则可以在启动流程之前或者运行期间更新相关字段值。下面给出一段 Java 的伪代码演示这一操作: ```java // 假设我们有一个服务类负责返回候选数组 List<String> assignees = candidateService.getCandidatesForApproval(); Map<String, Object> variables = new HashMap<>(); variables.put("assignees", assignees); // 将候选列表放入流程变量中 runtimeService.startProcessInstanceByKey("processKey", variables); ``` 上述片段展示了怎样把外部获得的数据注入到正在构建的新实例里去供内部使用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值