/**
 * 流程实例
 *    *  启动流程实例
 *    *  完成任务
 *    *  查询
 *      *  查询流程实例
 *      *  查询任务
 *          *  查询正在执行的任务
 *            *  查询所有的正在执行的任务
 *            *  根据任务的执行人查询正在执行的任务
 *            *  根据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,说明该流程实例已经结束了
 }
}

JBPM流程实例(PI)Process Instance的更多相关文章

  1. 揭秘jbpm流程引擎内核设计思想及构架

    揭秘jbpm流程引擎内核设计思想及构架 作者 胡长城(银狐999)   1     前言 2     阅读本篇的基础准备 2.1      概念的基础 2.2      环境的基础 3     什么是 ...

  2. JBPM工作流(八)——流程实例(PI)Process Instance

    /** * 流程实例 *    *  启动流程实例 *    *  完成任务 *    *  查询 *      *  查询流程实例 *      *  查询任务 *          *  查询正在 ...

  3. JBPM学习(四):执行流程实例

    概念: ProcessInstance,流程实例:代表流程定义的一次执行.如:张三昨天按请假流程请了一次假.一个流程实例包括了所有运行阶段,其中最典型的属性就是跟踪当前节点的指针,如下图. Execu ...

  4. JBPM工作流(五)——执行流程实例

    概念: ProcessInstance,流程实例:代表流程定义的一次执行.如:张三昨天按请假流程请了一次假.一个流程实例包括了所有运行阶段,其中最典型的属性就是跟踪当前节点的指针,如下图. Execu ...

  5. JBPM学习(四):运行流程实例

    概念: ProcessInstance,流程实例:代表流程定义的一次执行.如:张三昨天按请假流程请了一次假.一个流程实例包含了全部执行阶段,当中最典型的属性就是跟踪当前节点的指针,例如以下图. Exe ...

  6. jBPM学习之利用API完成流程实例

    流程引擎对象ProcessEngine是jBPM4所有的Service API之源.在jBPM4中各种服务相互依存,但所有的Service API都从ProcessEngine中获得,由此可见Proc ...

  7. 工作流学习——Activiti流程实例、任务管理四步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46646565 ***************************************** ...

  8. JBPM4.4_执行流程实例

    1. 执行流程实例 1.1. 启动流程实例 说明:流程实例创建后,直接就到开始活动后的第一个活动,不会在开始活动停留. 1.1.1. 示例代码1:使用指定key的最新版本的流程定义启动流程实例 Pro ...

  9. Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】

    上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]- 管理流程定义 管理流程定义主要涉及到以下的4张表: -- 流程部署相关的表 SEL ...

随机推荐

  1. Oracle的登录操作

    在完美的启动Oracle数据库之后就可以登录数据库了: 1. 首先登录时使用的用户名默认是“SYSTEM”密码是你安装的时候自行设置的. 登录使用的命令是“sqlplus / as sysdba”之后 ...

  2. 双缓冲(Double Buffer)原理和使用

    转自双缓冲(Double Buffer)原理和使用 一.双缓冲作用            双缓冲甚至是多缓冲,在许多情况下都很有用.一般需要使用双缓冲区的地方都是由于"生产者"和& ...

  3. UNICODE并没有提供对诸如Braille, Cherokee, Ethiopic, Khmer, Mongolian, Hmong, Tai Lu, Tai Mau文字的支持

    UNICODE支持欧洲.非洲.中东.亚洲(包括统一标准的东亚象形汉字和韩国象形文字).但是,UNICODE并没有提供对诸如Braille, Cherokee, Ethiopic, Khmer, Mon ...

  4. 【Linux安全】防止任意用户使用 su 切换到 root

    防止任意用户使用 su 切换到 root 在终端中输入下列命令 vim /etc/pam.d/su (按 i 进行编辑,qw 保存并推出) 在头部加入行: auth required pam_whee ...

  5. laravel 模板 blade

    控制器布局 在Laravel框架中使用模板的一种方法就是通过控制器布局.通过在控制器中指定 layout 属性,对应的视图会被创建并且作为请求的默认返回数据. 在控制器中定义一个布局 class Us ...

  6. C#中的泛型详解

    泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...

  7. hdu4632Palindrome subsequence

    http://acm.hdu.edu.cn/showproblem.php?pid=4632 TLE了N次 原因居然是取模次数太多了..! 这数据卡的好紧 还是我写的太搓..828ms挤过 s[i]= ...

  8. BASE64编码规则及C#实现

    一.编码规则      Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24位数据,再把这24位数据分成4组 ...

  9. 【转】plist文件的内容清空

    原文网址:http://zhidao.baidu.com/link?url=3aQGrNnqL2UgQ3UW_RWJJq0ADBmY8zQrpy09j6ScDZEAOd87f-D4bAABog5RFS ...

  10. [Tommas] UNION 和 UNION ALL 的区别

    UNION指令的目的是将两个 SQL 语句的结果合并起来.从这个角度来看,UNION跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料.UNION的一个限制是两个 SQL 语句所产生的 ...