Camunda流程引擎基本操作,部署,启动,完成,查待办、已完成、单条审批意见、流程审批意见,流程定义、流程实例、驳回到起始
1.流程部署:(1)流文件部署版本(2)直接文件路径部署:// 与流程定义和部署对象相关的ServiceRepositoryService repositoryService = processEngine.getRepositoryService();DeploymentBuilder deploymentBuilder = repositoryService.createDeployment(
1.流程部署:
(1)流文件部署版本
(2)直接文件路径部署:
// 与流程定义和部署对象相关的Service
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();// 创建一个部署对象
deploymentBuilder.name(添加部署名称);// 添加部署的名称
deploymentBuilder.addClasspathResource(文件路径到文件名称);// 从classpath的资源加载,一次只能加载一个文件
Deployment deployment = deploymentBuilder.deploy();// 完成部署
log.info("流程Id:" + deployment.getId());
log.info("流程Name:" + deployment.getName());
(3)压缩包部署:
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(压缩包路径);
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
RepositoryService repositoryService1 = processEngine.getRepositoryService();
Deployment deployment = repositoryService1.createDeployment()//
.addZipInputStream(zipInputStream).deploy();
System.out.println("流程部署id:" + deployment.getId());
System.out.println("流程部署名称:" + deployment.getName());
2.流程启动:
(流程启动中设置的map成为全局变量,中间任何时候能通过runtimeService.getVariable(task.getExecutionId(),key)获取值Object类型的数据)
processEngine=ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService=processEngine.getRuntimeService();
String processDefinitionkey=“流程定义key”;
Map<String,Object> map = new HashMap<String, Object>();
map.put(“title”,value);
IdentityService identityService = processEngine.getIdentityService();
identityService.setAuthenticatedUserId(“我是发起人”);
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey(ProcessDefinitionKey,BusinessKey,map);
System.out.println("流程实例ID:"+processInstance.getId());//流程实例ID
System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId());//流程定义ID
System.out.println(processInstance.getBusinessKey());
3.查询代办任务:
提示:listPage里的两个参数代表从第几行开始,起始行可为0也就是第一行,第二个参数是需要多少个。
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
int i=(pageNum-1)*pageSize ;
int i1=pageSize;
List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).listPage(i,i1);
List<TaskLike> taskLikeList = new ArrayList<>();
long count = taskService.createTaskQuery().taskAssignee(assignee).count();
//count是表示有多少条一共。
//page的分页就很清楚,两参一个其实页一个,页最大容量
Page<TaskLike> page = new Page<TaskLike>(pageNum, pageSize);
RuntimeService runtimeService = processEngine.getRuntimeService();
for (Task task : list) {
TaskLike taskLike = new TaskLike();
taskLike.setAssignee(task.getAssignee());
taskLike.setCreateTime(task.getCreateTime());
taskLike.setDescription((String)runtimeService.getVariable(task.getExecutionId(),"title"));
taskLike.setExecutionId(task.getExecutionId());
taskLike.setProcessDefinitionId(task.getProcessDefinitionId());
taskLike.setTaskId(task.getId());
taskLike.setTaskName(task.getName());
taskLike.setTaskDefinitionKey(task.getTaskDefinitionKey());
taskLike.setProcessInstanceId(task.getProcessInstanceId());
taskLikeList.add(taskLike);
}
page.setRecords(taskLikeList);
page.setTotal(count);
这句是为了将这些都放入page里,数据返回显示使用,返回page。
备注: 最后这个任务的循环值不能直接用List<Task>集合返回,这样会报一个错com.boot.model.RestfulResponse[\"data\"]->java.util.ArrayList[0]->org.camund之类的错误
百度之后说的是自己引用了自己, Task 属性里面有一些属性会导致循环引用,所以还得自己造个对象,把想输出的变成属性再次赋值输出即可。
4.查询已办任务(操作步骤跟查已办一样,分页也是为了前台数据处理,page的参数很全,所以多此一举添加page,其实分页page没有帮忙,流程引擎自带方法listPage已经分页完成)
int i=(pageNum-1)*pageSize ;
int i1=pageSize;
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
List<HistoricTaskInstance> list1 = processEngine.getHistoryService() // 历史任务Service
.createHistoricTaskInstanceQuery() // 创建历史任务实例查询
.taskAssignee(assignee) // 指定办理人
.finished() // 查询已经完成的任务
.listPage(i,i1);
long count = processEngine.getHistoryService().createHistoricTaskInstanceQuery().taskAssignee(assignee).finished().count();
//count是表示有多少条一共。
List<TaskLike> taskLikeList = new ArrayList<>();
Page<TaskLike> page = new Page<TaskLike>(pageNum, pageSize);
for (HistoricTaskInstance hti : list1) {
TaskLike taskLike = new TaskLike();//自己创建的任务对象,属性都在下边set里的就不单独摆出来了
taskLike.setAssignee(hti.getAssignee());
taskLike.setCreateTime(hti.getStartTime());
taskLike.setDescription((String)runtimeService.getVariable(hti.getExecutionId(),key));
//这个传入参数就是启动时设置map的
taskLike.setExecutionId(hti.getExecutionId());
taskLike.setProcessDefinitionId(hti.getProcessDefinitionId());
taskLike.setTaskId(hti.getId());
taskLike.setTaskName(hti.getName());
taskLike.setTaskDefinitionKey(hti.getTaskDefinitionKey());
taskLike.setProcessInstanceId(hti.getProcessInstanceId());
taskLikeList.add(taskLike);
}
page.setRecords(taskLikeList);
page.setTotal(count);
这句是为了将这些都放入page里,数据返回显示使用,返回page。
5.任务完成:
//获取流程启动Service
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
TaskService taskService=processEngine.getTaskService();
Task task=taskService.createTaskQuery().taskId(taskId).singleResult();
String processInstancesId=task.getProcessInstanceId();
IdentityService identityService = processEngine.getIdentityService();
identityService.setAuthenticatedUserId(userId); //这设置的时审批人及查询意见时的userId。
taskService.addComment(taskId,processInstancesId,idea);
//idea意思是完成时的审批意见,可在Act_Hi_Comment里的massge查询到
Map<String,Object> map = new HashMap<>();
map.put("条件1",value)//这个map根据bpmn情况定,传入complete方法
taskService.complete(taskId);//可多参条件。
6.查询审批意见
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
TaskService taskService=processEngine.getTaskService();
HistoryService hisService = processEngine.getHistoryService();
List<Comment> list=taskService.getTaskComments(taskId);
输入已完成任务id查询已完成任务信息。
7.查询这个流程的审批意见,用为未完成任务id查整个流程已完成任务的审批意见内容
ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
HistoryService historyService=processEngine.getHistoryService();
TaskService taskService=processEngine.getTaskService();
List<Comment> list = new ArrayList();
Task task = taskService.createTaskQuery()//
.taskId(taskId)//使用任务ID查询
.singleResult();
//获取流程实例ID
String processInstanceId = task.getProcessInstanceId();
//使用流程实例ID,查询历史任务,获取历史任务对应的每个任务ID
List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()//历史任务表查询
.processInstanceId(processInstanceId)//使用流程实例ID查询
.list();
//遍历集合,获取每个任务ID
for(HistoricTaskInstance hti:htiList){//任务ID
String htaskId = hti.getId();//获取批注信息
List taskList = taskService.getTaskComments(htaskId);//对用历史完成后的任务ID list.addAll(taskList);
}
8.查询流程实例:
int i=(pageNum-1)*pageSize ;
int i1=pageSize;
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
// 查询流程定义
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
// 遍历查询结果
List<ProcessDefinition> list = processDefinitionQuery.processDefinitionKey(ProcessDefinitionKey)
.orderByProcessDefinitionVersion().desc().listPage(i,i1);
List<DefinitionLike> definitionLikeList = new ArrayList<>();
Page<DefinitionLike> page = new Page<DefinitionLike>(pageNum, pageSize);
long count =processDefinitionQuery.processDefinitionKey(ProcessDefinitionKey).count();
for (ProcessDefinition processDefinition : list) {
DefinitionLike definitionLike = new DefinitionLike();
definitionLike.setDeploymentId(processDefinition.getDeploymentId());
definitionLike.setProcessDefinitionId(processDefinition.getId());
definitionLike.setProcessDefinitionName(processDefinition.getName());
definitionLike.setProcessDefinitionKey(processDefinition.getKey());
definitionLike.setProcessDefinitionVersion(processDefinition.getVersion());
definitionLikeList.add(definitionLike);
}
page.setRecords(definitionLikeList);
page.setTotal(count);
9.任务驳回到起始点
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
//获取当前任务,未办理任务id
HistoricTaskInstance currTask = historyService.createHistoricTaskInstanceQuery()
.taskId(taskId)
.singleResult();
//获取流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(currTask.getProcessInstanceId())
.singleResult();
//获取流程定义
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(currTask.getProcessDefinitionId());
ActivityImpl currActivity = (processDefinitionEntity)
.findActivity(currTask.getTaskDefinitionKey());
//清除当前活动出口
List<PvmTransition> originPvmTransitionList = new ArrayList<PvmTransition>();
List<PvmTransition> pvmTransitionList = currActivity.getOutgoingTransitions();
for (PvmTransition pvmTransition : pvmTransitionList) {
originPvmTransitionList.add(pvmTransition);
}
pvmTransitionList.clear();
//查找上一个user task节点
List<HistoricActivityInstance> historicActivityInstances = historyService
.createHistoricActivityInstanceQuery().activityType("userTask")
.processInstanceId(processInstance.getId())
.finished()
.orderByHistoricActivityInstanceEndTime().asc().list();
TransitionImpl transitionImpl = null;
if (historicActivityInstances.size() > 0) {
ActivityImpl lastActivity = (processDefinitionEntity)
.findActivity(historicActivityInstances.get(0).getActivityId());
//创建当前任务的新出口
transitionImpl = currActivity.createOutgoingTransition(lastActivity.getId());
transitionImpl.setDestination(lastActivity);
}
// 完成任务
List<Task> tasks = taskService.createTaskQuery()
.processInstanceId(processInstance.getId())
.taskDefinitionKey(currTask.getTaskDefinitionKey()).list();
for (Task task : tasks) {
taskService.complete(task.getId());
historyService.deleteHistoricTaskInstance(task.getId());
}
// 恢复方向
currActivity.getOutgoingTransitions().remove(transitionImpl);
for (PvmTransition pvmTransition : originPvmTransitionList) {
pvmTransitionList.add(pvmTransition);
}
10.查询流程定义:
int i=(pageNum-1)*pageSize ;
int i1=pageSize;
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().latestVersion().listPage(i, i1);
Page<ProcessDefinitionLike> page = new Page<ProcessDefinitionLike>(pageNum, pageSize);
long count = repositoryService.createProcessDefinitionQuery().latestVersion().count();
List<ProcessDefinitionLike> processDefinitionList =new ArrayList<>();
for(ProcessDefinition processDefinition:list){
ProcessDefinitionLike processDefinitionLike = new ProcessDefinitionLike();
processDefinitionLike.setDeploymentId(processDefinition.getDeploymentId());
processDefinitionLike.setProcessDefinitionName(processDefinition.getName());
processDefinitionLike.setProcessDefinitionVersion(processDefinition.getVersion()); processDefinitionLike.setProcessDefinitionDescription(processDefinition.getDescription());
processDefinitionLike.setProcessDefinitionKey(processDefinition.getKey());
processDefinitionLike.setProcessDefinitionId(processDefinition.getId());
processDefinitionLike.setProcessDefinitionResourceName(processDefinition.getResourceName());
processDefinitionList.add(processDefinitionLike);
}
page.setRecords(processDefinitionList);
page.setTotal(count);
更多推荐
所有评论(0)