JBPM流程实例(PI)Process Instance

/**
 * 流程实例
 *    *  启动流程实例
 *    *  完成任务
 *    *  查询
 *       *  查询流程实例
 *       *  查询任务
 *          *  查询正在执行的任务
 *             *  查询所有的正在执行的任务
 *             *  根据任务的执行人查询正在执行的任务
 *             *  根据executionId查询正在执行的任务
 *             *  根据piid查询正在执行的任务
 *             *  根据pdid查询正在执行的任务
 *             *  根据taskid查询任务  taskService.getTask(String taskId);和其他的查询不一样
 *          *  查询已经完成的任务
 *             *  查询所有的
 *             *  根据任务的执行人
 *             *  根据executionID
 *             *  .......
 *    *  结束流程实例
 * @author Administrator
 *
 */
public class PITest extends BaseJbpm{
	/**
	 * 涉及到的表
	 *    *  JBPM4_EXECUTION
	 *        *  表示当前正在执行的流程实例
	 *        *  字段 
	 *            DBID_:主键
	 *            ID_:流程实例ID
	 *            ACTIVITYNAME_:当前流程实例活跃的节点
	 *            PROCDEFID_:流程定义ID
	 *    *  JBPM4_HIST_PROCINST
	 *        *  表示历史的流程实例,但是当前正在运行的流程实例也在这里
	 *        *  字段
	 *            DBID_:主键
	 *            ID_:流程实例ID
	 *            START_:整个流程实例的开始时间
	 *            END_:流程实例的结束时间,如果该流程实例为当前正在运行的流程则,该值为空
	 *            STATE:表示流程实例的状态  如果是正在运行,为active  如果流程实例结束  为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("qingjia1-1");
		System.out.println(pi.getId());
		System.out.println(pi.getState());
		
	}
	/**
	 * 根据pdkey启动流程实例,是该key下,最高版本
	 */
	@Test
	public void testStartPIByPDKEY(){
		processEngine.getExecutionService()
		.startProcessInstanceByKey("qingjia1");
	}
	
	/**
	 * 完成任务
	 */
	@Test
	public void testFinishTask(){
		processEngine.getTaskService()
		.completeTask("60002");
	}
	
	/**
	 * 查询所有的流程实例
	 */
	@Test
	public void testQueryAllPI(){
		List<ProcessInstance> piList = processEngine.getExecutionService()
		.createProcessInstanceQuery()
//		/.processDefinitionId("")//可以根据pdid查询流程实例,很多个
		.list();
		for(ProcessInstance pi:piList){
			/**
			 * 可以查询piid,pdid,state等
			 */
			System.err.println();
			System.err.print("instanceID"+pi.getId());
			System.err.print("\t\t\tinstanceKEY"+pi.getKey());
			System.err.print("\t\t\tinstanceNAME"+pi.getName());
			System.err.println("\t\t\tinstanceSTATE"+pi.getState());
		}
	}
	
	/**
	 * 查询所有的正在执行的任务
	 */
	@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("qingjia1-4")
		.list();
		System.out.println(taskList.size());
	}
	
	/**
	 * Execution
	 *    *  如果不存在并发的情况,那么exection和process instance是一样的
	 *    *  如果存在并发的情况,execution代表分支,process instance代表主线
	 *    *  根据executionID查询任务,有唯一的一个
	 */
	
	@Test
	public void testQueryTaskByTaskID(){
		Task task = processEngine.getTaskService()
		.getTask("60002");
		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.getEndTime());
			System.out.println(histTask.getAssignee());
		}
	}
	
	/**
	 * 直接结束流程实例
	 */
	@Test
	public void testEndPI(){
		processEngine.getExecutionService()
		.endProcessInstance("qingjia1.20001", "error");
	}
	
	/**
	 * 根据 piid查询流程实例,如果查询出来的结果为null,说明该流程实例已经结束了
	 */
	@Test
	public void testIsEndPI(){
		ProcessInstance pi = processEngine.getExecutionService()
		.createProcessInstanceQuery()
		.processInstanceId("qingjia1.60001")
		.uniqueResult();
		System.out.println(pi);//如果该值为null,说明该流程实例已经结束了
	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值