在之前的文章里面,我面实现了一个简单的请假流程,这个流程里面有主管审批,总经理审批,人事部审批等几个流程节点,但是有一个很大的缺点就是每一个流程几点里面的执行人都是写死的或者是没有指定。而实际的业务中任务的执行人不变几乎是不可能的。所以这里我们介绍一下如何动态的指定流程的执行人。
要实现动态指定流程任务的执行者我们注意一下两点:
- 绘制流程图的时候在每个流程节点添加:assignee属性。assignee翻译成中文就是受托人的意思。
- 启动流程的时候map参数,map里面存放每个流程节点执行人的信息集合。
重新绘制流程图指定assignee属性。
同样的下面的总经理审批添加assignee为jingli。
启动流程
依照之前的介绍流程部署和启动流程的方法来部署并启动一个新的流程。同时添指定 任务的执行人的集合。
代码实现:
/**
* 启动流程,并制定执行人
*/
@Override
public void startPorcInstance2() {
// 指定流程执行人
Map<String,Object> map = new HashMap<>();
map.put("zhuguan","zhangsan");
map.put("jinngli","lisi");
//通过流程部署id启动
runtimeService.startProcessInstanceById("holiday2:1:15004",map);
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().processDefinitionId("holiday2:1:15004").list();
System.out.println(list.get(0).getBusinessKey());
}
这时在act_ru_task里面可以看到此时任务的执行人为:zhangsan。这个zhangsan刚刚在上面的代码中通过map动态指定的。