流程实例启动之后,查询了一下实例的详情,发现其中有个startUserId(流程启动者)字段为空,在后续的查询中会用到该字段查询用户启动的流程列表,因此在流程实例启动时,需要设置一下该参数。
因为初始化流程实例的代码是:processEngine.getRuntimeService().startProcessInstanceByKey(s1,s2,variables);
其中未涉及到设置setStartUserId,所以翻了翻源码,找到了赋值位置,如下图。
从这段代码中能看出,startUserId是通过Authentication的get静态方法获取到的startUserId。
Authentication提供了get和set静态方式,因此我们可以在流程实例启动代码之前,通过Authentication.setAuthenticatedUserId()来设置startUserId。
Map<String, Object> variables = new HashMap<>();
variables.put("userCode", managerCode);
Authentication.setAuthenticatedUserId(startUserCode);
ProcessInstance processInstance = processEngine.getRuntimeService()
.startProcessInstanceByKey("ExpenseClaim",orderCode, variables);
我这里设置了流程参数,用于赋值审批人,你也可以按照具体的业务需求来设置所需的流程参数,或者不设置都是可以的。
import org.activiti.engine.impl.identity.Authentication;
对了,Authentication的包路径发出来,引包的时候注意下,别引错了。
接下来就可以重新启动一个流程实例,查询一下详情,看看你的startUserId有没有设置成功吧。