Activiti流程实例,任务,执行对象控制流程的执行

xiaoxiao2021-02-28  28

代码:

package com.ytdx.processInstance; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInputStream; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.junit.Test; /** * 流程实例,任务,执行对象控制流程的执行 * @author lhy * */ public class ProcessInstanceTest { ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /** * 1.部署流程定义(从zip) */ @Test public void deploymentProcess_zip(){ InputStream in = this.getClass().getClassLoader().getResourceAsStream("MyProcess.zip"); ZipInputStream zipInputStream = new ZipInputStream(in); Deployment deployment = processEngine.getRepositoryService() //与流程定义和部署对象相关的Service .createDeployment() //创建一个部署对象 .name("流程实例定义") //添加部署的名称 .addZipInputStream(zipInputStream) //指定zip格式的文件完成部署 .deploy(); //完成部署 System.out.println("部署ID:"+deployment.getId()); System.out.println("部署名称:"+deployment.getName()); } /** * 2.启动流程实例 */ @Test public void startProcessInstance(){ String processDefinitionKey = "myProcess"; //流程定义的key ProcessInstance pi = processEngine.getRuntimeService() //与正在执行的流程实例和执行对象相关的Service .startProcessInstanceByKey(processDefinitionKey); //使用流程定义的key启动流程实例,key对应myProcess.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动 System.out.println("流程实例ID:"+pi.getId()); //流程实例ID:1301 System.out.println("流程定义ID:"+pi.getProcessDefinitionId()); //流程定义ID:myProcess:10:1204 } /** * 3.查询当前人的个人任务 */ @Test public void SelectByPersonalTask(){ String assignee = "海哥"; List<Task> list = processEngine.getTaskService() //与正在执行的任务管理相关的Service .createTaskQuery() //创建任务查询对象 /**查询条件(where部分)*/ .taskAssignee(assignee) //指定个人任务查询,指定办理人 // .taskCandidateUser(candidateUser) //组任务的办理人查询 // .processDefinitionId(processDefinitionId) //使用流程定义ID查询 // .processInstanceId(processInstanceId) //使用流程实例ID查询 // .executionId(executionId) //使用执行对象ID查询 /**排序*/ .orderByTaskCreateTime().asc() //使用创建时间的升序排列 /**返回结果集*/ // .singleResult() //返回惟一结果集 // .count() //返回结果集的数量 // .listPage(firstResult, maxResults); //分页查询 .list(); //返回列表 if(list!=null && list.size()>0){ for(Task task : list){ System.out.println("任务ID:"+task.getId()); System.out.println("任务名称:"+task.getName()); System.out.println("任务的创建时间:"+task.getCreateTime()); System.out.println("任务的办理人:"+task.getAssignee()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("执行对象ID:"+task.getExecutionId()); System.out.println("流程定义ID:"+task.getProcessDefinitionId()); System.out.println("########################################################"); } } } /** * 4.完成我的任务 */ @Test public void completePersonalTask(){ String taskId = "1304"; processEngine.getTaskService() //与正在执行的任务管理相关的Service .complete(taskId); System.out.println("完成任务:任务ID:"+taskId); } /** * 5.查询流程状态(判断流程正在执行,还是结束) */ @Test public void isProcessEnd(){ String processInstanceId = "1402"; ProcessInstance pi = processEngine.getRuntimeService() //表示正在执行的流程实例和执行对象 .createProcessInstanceQuery() //创建流程实例查询 .processInstanceId(processInstanceId) //使用流程实例ID查询 .singleResult(); if(pi == null){ System.out.println("流程已经结束"); }else{ System.out.println("流程没有结束"); } } /** * 6.查询历史任务(后面讲) */ @Test public void findHistoryTask(){ String taskAssignee = "海哥"; List<HistoricTaskInstance> list = processEngine.getHistoryService() //与历史数据(历史表)相关的Service .createHistoricTaskInstanceQuery() //创建历史任务实例查询 .taskAssignee(taskAssignee) //指定历史任务的办理人 .list(); if(list !=null && list.size()>0){ for(HistoricTaskInstance hti:list){ System.out.println(hti.getId()+" "+hti.getName()+" "+hti.getProcessInstanceId()+" "+hti.getStartTime()+" "+hti.getEndTime()+" "+hti.getDurationInMillis()); System.out.println("################################"); } } } /** * 7.查询历史流程实例(后面讲) */ @Test public void findHistoryProcessInstance(){ String processInstanceId = "1301"; HistoricProcessInstance hpi = processEngine.getHistoryService() //与历史数据(历史表)相关的Service .createHistoricProcessInstanceQuery() //创建历史流程实例查询 .processInstanceId(processInstanceId) //使用流程实例ID查询 .singleResult(); System.out.println(hpi.getId()+" "+hpi.getProcessDefinitionId()+" "+hpi.getStartTime()+" "+hpi.getEndTime()+" "+hpi.getDurationInMillis()); } }

总结:

Execution   执行对象

 按流程定义的规则执行一次的过程.

 对应的表:

  act_ru_execution: 正在执行的信息

  act_hi_procinst:已经执行完的历史流程实例信息

  act_hi_actinst:存放历史所有完成的活动

ProcessInstance  流程实例

 特指流程从开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有1个

注意

    (1)如果是单例流程,执行对象ID就是流程实例ID

    (2)如果一个流程有分支和聚合,那么执行对象ID和流程实例ID就不相同

    (3)一个流程中,流程实例只有1个,执行对象可以存在多个。

Task 任务

 执行到某任务环节时生成的任务信息。

 对应的表:

  act_ru_task:正在执行的任务信息

  act_hi_taskinst:已经执行完的历史任务信息

转载请注明原文地址: https://www.6miu.com/read-2628949.html

最新回复(0)