1.设置节点分配流程发起人,设置固定值${INITIATOR}
2.查看确认流程文件对应节点的分配人
3.启动流程时设置流程发起人
/**
* 启动流程
* @param param 启动流程参数
* @return
*/
@Override
public String start(StartProcessParam param){
//设置流程发起人
Authentication.setAuthenticatedUserId(param.getUserId());
String id = processEngine.getRuntimeService().startProcessInstanceByKey(param.getProcessId(),param.getBusinessId(),param.getVariables()).getId();
//这个方法最终使用一个ThreadLocal类型的变量进行存储,也就是与当前的线程绑定,所以流程实例启动完毕之后,需要设置为null,防止多线程的时候出问题。
Authentication.setAuthenticatedUserId(null);
return id;
}
4.启动流程,跟踪代码,可以发现,启动流程的接口会给INITIATOR变量设置当前用户
5.查看数据表,节点设置处理人为当前用户成功
另外:注意到,initiatorVariableName变量是跟着启动节点的flowable:initiator="initiator"对应的。也就是说,Authentication.setAuthenticatedUserId(param.getUserId());方法,启动流程时,会自动设置变量“initiator”的值