前言
上一篇中我們將工作流啓動,獲得了流程實例,本篇在上一篇的基礎上再寫幾個常用的方法。
幾個常用方法
1.查詢流程實例
@Test
public void queryProcessInstance(){
String processDefintionKey = "activiti_leave";
//創建流程實例查詢對象
ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
List<ProcessInstance> processInstanceList = processInstanceQuery
.processDefinitionKey(processDefintionKey)
.orderByProcessDefinitionKey()
.desc()
.list();
for(ProcessInstance processInstance : processInstanceList){
System.out.println("流程實例ID:"+processInstance.getId());
System.out.println("正在活動的節點ID:"+processInstance.getActivityId());//正在活動的流程節點
System.out.println(""+processInstance.getProcessDefinitionId());//正在活動的流程節點
}
//如果能夠確定是單個實例,可以用以下方法
// ProcessInstance processInstance = processInstanceQuery
// .processDefinitionKey(processDefintionKey).singleResult();
//
// System.out.println("流程實例ID:"+processInstance.getId());
// System.out.println("正在活動的節點ID:"+processInstance.getActivityId());//正在活動的流程節點
// System.out.println(""+processInstance.getProcessDefinitionId());//正在活動的流程節點
}
2.查詢流程定義-通過id查詢
@Test
public void queryProcessDefinitionById(){
// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService repositoryService = processEngine.getRepositoryService();
String processDefinitionId = "activiti_leave:1:4";
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId)
.singleResult();
System.out.println("流程定義的Id:"+processDefinition.getId());
System.out.println("流程定義的key:"+processDefinition.getKey());
System.out.println("流程定義的名字:"+processDefinition.getName());
System.out.println("流程定義的資源文件名:"+processDefinition.getResourceName());
}
3.查詢流程定義-通過key查詢
@Test
public void queryProcessDefinitionByKey(){
// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService repositoryService = processEngine.getRepositoryService();
String processDefinitionKey = "activiti_leave";
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(processDefinitionKey)
.singleResult();
System.out.println("流程定義的Id:"+processDefinition.getId());
System.out.println("流程定義的key:"+processDefinition.getKey());
System.out.println("流程定義的名字:"+processDefinition.getName());
System.out.println("流程定義的資源文件名:"+processDefinition.getResourceName());
}
4.根據辦理人查詢他的全部任務
@Test
public void queryTaksByAssignee(){
String assignee = "employee";
List<Task> taskList = taskService.createTaskQuery()//創建任務 查詢對象
.processDefinitionKey("activiti_leave")//根據流程定義key查詢
.taskAssignee(assignee)//根據辦理人查詢
.orderByTaskCreateTime()
.desc()
.list();
for(Task task : taskList){
System.out.println("任務的ID:"+task.getId());
System.out.println("任務的名字:"+task.getName());
System.out.println("任務的創建時間:"+task.getCreateTime());
System.out.println("辦理人:"+task.getAssignee());
}
}
5.查詢正在執行的流程對象
@Test
public void queryExecution(){
List<Execution> executionList = runtimeService.createExecutionQuery()//創建正在執行的流程對象的查詢對象
.processDefinitionKey("activiti_leave")//根據流程定義的key查詢
.list();
for (Execution execution : executionList) {
System.out.println("正在執行的流程對象Id:"+execution.getId());
System.out.println("正在活動的節點Id:"+execution.getActivityId());
System.out.println("所屬流程實例Id:"+execution.getProcessInstanceId());
}
}
6.辦理完成任務
/**辦理任務流程沒有結束時
* act_ru_execution --正在活動的ACT_ID指到下一個節點
* act_hi_procinst --如果不是最後一個節點沒有變化
* act_ru_task --刪除當前實例上一步的任務,產生當前的任務
* act_hi_taskinst --增加一條當前任務的數據
* act_hi_actinst --增加一條當前任務的數據
*/
/**辦理任務流程結束時
* act_ru_execution --正在運行的流程對象消失
* act_hi_procinst --歷史的流程實例完成,endtime出現。
* act_ru_task --當前實例的任務消失
* act_hi_taskinst --沒有變化
* act_hi_actinst --增加一個結束的活動endevent
*/
@Test
public void completeTaksByAssignee(){
String assignee = "employee";
List<Task> taskList = taskService.createTaskQuery()//創建任務 查詢對象
.processDefinitionKey("activiti_leave")//根據流程定義key查詢
.taskAssignee(assignee)//根據辦理人查詢
.orderByTaskCreateTime()
.desc()
.list();
//獲取第一個任務
Task task = taskList.get(0);
//使用任務服務接口來辦理任務
taskService.complete(task.getId());
}
7.流程狀態查詢
@Test
public void queryProcessInstanceState(){
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId("201")
.singleResult();
if(processInstance == null){
System.out.println("當前流程已經完成");
}else{
System.out.println("當前流程實例ID:"+processInstance.getId());
System.out.println("當前流程所處的位置:"+processInstance.getActivityId());
}
}