Flowable28多实例的加签减签------------持续更新中

Flowable多实例的加签减签实现

首先要明确,Flowable 的核心是基于 BPMN 2.0 标准的,而这个标准本身并没有明确定义“加签”和“减签”这两个操作。因此,我们实现这些功能,本质上是利用 Flowable 提供的灵活 API,通过一些技巧来“模拟”出这种效果。
最常用且最规范的实现方式是基于“多实例任务”(Multi-instance Task)。
多实例任务:允许一个任务节点为多个人员创建任务。它可以是:
并行(Parallel):为列表中的每个人同时创建一个任务,所有人可以同时审批。
串行(Sequential):按列表顺序,前一个人完成任务后,再为后一个人创建任务。
加签/减签的核心思想就是:动态地修改这个“多实例任务”的审批人列表。

<userTask id="multiInstanceTask" name="会签任务" flowable:assignee="${assignee}">
  <multiInstanceLoopCharacteristics isSequential="false">
    <loopDataInputRef>assigneeList</loopDataInputRef>
    <inputDataItem name="assignee" />
  </multiInstanceLoopCharacteristics>
</userTask>

isSequential=“false”:这是一个并行多实例任务。
loopDataInputRef: 流程启动时,需要提供一个名为 assigneeList 的变量(通常是一个 List)。
inputDataItem name=“assignee”: 每次循环,会从 assigneeList 中取出一个元素,并将其放入名为 assignee 的变量中。
flowable:assignee=“${assignee}”: 任务的办理人就是这个 assignee 变量的值。

一、加签 (Add Sign)

“加签”的本质是在一个正在运行的多实例活动中,动态地增加一个新的任务实例。
Flowable 提供了专门的API来实现这个功能:RuntimeService.addMultiInstanceExecution()。
操作步骤:
找到父执行 (Parent Execution): 多实例任务的所有子实例都共享同一个父执行。你需要先找到这个父执行的ID。
首先,通过任意一个已存在的子任务ID,找到它的执行ID (executionId)。
然后,通过这个子任务的执行ID,查询它的父执行ID (parentId)。
准备新实例的变量: 为新增加的任务实例准备必要的变量。最重要的就是办理人变量(在上面的例子中是 assignee)。
调用API: 使用 runtimeService 调用 addMultiInstanceExecution 方法。
核心API

void addMultiInstanceExecution(String multiInstanceActivityId, String parentExecutionId, Map<String, Object> executionVariables);

ps:至于为啥要用activityId而不是taskId,原因在于加签相当于增加了一个task结构,而taskId是task生成后有的,所以说应该用activityId。

ultiInstanceActivityId: 多实例任务节点的ID(在BPMN XML文件中定义的ID,如 multiInstanceTask)。
parentExecutionId: 在步骤1中找到的父执行ID。
executionVariables: 一个 Map,包含了新实例需要的变量。例如 {“assignee”: “newUser”}。
示例代码

import org.flowable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值