工作期间,有时候需要预先知道流程模型配置的EL表达式的结果,例如分配用户的地方,使用了EL表达式获取,那么在加签或减签时,需要提前知道他的最终值,以此来判断人员信息。
import cn.hutool.extra.spring.SpringUtil;
import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.common.engine.impl.el.ExpressionManager;
import org.flowable.common.engine.impl.interceptor.Command;
import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.impl.util.CommandContextUtil;
import java.io.Serializable;
import java.util.Map;
/**
* @author steve
* @Description EL解析命令
* @date 2022/11/24 13:35
*/
public class CustomParseExpressionCmd implements Command<Object>, Serializable {
private static final long serialVersionUID = 1L;
protected String expressionCondition;
protected String processInstanceId;
private Map<String, Object> data;
public CustomParseExpressionCmd(String expressionCondition, String processInstanceId, Map<String, Object> data) {
this.expressionCondition = expressionCondition;
this.processInstanceId = processInstanceId;
this.data = data;
}
@Override
public Object execute(CommandContext commandContext) {
RuntimeService runtimeService = SpringUtil.getBean(RuntimeService.class);
ExpressionManager expressionManager = CommandContextUtil.getProcessEngineConfiguration().getExpressionManager();
Expression expression = expressionManager.createExpression(this.expressionCondition);
ExecutionEntity executionEntity = (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(this.processInstanceId).includeProcessVariables().singleResult();
Object value = expression.getValue(executionEntity);
return value;
}
}