flowable多任务实现会签、或签

1、简介

做工作流,基本会遇到会签、或签的需求。而flowable是通过多任务方式来实现的

2、主要实现方式

在流程运行到任务节点时不是按照默认规则只生成一条任务记录,而是根据需要同时生成多条任务记录,甚至生成的多条任务都能分别对应到指定的各个审批人。而不再需要领取。这种就叫多任务

简述下这里面用到了核心流程

要实现多任务,则需要对 需要的任务节点需要做相关处理

下面介绍了解到两种方式处理

2.1 xml方式

此种方式是直接通过在xml的相应节点来定义多任务,这种官方有大量的xml 例子

【官方】多任务的xml

使用flowable 官方的套件来配置多任务的交互见面大概如下(图片来源于网上):

最终对应到实际的核心xml详细如下 (下面xml不严格对应上图)

    <bpmn2:userTask id="Activity_1g65lke" name="审批啊14" flowable:assignee="${approver}" flowable:candidateGroups="2317,2347" flowable:category="CHECK">
      <bpmn2:extensionElements>
        <flowable:executionListener class="***.listens.MultiInstanceListen" event="start" />

      </bpmn2:extensionElements>
      <bpmn2:incoming>Flow_1666168081285</bpmn2:incoming>
      <bpmn2:outgoing>Flow_03sldqb</bpmn2:outgoing>

      <bpmn2:multiInstanceLoopCharacteristics flowable:collection="Activity_1g65lke_approverList" flowable:elementVariable="approver">
        </bpmn2:extensionElements>
        <bpmn2:completionCondition>${nrOfCompletedInstances>=1}</bpmn2:completionCondition>
      </bpmn2:multiInstanceLoopCharacteristics>

    </bpmn2:userTask>

如果你不是用的官方的UI来生成的xml, 那么你的自己想办法也需要构造出上面的xml

2.2 java类后端处理

此种方式是我在调研时看到的,我并未尝试过,不太切合我们的需求,但是也是一种方式

此种方式就是运行到相应节点,后端通过调用api来生成多任务所需要的一切

这边就不放核心代码了,直接可以点击网友已经做好的整理

3、核心参数解释

上面应该能看到我们需要配置一些东西才能支持多任务。这里详细说下相关参数及重要点

3.1 相关参数
  1. isSequential: 表示并行,还是顺序。(xml跟配图可能有出入)
  2. loop card

### Flowable会签的配置方法 Flowable 是一种强大的工作流引擎,支持复杂的业务流程建模和执行。其中,“会签”是一种常见的审批场景,通常指多个参与者都需要完成某项任务后,整个任务才算结束。以下是关于 Flowable 会签配置的具体说明: #### 配置 XML 文件中的会签任务 在 BPMN 流程定义文件中,可以通过 `<multiInstanceLoopCharacteristics>` 节点来实现多实例任务(即会签)。以下是一个典型的会签任务配置示例[^2]: ```xml <userTask id="approveTask" name="财务审批"> <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="Activity_1g65lke_approverList" flowable:elementVariable="approver"> <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition> </multiInstanceLoopCharacteristics> </userTask> ``` - `isSequential` 属性表示是否顺序执行子任务。对于会签来说,通常是并行执行 (`false`)。 - `flowable:collection` 表达式指定参与者的集合变量名,在实际运行时会被解析为具体的人员列表。 - `flowable:elementVariable` 定义每次循环迭代时使用的单个元素名称。 - `<completionCondition>` 设置完成条件,只有当所有实例都完成后才会触发后续的任务。 #### 动态创建会签模型 除了静态配置外,还可以通过 Java API 动态生成包含会签逻辑的流程模型。这种方法特别适合于需要灵活调整的工作流环境[^3]。下面展示了一种动态构建会签模型的方式[^4]: ```java import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.UserTask; public class DynamicMultiInstance { public static void main(String[] args) { RepositoryService repositoryService = ...; // 初始化服务对象 BpmnModel bpmnModel = new BpmnModel(); UserTask approveTask = new UserTask(); approveTask.setId("approveTask"); approveTask.setName("财务审批"); // 添加多实例特性 MultiInstanceLoopCharacteristics multiInstanceChar = new MultiInstanceLoopCharacteristics(false); multiInstanceChar.setInputDataItem("${Activity_1g65lke_approvers}"); multiInstanceChar.setElementVariable("approver"); multiInstanceChar.setCompletionCondition("${nrOfCompletedInstances == nrOfInstances}"); approveTask.setLoopCharacteristics(multiInstanceChar); bpmnModel.addFlowElement(approveTask); // 创建并部署流程定义 repositoryService.createDeployment().addBpmnModel("dynamic-process", bpmnModel).deploy(); RuntimeService runtimeService = ...; // 获取运行时服务 runtimeService.startProcessInstanceByKey("dynamic-process"); } } ``` 此代码片段展示了如何利用 Flowable 的 Java API 构造一个多实例用户任务,并将其作为会签节点嵌入到流程中。 #### 处理会签过程中的特殊需求 某些情况下可能还需要额外的功能支持,比如清除之前的审批意见者允许某个特定条件下终止整个会签流程。这些功能可通过自定义监听器调用 Flowable 提供的相关 API 来实现[^1]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值