flowable中张三创建请假,下一个李四审批完,李四审批完下一个部门领导审批,怎么动态获取张三的部门领导
时间: 2024-03-03 14:48:37 浏览: 149
在Flowable中,可以通过多种方式来动态获取张三的部门领导,下面给出两个示例:
1. 使用JavaDelegate实现动态获取部门领导
在JavaDelegate的实现类中,可以通过Execution对象获取流程实例的变量,从而动态获取张三的部门领导。具体步骤如下:
- 在流程定义文件中,定义一个服务任务,如下所示:
```xml
<serviceTask id="service1" name="获取部门领导" activiti:class="com.example.GetDepartmentLeaderDelegate"></serviceTask>
```
- 在JavaDelegate的实现类中,通过Execution对象获取部门信息,再根据部门信息查询部门领导,如下所示:
```java
public class GetDepartmentLeaderDelegate implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) {
String department = (String) execution.getVariable("department");
// 根据部门信息查询部门领导
String leader = departmentLeaderService.getLeaderByDepartment(department);
execution.setVariable("leader", leader);
}
}
```
- 在流程实例启动时,将张三的部门信息存储在流程变量中,如下所示:
```java
Map<String, Object> variables = new HashMap<>();
variables.put("department", "技术部");
variables.put("applicant", "张三");
processEngine.getRuntimeService().startProcessInstanceByKey("leaveProcess", variables);
```
- 在流程定义文件中,使用表达式获取部门领导,如下所示:
```xml
<userTask id="task1" name="请假申请">
<extensionElements>
<activiti:taskListener event="complete" class="org.flowable.engine.delegate.TaskListener">
<activiti:field name="assigneeExpression">
<activiti:expression>${leader}</activiti:expression>
</activiti:field>
</activiti:taskListener>
</extensionElements>
</userTask>
```
2. 使用表达式实现动态获取部门领导
在表达式中,可以直接使用流程实例变量中的部门信息,从而动态获取张三的部门领导。具体步骤如下:
- 在流程定义文件中,定义一个表达式任务,如下所示:
```xml
<userTask id="task1" name="请假申请">
<extensionElements>
<activiti:taskListener event="complete" class="org.flowable.engine.delegate.TaskListener">
<activiti:field name="assigneeExpression">
<activiti:expression>${departmentLeaderService.getLeaderByDepartment(execution.getVariable('department'))}</activiti:expression>
</activiti:field>
</activiti:taskListener>
</extensionElements>
</userTask>
```
- 在流程实例启动时,将张三的部门信息存储在流程变量中,如下所示:
```java
Map<String, Object> variables = new HashMap<>();
variables.put("department", "技术部");
variables.put("applicant", "张三");
processEngine.getRuntimeService().startProcessInstanceByKey("leaveProcess", variables);
```
通过以上步骤,就可以动态获取张三的部门领导,实现流程的灵活性和可扩展性。
阅读全文