1. 程式人生 > >Activiti進階(五)——流程執行歷史記錄

Activiti進階(五)——流程執行歷史記錄

    之前的幾篇文章,為大家簡單的介紹了部署流程定義、啟動流程例項、檢視和辦理個人任務以及如何設定和獲取流程變數,這一系列的活動組成了一個完整的執行流程,那麼一個執行完的流程我們如何檢視相關的定義呢,這篇博文就為大家簡單的介紹一下流程執行的歷史記錄查詢。

一、查詢歷史流程例項

	/**查詢歷史流程例項*/
	@Test
	public void findHisProcessInstance(){	
		List<HistoricProcessInstance> list = processEngine.getHistoryService()
				.createHistoricProcessInstanceQuery()
				.processDefinitionId("testVariables:2:1704")//流程定義ID
				.list();
		
		if(list != null && list.size()>0){
			for(HistoricProcessInstance hi:list){
				System.out.println(hi.getId()+"	  "+hi.getStartTime()+"   "+hi.getEndTime());
			}
		}
	}
     查詢歷史流程例項,就是查詢按照某個流程定義的規則一共執行了多少次流程,對應的資料庫表:act_hi_procinst

     

     從表中我們可以看到,我們可以通過流程例項ID和流程部署ID得到物件的歷史流程例項,從而獲得該例項的開始時間和結束時間及其他一些屬性定義。

二、查詢歷史活動

	/**查詢歷史活動
	 * 問題:HistoricActivityInstance對應哪個表
	 * 問題:HistoricActivityInstance和HistoricTaskInstance有什麼區別*/
	@Test 
	public void findHisActivitiList(){
		String processInstanceId = "1801";
		List<HistoricActivityInstance> list = processEngine.getHistoryService()
				.createHistoricActivityInstanceQuery()
				.processInstanceId(processInstanceId)
				.list();
		if(list != null && list.size()>0){
			for(HistoricActivityInstance hai : list){
				System.out.println(hai.getId()+"  "+hai.getActivityName());
			}
		}
	}
      查詢歷史活動,就是查詢某一次流程的執行一共經歷了多少個活動,這裡我們使用流程定義ID來查詢,對應的資料庫表為:act_hi_actinst



、查詢歷史任務

	/**查詢歷史任務	
	 * 問題:HistoricTaskInstance對應哪個表*/
	@Test
	public void findHisTaskList(){
		String processInstanceId = "1801";
		List<HistoricTaskInstance> list = processEngine.getHistoryService()
				.createHistoricTaskInstanceQuery()
				.processInstanceId(processInstanceId)
				.list();
		if(list!=null && list.size()>0){
			for(HistoricTaskInstance hti:list){
				System.out.println(hti.getId()+"    "+hti.getName()+"   "+hti.getClaimTime());
			}
		}
	}

     查詢歷史任務,就是查詢摸一次流程的執行一共經歷了多少個任務,對應表:act_hi_taskinst



、查詢歷史流程變數

	/**查詢歷史流程變數*/
	@Test
	public void findHisVariablesList(){
		String processInstanceId = "1801";
		List<HistoricVariableInstance> list = processEngine.getHistoryService()
				.createHistoricVariableInstanceQuery()
				.processInstanceId(processInstanceId)
				.list();
		if(list != null && list.size()>0){
			for(HistoricVariableInstance hvi:list){
				System.out.println(hvi.getId()+"    "+hvi.getVariableName()+"	"+hvi.getValue());
			}
		}
	}

     查詢歷史流程變數,就是查詢某一次流程的執行一共設定的流程變數,對應表:act_hi_varinst


     總結:

     由於資料庫中儲存著歷史資訊以及正在執行的流程例項資訊,在實際專案中對已完成任務的檢視頻率遠不及對待辦和執行中的任務的檢視,所以activiti採用分開管理,把正在執行的交給RuntimeService管理,而歷史資料交給HistoryService來管理。