Flowable 带抄送功能的流程图
时间: 2024-04-01 19:36:15 浏览: 32
Flowable 是一款流程引擎,支持多种流程图形式,包括BPMN和CMMN等。在 Flowable 中,可以通过添加用户任务节点和设置候选人、组或者角色等方式来实现抄送功能。
具体实现流程如下:
1. 在 BPMN 流程图中添加用户任务节点。
2. 设置用户任务节点的候选人、候选组或者候选角色,将需要抄送的人员添加进去。
3. 在流程中添加一个监听器,在节点完成时触发,将任务节点的候选人与实际处理人员进行比对,如果不一致,则将未处理的任务节点复制一份,并分配给抄送人员进行处理。
需要注意的是,抄送人员只能查看和审批,不能干涉流程的正常运行。同时,抄送节点的处理结果不会影响流程的正常流转。
以上是 Flowable 带抄送功能的流程图的实现方式,希望能对您有所帮助。
相关问题
flowable实现抄送功能
根据提供的引用内容,Flowable是一个业务流程管理(BPM)和工作流系统,其核心是超快速、稳定的BPMN2流程引擎,易于与Spring集成使用。Flowable提供了丰富的API和工具,可以轻松地实现各种工作流场景,包括抄送功能。
实现抄送功能的一种方法是使用Flowable提供的事件机制。当任务被创建或完成时,可以触发事件并将抄送人添加到任务中。以下是一个简单的示例代码:
```java
public class CopyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
String assignee = delegateTask.getAssignee();
List<String> ccList = getCCList(assignee); // 获取抄送人列表
for (String cc : ccList) {
TaskEntity task = TaskEntity.createAndInsert();
task.setName(delegateTask.getName() + "(抄送)");
task.setAssignee(cc);
task.setParentTaskId(delegateTask.getId());
task.setProcessInstanceId(delegateTask.getProcessInstanceId());
task.setExecutionId(delegateTask.getExecutionId());
task.setCreateTime(new Date());
task.setTaskDefinitionKey(delegateTask.getTaskDefinitionKey());
task.setTenantId(delegateTask.getTenantId());
Context.getCommandContext().getTaskEntityManager().insert(task);
}
}
}
```
在上面的代码中,我们实现了一个TaskListener,当任务被创建时,会调用notify方法。在该方法中,我们获取任务的执行人,然后获取抄送人列表。接下来,我们遍历抄送人列表,并创建一个新的任务,将抄送人作为任务的执行人。最后,我们将新任务插入到数据库中。
为了让Flowable使用我们的TaskListener,我们需要在流程定义中配置它。以下是一个示例BPMN文件:
```xml
<process id="myProcess" name="My process">
<startEvent id="start" />
<userTask id="task1" name="Task 1" activiti:assignee="${user}">
<extensionElements>
<activiti:taskListener event="create" class="com.example.CopyTaskListener" />
</extensionElements>
</userTask>
<endEvent id="end" />
<sequenceFlow id="flow1" sourceRef="start" targetRef="task1" />
<sequenceFlow id="flow2" sourceRef="task1" targetRef="end" />
</process>
```
在上面的BPMN文件中,我们在userTask元素上添加了一个TaskListener,当任务被创建时,会调用CopyTaskListener类中的notify方法。
springboot集成flowable实现抄送功能
在使用Flowable框架时,可以通过监听器的方式实现抄送功能。具体实现步骤如下:
1. 在流程图中添加抄送节点。
2. 定义一个实现了TaskListener接口的类,用于监听抄送任务的创建和完成事件。其中,创建事件中获取抄送人员列表,完成事件中将抄送任务标记为已完成。
```java
public class CopyTaskListener implements TaskListener {
@Autowired
private RuntimeService runtimeService;
@Override
public void notify(DelegateTask delegateTask) {
if ("copy".equals(delegateTask.getTaskDefinitionKey())) {
// 获取抄送人员列表
List<String> copyUsers = (List<String>) runtimeService.getVariable(delegateTask.getExecutionId(), "copyUsers");
delegateTask.addCandidateUsers(copyUsers); // 设置候选人
} else if ("copyTaskComplete".equals(delegateTask.getTaskDefinitionKey())) {
// 标记任务为已完成
runtimeService.setVariable(delegateTask.getExecutionId(), "copyTaskComplete", true);
}
}
}
```
3. 在Spring Boot项目中配置监听器。
```java
@Configuration
public class FlowableConfig {
@Autowired
private CopyTaskListener copyTaskListener;
@Bean
public ProcessEngineConfigurationConfigurer processEngineConfigurationConfigurer() {
return processEngineConfiguration -> {
// 添加监听器
processEngineConfiguration.getTaskListeners().addTaskListenerFactory(new DefaultTaskListenerFactory(copyTaskListener));
};
}
}
```
4. 在流程启动时设置抄送人员列表。
```java
@Service
public class LeaveServiceImpl implements LeaveService {
@Autowired
private RuntimeService runtimeService;
@Override
public void startProcess(String userId, String copyUsers) {
Map<String, Object> variables = new HashMap<>();
variables.put("userId", userId);
variables.put("copyUsers", Arrays.asList(copyUsers.split(",")));
runtimeService.startProcessInstanceByKey("leave", variables);
}
}
```
5. 在前端界面中展示抄送任务。
6. 当抄送任务被完成时,将其从前端界面中移除,并将其标记为已完成。
以上就是使用Flowable框架实现抄送功能的步骤。需要注意的是,在实际应用中,可能还需要考虑并发情况、超时处理等问题。