什么是流程变量?
流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)。
例如:
流程变量学了它这货有什么用?
当然是传递数据- 比如请假天数,请假原因等等~
怎么配置流程变量
四种设置
1.启动时设置
2.任务完成时设置
3.runtimeService.setvars…()
4.taskservice.setvars…()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
TaskService taskService = processEngine.getTaskService();
//设置流程变量:4种
//①:启动流程的时候设置
//runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);
//②:任务完成的时候设置
//taskService.complete(taskId, variables);
//③:runtimeService设置
//runtimeService.setVariable(executionId, variableName, value);//存一个
//runtimeService.setVariables(executionId, variables);//存多个
//④:taskService设置
//taskService.setVariable(taskId, variableName, value);//存一个
//taskService.setVariables(taskId, variables);//存多个
怎么获取的流程变量值
//①:runtimeService获取变量
//runtimeService.getVariables(executionId)//获取所有
//runtimeService.getVariables(executionId, variableNames)//批量获取
//runtimeService.getVariable(executionId, variableName);//获取一个,但是要强转
//runtimeService.getVariable(executionId, variableName, variableClass)//获取一个,带泛型,不强转
//②:taskService获取变量
//taskService.getVariables(taskId)//获取所有
//taskService.getVariables(taskId, variableNames)//批量获取
//taskService.getVariable(taskId, variableName);//获取一个,但是要强转
//taskService.getVariable(taskId, variableName, variableClass)//获取一个,带泛型,不强转
}
流程变量类型
此图是从官网列出来的流程变量类型
在这里抽取了部分公共的代码 希望能带来一定的帮助
// 获取核心对象 服务大管家
protected ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// 获取运行的service服务
protected RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
// 获取TaskService
protected TaskService taskService = defaultProcessEngine.getTaskService();
/**
* 部署文件
*
* @param resource
* @param name
*/
public void deploy(String resource, String name) {
// 获取核心对象 服务大管家
// 获取服务
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
// 部署对象
DeploymentBuilder createDeployment = repositoryService.createDeployment();
// 上传资源
InputStream inputStream = this.getClass().getResourceAsStream(resource + ".bpmn");
InputStream inputStream2 = this.getClass().getResourceAsStream(resource + ".png");
createDeployment.addInputStream(resource + ".bpmn", inputStream);
createDeployment.addInputStream(resource + ".png", inputStream2);
createDeployment.name(name);
// 部署
createDeployment.deploy();
}
/**
* 启动实例带流程变量
*/
public ProcessInstance start(String key, Map<String, Object> variables) {
// 启动
// 设置一下变量
ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey(key, variables);
return startProcessInstanceByKey;
}
/**
* 启动实例带流程变量
*/
public ProcessInstance start(String key) {
// 启动
// 设置一下变量
ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey(key);
return startProcessInstanceByKey;
}
/**
* 完成任务 带流程变量 方便流转到下以个节点
*/
public void compleTask(String taskId, Map<String, Object> variables) throws Exception {
taskService.complete(taskId, variables);
}
/**
* 完成任务
*/
public void compleTask(String taskId) throws Exception {
taskService.complete(taskId);
}
/**
* 完成任务 实例id 和 人的名称
*/
public void compleTaskByPIdAndName(String pid, String name) throws Exception {
// 获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
// 获取任务id
Task task = createTaskQuery.processInstanceId(pid).taskAssignee(name).singleResult();
// 完成
taskService.complete(task.getId());
}
/**
* 完成任务 实例id 和 人的名称
*/
public void compleTaskByPIdAndName(String pid, String name, Map<String, Object> variables) throws Exception {
// 获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
// 获取任务id
Task task = createTaskQuery.processInstanceId(pid).taskAssignee(name).singleResult();
// 完成
taskService.complete(task.getId(), variables);
}
/**
* 查询某个人的任务列表
*/
public List<Task> queryTaskList(String name) throws Exception {
// 获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
// 设置查询条件
createTaskQuery.taskAssignee(name);
// 查询列表
List<Task> list = createTaskQuery.list();
return list;
}
/**
* 查询某个人的当前任务
*/
public Task queryTaskByName(String pid, String name) throws Exception {
// 获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
// 设置查询条件
createTaskQuery.taskAssignee(name);
createTaskQuery.processInstanceId(pid);
//
Task task = createTaskQuery.singleResult();
return task;
}
/**
* 查询当前执行对象(当前活动节点)
*/
public Execution queryExcution(String pid, String actid) throws Exception {
// 获取查询对象
ExecutionQuery createExecutionQuery = runtimeService.createExecutionQuery();
// 设置查询条件
Execution execution = createExecutionQuery.processInstanceId(pid).activityId(actid).singleResult();
// 返回
return execution;
}
// 查询流程是否结束
public void isEnd(String pid) {
// 查询对象
ProcessInstanceQuery createProcessInstanceQuery = runtimeService.createProcessInstanceQuery();
// 根据id
ProcessInstance singleResult = createProcessInstanceQuery.processInstanceId(pid).singleResult();
// 如果singleResult找到说明流程还没有结束
if (singleResult != null) {
System.out.println("流程未结束或不存在");
} else {
System.out.println("流程结束");
}
}
}