在做流程定义时我们需要给相关的用户节点指派对应的处理人。在flowable中提供了三种分配的方式。
一、固定分配
在分配用户时选择固定值选项确认即可。
二、表达式
1、值表达式
2、方法表达式
三、表达式流程图测试
1、导出并部署
导出流程图,复制到项目中
部署流程
package org.example.flowabledemo2;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.DeploymentBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class FlowableDemo2ApplicationTests {
// 提供对流程定义和部署的存储库的访问。
@Autowired
private RepositoryService repositoryService;
@Test
void contextLoads() {
DeploymentBuilder deployment = repositoryService.createDeployment();
deployment.addClasspathResource("process01/Example01.bpmn20.xml");
deployment.name("表达式流程图");
Deployment deploy = deployment.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
}
}
在act_re_deployment流程定义表中查看部署的信息
2、值表达式测试
/**
* 发起流程
*/
@Test
public void startProcess() {
String id = "Example01:1:099febed-2a3a-11ef-a0cf-644ed7087863";
// 根据流程定义ID启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(id);
}
获取zhangsan的待办事项,进行审批
/**
* 根据用户查询待办信息
*/
@Test
public void findFlow() {
List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").list();
// 根据id进行审批
for (Task task : list) {
completeTask(task.getId());
}
}
/**
* 根据Id审批任务
*/
public void completeTask(String taskId) {
taskService.complete(taskId);
}
此时会报错,原因是没有给myAssign1赋值。
需要个给myAssign1赋予一个值。
/**
* 根据Id审批任务
*/
public void completeTask(String taskId) {
// 给表达式绑定一个值。
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("myAssign1", "lisi");
taskService.complete(taskId, variables);
}
查询任务进度,到达审批用户2,审批人lisi
3、方法表达式测试
创建一个对应的java类。
package org.example.flowabledemo2.bean;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
public String getAssignee() {
System.out.println("MyBean.getAssignee()");
return "wangwu";
}
}
使lisi通过审批查看效果。
/**
* 根据用户查询待办信息
*/
@Test
public void findFlow() {
List<Task> list = taskService.createTaskQuery().taskAssignee("lisi").list();
// 根据id进行审批
for (Task task : list) {
completeTask(task.getId());
}
}
/**
* 根据Id审批任务
*/
public void completeTask(String taskId) {
taskService.complete(taskId);
}
查看任务进度,当前进度是审批用户3,审批人wangwu。
在使用王五进行审批,当前任务结束。