flowable审批流 n个待办节点 怎么设计流程图
时间: 2025-07-23 18:57:00 浏览: 1
<think>我们正在设计一个包含多个待办任务节点的Flowable审批流程图。根据Flowable的工作方式,我们需要使用BPMN 2.0标准来定义流程。以下步骤将指导你完成设计:
1. **流程定义**:使用Flowable流程设计器(如Eclipse插件或在线设计器)创建BPMN图。在图中,我们将添加多个用户任务(User Task)节点,每个节点代表一个待办任务。
2. **任务分配**:为每个用户任务指定执行人(Assignee)。分配方式可以是:
- **固定分配**:直接指定用户ID(如`assignee="user1"`)。
- **表达式分配**:使用UEL表达式动态分配(如`assignee="${initiator}"`,表示由流程发起人处理)。
- **监听器分配**:通过实现`TaskListener`接口,在任务创建时动态设置执行人。
3. **流程连接**:使用顺序流(Sequence Flow)连接各个节点,定义审批顺序。还可以使用网关(Gateway)来实现条件分支,如排他网关(Exclusive Gateway)或并行网关(Parallel Gateway)。
4. **多实例配置**(可选):如果某个节点需要多人会签(即所有审批人都要审批),可以配置多实例(Multi-instance)。例如,一个任务需要多个用户审批,配置为并行或顺序多实例。
5. **流程变量**:定义流程变量,用于存储和传递数据(如审批结果、审批意见等)。
### 设计示例
以下是一个简单的BPMN 2.0 XML示例,包含三个待办任务节点(task1, task2, task3):
```xml
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" ...>
<process id="multiTaskApproval" name="多任务审批流程">
<startEvent id="start" />
<sequenceFlow sourceRef="start" targetRef="task1" />
<!-- 第一个任务:固定分配给用户 user1 -->
<userTask id="task1" name="任务1" assignee="user1" />
<sequenceFlow sourceRef="task1" targetRef="task2" />
<!-- 第二个任务:使用表达式动态分配(假设流程变量中有approver2变量) -->
<userTask id="task2" name="任务2" assignee="${approver2}" />
<sequenceFlow sourceRef="task2" targetRef="task3" />
<!-- 第三个任务:配置为多实例会签(需要用户组group1的所有成员审批) -->
<userTask id="task3" name="任务3">
<multiInstanceLoopCharacteristics isSequential="false">
<loopCardinality>${nrOfMembers}</loopCardinality>
<completionCondition>${nrOfCompletedInstances/nrOfInstances >= 1}</completionCondition>
</multiInstanceLoopCharacteristics>
<!-- 任务分配:候选组 -->
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>group1</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlow sourceRef="task3" targetRef="end" />
<endEvent id="end" />
</process>
</definitions>
```
### 关键点说明
- **任务分配**:任务1固定分配,任务2通过表达式动态分配(需在流程启动时设置`approver2`变量),任务3配置为多实例(会签),分配给`group1`组的所有成员。
- **多实例**:`isSequential="false"`表示并行会签;`completionCondition`定义完成条件(此处为全部完成)。
- **流程部署**:将BPMN XML部署到Flowable引擎中。
- **启动流程**:通过REST API或Java API启动流程实例,并传递初始变量(如`approver2`)。
### 相关代码示例(Java)
启动流程实例并设置变量:
```java
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> variables = new HashMap<>();
variables.put("approver2", "user2"); // 设置任务2的执行人
ProcessInstance instance = runtimeService.startProcessInstanceByKey("multiTaskApproval", variables);
```
### 注意事项
- 确保流程设计符合业务逻辑,审批顺序和条件正确。
- 多实例任务需要根据业务需求设置完成条件(如全部通过、多数通过等)。
- 使用流程变量传递数据,确保任务执行人能获取所需信息。
通过以上步骤,你可以设计并实现一个包含多个待办任务节点的审批流程。
§§相关问题§§
1. 如何在Flowable中动态设置任务执行人?
2. Flowable多实例任务(会签)的配置参数有哪些?
3. 如何查询Flowable流程中的待办任务?</think>### 如何在Flowable中设计包含多个待办任务节点的审批流程图
在Flowable中设计多待办节点的审批流程,主要通过BPMN 2.0标准实现,以下是关键步骤和示例:
#### 1. **定义流程模型(BPMN XML)**
使用流程设计器创建包含多个用户任务(User Task)的BPMN图,每个任务节点代表一个待办审批环节:
```xml
<process id="multi_task_approval" name="多任务审批流程">
<!-- 启动节点 -->
<startEvent id="start" />
<sequenceFlow sourceRef="start" targetRef="task1" />
<!-- 第一个待办任务 -->
<userTask id="task1" name="部门审批"
flowable:assignee="${initiator}" /> <!-- 动态分配 -->
<!-- 第二个待办任务 -->
<userTask id="task2" name="财务审批"
flowable:candidateGroups="finance" /> <!-- 候选组分配 -->
<!-- 第三个待办任务(多实例会签) -->
<userTask id="task3" name="管理层会签">
<multiInstanceLoopCharacteristics
flowable:isSequential="false"
flowable:collection="${managerList}"
flowable:elementVariable="manager">
<completionCondition>${nrOfCompletedInstances >= 2}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow sourceRef="task1" targetRef="task2" />
<sequenceFlow sourceRef="task2" targetRef="task3" />
<sequenceFlow sourceRef="task3" targetRef="end" />
<endEvent id="end" />
</process>
```
#### 2. **任务分配方式**
- **固定分配**:直接指定用户ID(`flowable:assignee="user1"`)
- **表达式分配**:动态计算执行人(如`${initiator}`取流程发起人)[^1]
- **候选组分配**:`flowable:candidateGroups="finance"`允许财务组所有成员认领
- **多实例会签**:需多人审批的场景(如`${managerList}`传递审批人列表)
#### 3. **关键配置说明**
| 配置项 | 作用说明 |
|-----------------------|------------------------------------------------------------------------|
| `multiInstanceLoopCharacteristics` | 定义多实例任务(会签) |
| `isSequential="false"` | 并行审批(true为串行) |
| `completionCondition` | 完成条件(示例中需至少2人审批) |
| `collection` | 动态传入审批人集合(如Java代码设置`variables.put("managerList", list)`)|
#### 4. **流程部署与启动**
```java
// 部署BPMN文件
RepositoryService repositoryService = flowableEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/multi_approval.bpmn20.xml")
.deploy();
// 启动流程实例
RuntimeService runtimeService = flowableEngine.getRuntimeService();
Map<String, Object> variables = new HashMap<>();
variables.put("initiator", "user001"); // 设置动态分配变量
ProcessInstance instance = runtimeService.startProcessInstanceByKey("multi_task_approval", variables);
```
#### 5. **待办任务查询(SQL示例)**
```sql
SELECT * FROM ACT_RU_TASK
WHERE PROC_INST_ID_ = '流程实例ID'
AND ASSIGNEE_ IS NULL; -- 未签收的任务
```
通过`ACT_RU_IDENTITYLINK`表可查询候选任务[^2]
#### 6. **任务处理(前端示例)**
参考Vue3实现的任务跳转逻辑[^3]:
```javascript
function handleTask(record) {
router.push({
path: '/task/process',
query: {
taskId: record.taskId, // 当前任务ID
procInsId: record.procInsId // 流程实例ID
}
})
}
```
### 注意事项
1. **动态变量**:在启动流程时注入`initiator`等变量实现动态分配
2. **会签设置**:多实例任务需明确`collection`(审批人集合)和完成条件
3. **任务签收**:候选组任务需先签收(`taskService.claim(taskId, userId)`)再处理
4. **流程监控**:通过`ACT_RU_TASK`表实时跟踪任务状态
> 示例流程:启动 → 部门审批(动态分配)→ 财务审批(候选组)→ 管理层会签(并行多实例)→ 结束
阅读全文
相关推荐

















