zoukankan      html  css  js  c++  java
  • 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(" instanceKEY"+pi.getKey());
       System.err.print(" instanceNAME"+pi.getName());
       System.err.println(" instanceSTATE"+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,说明该流程实例已经结束了
     }
    }

  • 相关阅读:
    android.database.sqlite.SQLiteException: no such column: aaa (code 1): , while compiling: DELETE FROM users WHERE user_name=aaa解决办法
    安卓开发经常闪退的原因及解决方法
    pycharm破解
    解决命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)
    Request.Params
    MVC查找排序分页学习
    js jq输入框中按回车触发提交事件,用户在页面输入后按回车(Enter键)进行
    前端入门1-基础概念
    系统应用集成过程中的一些坑
    继续封装个 Volley 组件
  • 原文地址:https://www.cnblogs.com/HHR-SUN/p/7236491.html
Copyright © 2011-2022 走看看