flowable:assignee参数从数据库中获取
时间: 2024-03-17 10:47:34 浏览: 122
flowable 6.8 适配达梦数据库
要从数据库中获取`flowable:assignee`参数,可以使用`delegateExpression`表达式来执行自定义的Java类或Spring bean,从数据库中查询相应的数据,并返回对应的值。
具体步骤如下:
1. 在BPMN文件中,使用`delegateExpression`属性来指定Java类或Spring bean,例如:
```xml
<userTask id="task1" name="任务1" flowable:delegateExpression="${customTaskDelegate}">
<extensionElements>
<flowable:taskListener event="create" class="com.example.CustomTaskListener"/>
</extensionElements>
</userTask>
```
这里的`${customTaskDelegate}`是一个EL表达式,用来指定Java类或Spring bean的名称。
2. 自定义Java类或Spring bean,从数据库中查询`flowable:assignee`参数,并返回对应的值,例如:
```java
@Service("customTaskDelegate")
public class CustomTaskDelegate implements JavaDelegate {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void execute(DelegateExecution execution) {
String processDefinitionId = execution.getProcessDefinitionId();
String assignee = jdbcTemplate.queryForObject("select assignee from assignee_table where process_definition_id=?", String.class, processDefinitionId);
execution.setVariable("assignee", assignee);
}
}
```
这里,`CustomTaskDelegate`实现了`JavaDelegate`接口,表示它是一个可执行的Java类。在`execute`方法中,可以使用`jdbcTemplate`从数据库中查询`flowable:assignee`参数,并将其设置为流程变量`assignee`的值,以便在任务节点中使用。
3. 在流程启动时,设置流程变量
在启动流程时,可以使用`RuntimeService`的`startProcessInstanceByKey`方法启动流程,并设置流程变量。例如:
```java
Map<String, Object> variables = new HashMap<>();
runtimeService.startProcessInstanceByKey("process1", variables);
```
在这个例子中,没有设置任何流程变量,但是可以在启动流程时设置其他相关的流程变量,以便在任务节点中使用。
4. 执行流程
启动流程后,即可执行流程,在任务节点中获取`flowable:assignee`参数,并根据其值动态生成审批人。在任务节点中,可以使用`${assignee}`表达式来获取流程变量`assignee`的值,例如:
```xml
<userTask id="task1" name="任务1" flowable:assignee="${assignee}">
<extensionElements>
<flowable:taskListener event="create" class="com.example.CustomTaskListener"/>
</extensionElements>
</userTask>
```
这里的`${assignee}`是一个EL表达式,用来指定任务节点的候选人。在任务节点中,它会自动从流程变量`assignee`中获取对应的值,并设置为任务的候选人。
阅读全文