1. 程式人生 > >判斷流程例項狀態、歷史流程例項查詢、歷史活動查詢

判斷流程例項狀態、歷史流程例項查詢、歷史活動查詢

判斷流程例項狀態、歷史流程例項查詢、歷史活動查詢

標籤(空格分隔): activiti


1.判斷流程例項狀態

下面是一個示例程式碼:
/**
* 獲取預設流程引擎例項,會自動讀取activiti.cfg.xml文字
*/
private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();

/**
 * 部署流程定義
 */
@Test
public void deploy(){
    Deployment deployment=processEngine.getRepositoryService()//獲取部署相關Service
            .createDeployment() //建立部署物件
            .addClasspathResource("diagrams/HelloWorld.bpmn") //載入資原始檔
            .addClasspathResource("diagrams/HelloWorld.png")
            .name("HelloWorld流程")
            .deploy(); //部署

    System.out.println("流程部署ID:"+deployment.getId());
    System.out.println("流程部署Name:"+deployment.getName());
}

上述程式碼首先部署了流程,接下來啟動流程例項:
@Test
public void start() {
ProcessInstance pi=processEngine.getRuntimeService()//執行時Service
.startProcessInstanceByKey(“myFirstProcess”);//流程定義表的KEY欄位
System.out.println(“流程例項ID:”+pi.getId());
System.out.println(“流程定義ID:”+pi.getProcessDefinitionId());
}

啟動後可得到這個啟動的流程的流程例項ID,最後就是我們本次討論的查詢流程例項狀態:
    /**
 * 查詢流程例項狀態
 * 
 */
@Test
public void processState(){
    ProcessInstance pi=processEngine.getRuntimeService() //獲取執行時service
        .createProcessInstanceQuery() //建立流程例項查詢
        .processInstanceId("37501") //用流程例項id查詢
        .singleResult();

    if(pi != null){
        System.out.println("流程正在執行!");
    }
    else{
        System.out.println("流程已經結束!");
    }
}

通過查詢流程例項ID來查詢對應的流程例項,如果流程例項不為空,則說明流程正在執行,如果流程例項為空,說明流程已經結束,和流程結束後,所有執行時的表都被清空有關。

2.歷史流程例項(任務)查詢
/**
* 查詢歷史任務
*
*/
@Test
public void historyTaskList(){
List list=processEngine.getHistoryService() //歷史相關service
.createHistoricTaskInstanceQuery() //建立歷史任務例項查詢
.processInstanceId(“12504”) //用流程例項id查詢
.finished() //查詢已經完成的任務
.list();

    for(HistoricTaskInstance hti:list){
        System.out.println("任務ID:"+hti.getId());
        System.out.println("流程例項ID:"+hti.getProcessInstanceId());
        System.out.println("任務名稱:"+hti.getName());
        System.out.println("辦理人:"+hti.getAssignee());
        System.out.println("開始時間:"+hti.getStartTime());
        System.out.println("結束時間:"+hti.getEndTime());
    }
}

上述程式碼查詢流程的所有任務資訊。

3。歷史活動查詢
程式碼如下:
/**
* 歷史活動查詢
*
*/
@Test
public void historyActInstanceList(){
List list=processEngine.getHistoryService() //歷史相關service
.createHistoricActivityInstanceQuery() //建立歷史活動例項查詢
.processInstanceId(“12504”) //用流程例項id查詢
.finished() //查詢已經完成的任務
.list();

    for(HistoricActivityInstance hai:list){
        System.out.println("活動ID:"+hai.getId());
        System.out.println("流程例項ID:"+hai.getProcessInstanceId());
        System.out.println("活動名稱:"+hai.getActivityName());
        System.out.println("辦理人:"+hai.getAssignee());
        System.out.println("開始時間:"+hai.getStartTime());
        System.out.println("結束時間:"+hai.getEndTime());
    }
}

活動包括任務,還包括start,end這兩個節點,所以輸出內容更多。

這幾個工作流的查詢介面都是去工作流表中進行查詢的。