ProcessInstance代表流程定義的執行實例。如范冰冰請了一天的假,她就必須發出一個流程實例的申請。一個流程實例包括了所有的運行節點。我們可以利用這個對象來了解當前流程實例的進度等信息。
package com.liuzm.activiti.day1;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceQuery;
import org.activiti.engine.task.Task;
import org.junit.Test;
//ProcessInstance(流程實例) : 按照某規則,一次實際的執行
public class ProcessInstanceTest {
// 獲取核心ProcessEngine類
private ProcessEngine processEngine = ProcessEngines
.getDefaultProcessEngine();
// 1. 啓動流程
@Test
public void startProcess() throws Exception {
// 獲取服務對象
RuntimeService runtimeService = processEngine.getRuntimeService();
// 通過ID啓動流程,可以指定啓動一個流程
// runtimeService.startProcessInstanceById(processDefinitionId)
// 通過key啓動流程,可以自動啓動最新版本的那一個規則
String processDefinitionKey = "myProcess";
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance);
}
// 2. 查看任務(私有)
@Test
public void queryPersonalTask() throws Exception {
// 獲取服務
TaskService taskService = processEngine.getTaskService();
//
String assignee = "範爺";
List<Task> list = taskService.createTaskQuery().taskAssignee(assignee)
.list();
System.out.println("=================【" + assignee
+ "】的私有任務列表======================================");
for (Task task : list) {
System.out.println("id:" + task.getId() + ",name:" + task.getName()
+ ",assignee:" + task.getAssignee() + ",createTime:"
+ task.getCreateTime());
}
}
// 共有任務查看
@Test
public void queryCommonTask() throws Exception {
TaskService taskService = processEngine.getTaskService();
// 查詢
String candidateUser = "範爺助理";
List<Task> list = taskService.createTaskQuery()
.taskCandidateUser(candidateUser).list();
System.out.println("=================【" + candidateUser
+ "】的公有任務列表======================================");
for (Task task : list) {
System.out.println("id:" + task.getId() + ",name:" + task.getName()
+ ",assignee:" + task.getAssignee() + ",createTime:"
+ task.getCreateTime());
}
}
// 3. 認領任務
@Test
public void claimTask() throws Exception {
TaskService taskService = processEngine.getTaskService();
//
String taskId = "504";
String userId = "範爺經紀人";
taskService.claim(taskId, userId);
}
// 4. 辦理任務
@Test
public void completeTask() throws Exception {
TaskService taskService = processEngine.getTaskService();
// 辦理任務
String taskId = "504";
taskService.complete(taskId);
}
// 5. 查看流程的狀態
@Test
public void viewProcessState() throws Exception {
// 獲取服務
RuntimeService runtimeService = processEngine.getRuntimeService();
// 獲得流程實例
ProcessInstanceQuery query = runtimeService
.createProcessInstanceQuery();
// 添加查詢條件
String processDefinitionId = "1701";
query.processDefinitionId(processDefinitionId);
// 查詢
ProcessInstance singleResult = query.singleResult();
// 顯示流程狀態
if (singleResult != null) {
System.out.println("當前流程在: " + singleResult.getActivityId());
} else {
System.out.println("流程已經結束!");
}
}
}