flowable实现抄送
时间: 2023-10-18 11:04:58 浏览: 253
在 Flowable 中实现抄送可以通过两种方式来完成:使用任务监听器或使用事件监听器。以下是两种方式的示例:
1. 使用任务监听器:
```java
public class CcTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
String assignee = delegateTask.getAssignee();
// 获取抄送用户列表
List<String> ccUsers = getCcUsers(assignee);
for (String ccUser : ccUsers) {
// 创建抄送任务
TaskEntityImpl ccTask = (TaskEntityImpl) delegateTask.getExecution().createExecution().createTask();
ccTask.setAssignee(ccUser);
ccTask.setName("抄送任务");
ccTask.setVariable("cc", true);
// 设置抄送任务的父任务ID为当前任务ID
ccTask.setParentTaskId(delegateTask.getId());
// 保存抄送任务
Context.getCommandContext().getTaskEntityManager().insert(ccTask);
}
}
private List<String> getCcUsers(String assignee) {
// 根据需求自行实现获取抄送用户列表的逻辑
// 可以从数据库、配置文件等方式获取
// 这里仅作示例,返回一个固定的抄送用户列表
return Arrays.asList("user1", "user2", "user3");
}
}
```
在需要进行抄送的流程节点上,配置任务监听器:
```xml
<bpmn:userTask id="task1" name="任务1" activiti:assignee="${assignee}">
<bpmn:extensionElements>
<flowable:taskListener event="create" class="com.example.CcTaskListener" />
</bpmn:extensionElements>
</bpmn:userTask>
```
2. 使用事件监听器:
```java
public class CcEventListener implements FlowableEventListener {
@Override
public void onEvent(FlowableEvent event) {
if (event instanceof TaskCreatedEvent) {
TaskCreatedEvent taskCreatedEvent = (TaskCreatedEvent) event;
String assignee = taskCreatedEvent.getEntity().getAssignee();
// 获取抄送用户列表
List<String> ccUsers = getCcUsers(assignee);
for (String ccUser : ccUsers) {
// 创建抄送任务
TaskEntityImpl ccTask = (TaskEntityImpl) taskCreatedEvent.getEngineServices()
.getTaskService().createTask();
ccTask.setAssignee(ccUser);
ccTask.setName("抄送任务");
ccTask.setVariable("cc", true);
// 设置抄送任务的父任务ID为当前任务ID
ccTask.setParentTaskId(taskCreatedEvent.getEntity().getId());
// 保存抄送任务
taskCreatedEvent.getEngineServices().getTaskService().saveTask(ccTask);
}
}
}
private List<String> getCcUsers(String assignee) {
// 根据需求自行实现获取抄送用户列表的逻辑
// 可以从数据库、配置文件等方式获取
// 这里仅作示例,返回一个固定的抄送用户列表
return Arrays.asList("user1", "user2", "user3");
}
}
```
在流程引擎配置中添加事件监听器:
```java
Configuration configuration = new StandaloneProcessEngineConfiguration()
.setDataSource(dataSource)
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.setFlowableEventListener(new CcEventListener());```
以上是两种实现抄送的方法,你可以根据自己的需求选择其中一种方式进行实现。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)