首页 > 代码库 > 流程实例

流程实例

  1 package com.kite.pi;
  2 
  3 import java.util.List;
  4 
  5 import org.jbpm.api.Configuration;
  6 import org.jbpm.api.ProcessInstance;
  7 import org.jbpm.api.history.HistoryTask;
  8 import org.jbpm.api.task.Task;
  9 import org.junit.Test;
 10 /**
 11  * 流程实例
 12  *         * 启动流程实例
 13  *         * 完成任务
 14  *         * 查询
 15  *             * 查询流程实例
 16  *             * 查询任务
 17  *                 * 查询正在执行的任务
 18  *                     * 查询所有政治啊执行的任务
 19  *                     * 根据任务的执行人查询正在执行的任务
 20  *                     * 根据executionid查询正在执行的任务
 21  *                     * 根据piid查询正在执行的任务
 22  *                     * 根据pdid查询正在执行的任务
 23  *                     * 根据taskid查询任务  taskService.getTask(string taskid) 和其他的查询不一样
 24  *                 * 查询已经完成的任务
 25  *                     * 查询所有的
 26  *                     * 根据任务的执行人
 27  *                     * 根据executionid
 28  *                     * ....
 29  *         *  结束流程实例
 30  * @author admin
 31  *
 32  */
 33 public class PITest {
 34 
 35     /**
 36      * 涉及到的表
 37      *             JBPM4_EXECUTION
 38      *                  *  表示当前正在执行的流程实例
 39      *                  *  字段 
 40      *                     DBID_:主键
 41      *                     ID_:流程实例ID
 42      *                     ACTIVITYNAME_:当前流程实例活跃的节点
 43      *                     PROCDEFID_:流程定义ID
 44      *             JBPM4_HIST_PROCINST
 45      *                 *  表示历史的流程实例,但是当前正在运行的流程实例也在这里
 46      *                 *  字段
 47      *                     DBID_:主键
 48      *                     ID_:流程实例ID
 49      *                     START_:整个流程实例的开始时间
 50      *                     END_:流程实例的结束时间,如果该流程实例为当前正在运行的流程则,该值为空
 51      *                     STATE:表示流程实例的状态  如果是正在运行,为active  如果流程实例结束  为ended
 52      *             JBPM4_TASK
 53      *                 *  表示当前正在执行的任务
 54      *                      说明:任务是jbpm流程图的一个节点
 55      *                *  字段
 56      *                    DBID_:主键、任务ID
 57      *                    NAME_:任务名称
 58      *                    ASSIGNEE_:任务的执行人
 59      *             JBPM4_HIST_TASK
 60      *                 *  表示历史的任务,但是当前正在执行的任务也在这里
 61      *                 *  字段
 62      *                     STATE_:如果一个任务被完成以后,值为completed
 63      *                     end_:任务的结束时间有值了
 64      *             JBPM4_HIST_ACTINST
 65      *                 *  表示历史的节点
 66      *                 *  字段
 67      *                      TYPE_:节点类型
 68      * ------------------------------------------------------------------------------
 69      *             说明:
 70      *                  *  当启动流程实例的时候,会自动的离开开始节点,流向下一个节点
 71      *                 *  jbpm4_task为临时表,当当前的任务完成以后,该数据就被删除了
 72      */
 73     
 74     /**
 75      * 根据pdid启动流程实例
 76      */
 77     @Test
 78     public void testStartPIByPDID(){
 79         ProcessInstance processInstance =  Configuration.getProcessEngine().getExecutionService()
 80         .startProcessInstanceById("qingjia1-1");
 81         System.out.println(processInstance.getId());
 82         System.out.println(processInstance.getState());
 83     }
 84     
 85     /**
 86      * 根据pdkey启动流程实例,是该key下,最高版本
 87      */
 88     @Test
 89     public void testStartPIByPDKEY(){
 90         ProcessInstance processInstance =  Configuration.getProcessEngine().getExecutionService()
 91         .startProcessInstanceByKey("qingjia1");
 92         System.out.println(processInstance.getId());
 93         System.out.println(processInstance.getState());
 94     }
 95     
 96     /**
 97      * 完成任务  当完成任务执行完成以后会走向下一个任务流程
 98      */
 99     @Test
100     public void testFinishTask(){
101         Configuration.getProcessEngine().getTaskService()
102         .completeTask("60001");
103     }
104     
105     
106     /**

107      * 查询所有的流程实例
108      */
109     @Test
110     public void testQueryAllPI(){
111         List<ProcessInstance> pIList =  Configuration.getProcessEngine().getExecutionService()
112         .createProcessInstanceQuery().list();
113         
114         for(ProcessInstance processInstance : pIList){
115             System.out.print(processInstance.getId() + ",");
116             System.out.println(processInstance.getState() );
117         }
118     }
119     
120     /**
121      * 查询正在执行的任务
122      */
123     @Test
124     public void testQueryAllTask(){
125         List<Task> taskList =  Configuration.getProcessEngine().getTaskService()
126         .createTaskQuery()
127         .list();
128         for(Task task : taskList){
129             System.out.println("执行人:" + task.getAssignee());
130             System.out.println("当前执行任务的名称:" + task.getName());
131             System.out.println("任务创建时间:" + task.getCreateTime());
132         }
133     }
134     
135     /**
136      * 可以根据任务的执行人查询当前正在执行的任务
137      * 可以根据pdid查询当前正在执行的任务
138      */
139     @Test
140     public void testQueryTaskPDID(){
141         /*Task task =  Configuration.getProcessEngine().getTaskService()
142         .createTaskQuery()
143         .assignee("李四").uniqueResult();
144         */
145         List<Task> taskList = Configuration.getProcessEngine().getTaskService()
146         .createTaskQuery().processDefinitionId("qingjia-1").list();
147         
148         
149         for(Task task : taskList){
150             System.out.println("执行人:" + task.getAssignee());
151             System.out.println("当前执行任务的名称:" + task.getName());
152             System.out.println("任务创建时间:" + task.getCreateTime());
153             
154         }
155     }
156     /**
157      * excution
158      *         *如果存在并发的情况,那么execution和process instance 是一样的
159      *         *如果存在并发的情况,execution代表分支,processinstance代表主线
160      *         *根据executionid查询任务,有唯一的一个
161      */
162     /**
163      * 根据taskid查询任务
164      */
165     @Test
166     public void testQueryTaskByID(){
167         Task task = Configuration.getProcessEngine()
168         .getTaskService()
169         .getTask("60002");
170         
171         System.out.println(task.getId());
172         System.out.println("执行人:" + task.getAssignee());
173         System.out.println("当前执行任务的名称:" + task.getName());
174         System.out.println("任务创建时间:" + task.getCreateTime());
175         
176     }
177     
178     /**
179      * 查询已经完成的所有任务
180      */
181     @Test
182     public void testQueryAllHistTask(){
183         List<HistoryTask> historyTaskLisTasks = Configuration.getProcessEngine()
184         .getHistoryService()
185         .createHistoryTaskQuery()
186         //.executionId("")  可以根据 executionid查询已经完成的任务
187         //.assignee("") 可以根据执行人进行查询
188         .state("completed")  //根据状态进行查询
189         .list();
190         
191         for(HistoryTask historyTask : historyTaskLisTasks){
192             System.out.println(historyTask.getId());
193             System.out.println(historyTask.getEndTime());
194         }
195     }
196     
197     /**
198      * 直接结束实例
199      */
200     @Test
201     public void testEndPI(){
202         Configuration.getProcessEngine().getExecutionService()
203         .endProcessInstance("qingjia.30001", "error");
204     }
205 }