设置认证用户
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字段,可以通过下面的代码获取(procInsId为流程实例id)。
1 HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInsId).singleResult();
2 hi.getStartUserId();