package cn.jbpm.pi;
import java.util.List;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.history.HistoryTask;
import org.jbpm.api.task.Task;
import org.junit.Test;
import cn.itcast.jbpm.utils.BaseJbpm;
public class PITest extends BaseJbpm{
/**
* 涉及到得表
* JBPM4_EXECUTION:表示当前正在执行的流程实例
* 字段:
* DBID_:主键
* ID_:流程实例ID
* ACTIVITYNAME_:当前流程实例活跃的节点
* PROCDEFID_:流程定义ID
* JBPM4_HIST_PROCINST:表示历史的流程实例,但是当前正在运行的流程实例也在这里
* 字段:
* DBID_:主键
* ID_:流程实例ID
* START_:整个流程实例开始时间
* END_:流程实例的结束时间,如果该流程实例为当前正在运行的流程实例,该值为空
* STATE:表示流程实例的状态 ,如果是正在运行,为sctive,如果流程实例结束 为ended
* JBPM4_TASK:表示当前正在执行的任务
* 说明:任务是jbpm流程图的一个节点
* 字段:
* DBID_:主键、任务ID
* NAME_:任务名称
* ASSIGNEE_:任务的执行人
* JBPM4_HIST_TASK:表示历史的任务,但是当前正在执行的任务也在这里
* 字段:
* STATE:如果一个任务被完成以后,值为completed
* end_:任务的结束时间有值了
* JBPM4_HIST_ACTINST:表示历史的节点
* 字段:
* TYPE_:节点类型
* 说明:当启动流程实例的时候,会自动的离开开始节点,流向下一个节点
* jbpm4_task为临时表,当当前的任务完成以后,该数据就被删除了
*/
@Test
public void testStartPIByPDID(){
ProcessInstance pi = processEngine.getExecutionService()
.startProcessInstanceById("qingjia-3");
System.out.println(pi.getId());
System.out.println(pi.getState());
}
/**
* 根据pdkey启动流程实例,是该key下,最高版本
*/
@Test
public void testStartPIByPDKEY(){
processEngine.getExecutionService()
.startProcessInstanceByKey("qingjia");
}
/**
* 完成任务 去JBPM4_HIST_TASK可以车看完成的任务
*/
@Test
public void testFinishTask(){
processEngine.getTaskService()
.completeTask("30002");
}
/**
* 查询所有的流程实例
*/
@Test
public void testQueryAllPI(){
List<ProcessInstance> piList = processEngine.getExecutionService()//获取执行的服务
.createProcessInstanceQuery()//创建流程实例查询
// /.processDefinitionId("")//可以根据pdid查询流程实例,很多个
.list();
for(ProcessInstance pi:piList){
/**
* 可以查询piid,pdid,state等
*/
//System.out.println(pi.getProcessInstance().getName());
System.out.println(pi.getState());//获取流程实例的状态
System.out.println(pi.getKey());
}
}
/**
* 查询所有的正在执行的任务
*/
@Test
public void testQueryAllTask(){
List<Task> taskList = processEngine.getTaskService()//获取任务服务
.createTaskQuery()//创建任务查询
// .processDefinitionId("")
.list();
for(Task task:taskList){
System.out.println("assignee: " + task.getAssignee());//获取任务查询人
System.out.println("name: " + task.getName());//获取任务名称
System.out.println("createtime: " + task.getCreateTime());//获取任务创建时间
}
}
/**
* 可以根据任务的执行人查询当前正在执行的任务
* 可以根据pdid查询当前正在执行的任务
*/
@Test
public void testQueryTaskByPDID(){
List<Task> taskList = processEngine.getTaskService()//获取任务服务
.createTaskQuery()//创建任务查询
.processDefinitionId("qingjia-1")
.list();
System.out.println(taskList.size());
}
/**
* Execution
* * 如果不存在并发的情况,那么exection和process instance是一样的
* * 如果存在并发的情况,execution代表分支,process instance代表主线
* * 根据executionID查询任务,有唯一的一个
*/
@Test
public void testQueryTaskByTaskID(){
Task task = processEngine.getTaskService()
.getTask("60001");//根据任务的id获取任务 DBID为主键
System.out.println(task.getName());
}
/**
* 查询已经完成的所有的任务
*/
@Test
public void testQueryAllHistTask(){
List<HistoryTask> histTaskList = processEngine.getHistoryService()//获取历史服务
.createHistoryTaskQuery()//创建历史任务查询
//.assignee("") 可以根据任务的执行人查询已经完成的任务
//.executionId("")可以根据executionID查询已经完成的任务
.state("completed")
.list();
for(HistoryTask histTask:histTaskList){
System.out.println(histTask.getAssignee());
System.out.println(histTask.getEndTime());//打印出任务结束的时间
}
}
/**
* 直接结束流程实例
*/
@Test
public void testEndPI(){
processEngine.getExecutionService()
.endProcessInstance("qingjia.70001", "error");
}
/**
* 根据 piid查询流程实例,如果查询出来的结果为null,说明该流程实例已经结束了
*/
@Test
public void testIsEndPI(){
ProcessInstance pi = processEngine.getExecutionService()
.createProcessInstanceQuery()
.processInstanceId("qingjia.70001")
.uniqueResult();
System.out.println(pi);//如果该值为null,说明该流程实例已经结束了
}
}
Jbpm笔记之二 -- 流程实例-任务
最新推荐文章于 2018-10-28 19:55:00 发布