Activiti学习笔记4 — 流程实例化

1、创建流程引擎对象

private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

2、启动流程

    流程启动后会更新以下二张表:act_ru_execution和act_ru_task各产生一条记录 

1 // 获取服务对象的实例
2         RuntimeService runtimeService = processEngine.getRuntimeService();
3 
4         String processDefinitionKey = "leaveflow";
5         // 自动执行与Key相对应的流程的最高版本
6         ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
7 
8         logger.info("Id:" + processInstance.getId());
9         logger.info("ActivitiId:" + processInstance.getActivityId());
View Code

 3、查看任务

3.1、查看私有任务 

 1 // 1、获取服务对象的实例
 2         TaskService taskService = processEngine.getTaskService();
 3 
 4         // 2、查询
 5         // 2.1、创建查询对象
 6         TaskQuery query = taskService.createTaskQuery();
 7         // 2.2、配置查询对象
 8         // String assignee = "employee";
 9         String assignee = "manager";
10         query
11                 // 过滤条件
12                 .taskAssignee(assignee)
13                 // 排序条件
14                 .orderByTaskCreateTime().desc();
15                 // 分页条件
16                 // .listPage(firstResult, maxResults)
17 
18         // 2.3、执行查询
19         List<Task> tasks = query.list();
20 
21         for (Task task : tasks) {
22             logger.info("Id:" + task.getId());
23             logger.info("Name:" + task.getName());
24             logger.info("Category:" + task.getCategory());
25             logger.info("Description:" + task.getDescription());
26             logger.info("Assignee:" + task.getAssignee());
27             logger.info("CreateTime:" + task.getCreateTime());
28         }
View Code

3.2、查看共有任务

在流程定义中使用candidateUser属性,发布任务后会在act_ru_identitylink表产生对应的记录 

 1 // 1、获取服务对象的实例
 2         TaskService taskService = processEngine.getTaskService();
 3 
 4         // 2、查询
 5         // 2.1、创建查询对象
 6         TaskQuery query = taskService.createTaskQuery();
 7         // 2.2、配置查询对象
 8         //String candidateUser = "张三";
 9         //String candidateUser = "李四";
10         
11         //String candidateUser = "李经理";
12         String candidateUser = "赵经理";
13         query
14                 // 过滤条件
15                 .taskCandidateUser(candidateUser)
16                 // 排序条件
17                 .orderByTaskCreateTime().desc();
18                 // 分页条件
19                 // .listPage(firstResult, maxResults)
20 
21         // 2.3、执行查询
22         List<Task> tasks = query.list();
23 
24         for (Task task : tasks) {
25             logger.info("Id:" + task.getId());
26             logger.info("Name:" + task.getName());
27             logger.info("Category:" + task.getCategory());
28             logger.info("Description:" + task.getDescription());
29             logger.info("Assignee:" + task.getAssignee());
30             logger.info("CreateTime:" + task.getCreateTime());
31         }
View Code

4、认领任务 

1 // 1、获取服务对象的实例
2         TaskService taskService = processEngine.getTaskService();
3         String taskId = "37502";
4         String userId = "赵经理";
5         taskService.claim(taskId, userId);
View Code

5、完成任务 

1 // 1、获取服务对象的实例
2         TaskService taskService = processEngine.getTaskService();
3         // 2、完成任务
4         String taskId = "37502";
5         taskService.complete(taskId);
View Code

6、查看流程状态 

 1 // 1、获取服务对象的实例
 2         RuntimeService runtimeService = processEngine.getRuntimeService();
 3         //查询
 4         // 2.1、创建查询对象
 5         ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
 6         String processInstanceId = "35001";
 7         ProcessInstance processInstance = query.processInstanceId(processInstanceId).singleResult();
 8         
 9         if (processInstance != null) {
10             logger.info(processInstance.getId());
11             logger.info(processInstance.getActivityId());
12         } else { 
13             logger.info("流程已结束!");
14             //HistoryService historyService = processEngine.getHistoryService();
15             
16         }
View Code

7、ProcessInstance的4个特点:

1、一个流程只有一个流程实例。

2、一个流程中,流程实例的ID不会变。

3、流程实例永远指向当前活动的节点

4、流程实例是一个特殊的执行对象(Execution)

4.1、如果是单线流程,流程实例和执行对象是同一个;

4.2、如是是并发流程,流程会在分支处产生一个Root级别的执行对象作为ProcessInstance,而分支下的每一个活动节点,都会分别产生一个Execution对象挂在Root下。 

8、流程整改的方式:

1、如果老流程没有太大的问题,那么老流程按照老规则流程,新流程按照新规则流转。

2、如果老流程有严重问题,废除老流程,所有的都按照新规则重新执行。

 

 

注:流程没有修改操作

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/maocs/p/5009780.html