今天有一个需求,如下图人提问所示
属性封装如下
//启动流程实例
public void startProcess(CustomizeProcessVo customizeProcessVo) {
//基本参数设置
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("customizeProcessVo", customizeProcessVo);
//启动人不为空
if (!StringUtils.isEmpty(customizeProcessVo.getApplyUserId().toString())) {
identityService.setAuthenticatedUserId(customizeProcessVo.getApplyUserId().toString());
variables.put("currentUserId", customizeProcessVo.getApplyUserId());
runtimeService.startProcessInstanceByKey(customizeProcessVo.getPdKey(), customizeProcessVo.getBusinessKey(), variables);
} else {
runtimeService.startProcessInstanceByKey(customizeProcessVo.getPdKey(), customizeProcessVo.getBusinessKey(), variables);//error:Unknown property used in expression: ${currentUserId} --表示开始一定是发起人
}
}
然后下文是如何获取当前任务的连线条件的内容
public Object getSeqConditionByTaskId(String taskId) {
Object value = null;
Process process = null;
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
//processDefinitionId 对应表ACT_RE_PROCDEF主键信息
String processDefinitionId = runtimeService.createProcessInstanceQuery().processInstanceId(//
taskService.createTaskQuery().taskId(taskId).singleResult().getProcessInstanceId())//
.singleResult().getProcessDefinitionId();
CustomizeProcessVo customizeProcessVo = (CustomizeProcessVo) runtimeService.getVariable(task.getExecutionId(), "customizeProcessVo");
//获取bpmnModel对象
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
//获取对应key值的process
for (Process pro : bpmnModel.getProcesses()) {
if (pro.getId().equals(customizeProcessVo.getPdKey())) {
process = pro;
}
}
//获取所有的FlowElement信息
Collection<FlowElement> flowElements = process.getFlowElements();
for (FlowElement flowElement : flowElements) {
//如果是任务节点
if (flowElement instanceof UserTask) {
UserTask userTask = (UserTask) flowElement;
//获取入线信息
List<SequenceFlow> incomingFlows = userTask.getIncomingFlows();
for (SequenceFlow sequenceFlow : incomingFlows) {
if (sequenceFlow.getConditionExpression() != null) {
logger.info("连线表达式{}" + sequenceFlow.getName() + "连线名称{}" + sequenceFlow.getConditionExpression() + "连线下一位处理人{}" + sequenceFlow.getTargetRef());
for (String key : customizeProcessVo.getInstanceVars().keySet()) {
if (sequenceFlow.getConditionExpression().contains(key)) {
value = customizeProcessVo.getInstanceVars().get(key);
logger.info("用户输入的此节点变量值{}" + value);
}
}
}
}
}
}
return value;
}
运行结果日志如下
2018-04-09 20:43:35.230 INFO 17164 --- [nio-2001-exec-3] c.d.s.base.workflow.act.ActService : 连线表达式{}大于5时连线名称{}${audit>5}连线下一位处理人{}usertask2
2018-04-09 20:43:35.230 INFO 17164 --- [nio-2001-exec-3] c.d.s.base.workflow.act.ActService : 用户输入的此节点变量值{}6
2018-04-09 20:43:35.230 INFO 17164 --- [nio-2001-exec-3] c.d.s.base.workflow.act.ActService : 连线表达式{}小于5时连线名称{}${audit<5}连线下一位处理人{}usertask3
2018-04-09 20:43:35.230 INFO 17164 --- [nio-2001-exec-3] c.d.s.base.workflow.act.ActService : 用户输入的此节点变量值{}6
2018-04-09 20:43:35.230 INFO 17164 --- [nio-2001-exec-3] c.d.s.base.workflow.act.ActService : 连线表达式{}驳回连线名称{}${outcome=='驳回'}连线下一位处理人{}usertask3
2018-04-09 20:43:35.230 INFO 17164 --- [nio-2001-exec-3] c.d.s.base.workflow.act.ActService : 连线表达式{}批准连线名称{}${audit=='批准'}连线下一位处理人{}usertask4
2018-04-09 20:43:35.230 INFO 17164 --- [nio-2001-exec-3] c.d.s.base.workflow.act.ActService : 用户输入的此节点变量值{}6
2018-04-0