設置認證用戶
identityService.setAuthenticatedUserId("用戶ID");
在流程開始之前設置,會自動在表ACT_HI_PROCINST 中的START_USER_ID_中設置用戶ID:
用來設置啟動流程的人員ID,引擎會自動把用戶ID保存到activiti:initiator中
1 //流程發起前設置發起人,記錄在流程歷史中 2 identityService.setAuthenticatedUserId("kitty"); 3 //開始流程 4 runtimeService.startProcessInstanceByKey("XML中的ID"); 5 //查詢流程發起人 6 logger.info(historyService.createHistoricProcessInstanceQuery() 7 .startedBy("ketty").singleResult().getProcessDefinitionId());
// 根據用戶查詢用戶有權限開啟的流程定義
processDefinitionQuery.startableByUser("用戶ID");
動態指定任務辦理人
手動設置任務辦理人
1 <usertask id="hrAudit" name="人事審批" activiti:assignee="${hrUserId}"></usertask>
動態指定任務辦理人,只要在任務完成的時候傳遞activiti:assignee屬性中的變量即可
1 Map<String, Object> variables = new HashMap<String, Object>(); 2 3 variables.put("hrUserId", hrUserId); 4 5 taskService.complete(taskId, variables);
自動設置任務辦理人
下面的代碼是利用initiator功能,設置一個名稱(不是變量而是變量名)到啟動事件上,並且在啟動流程時調用一些下面的方法:
1 identityService.setAuthenticatedUserId(currentUserId);
其中currentUserId表示當前用戶,也就是啟動流程的人,配置如下所示:
1 <startevent id="startevent1" name="Start" activiti:initiator="applyUserId"></startevent>
2 <usertask id="reportBack" name="銷假" activiti:assignee="${applyUserId}"></usertask>
這樣流程啟動之后如果任務流轉至"銷假"節點則會自動把任務分配給啟動流程的人。
獲取流程發起人
如果在啟動流程的時候調用了下面的代碼:
1 identityService.setAuthenticatedUserId(currentUserId);
引擎會記錄啟動人,即在ACT_HI_PROINST表的START_USER_ID字段,可以通過下面的代碼獲取。
1 HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery().singleResult();
2 hi.getStartUserId();