** 在实际环境中,由于我们需要动态解析一些表达式来预先判断流程的流向来满足用户的需求 **

如图:

Flowable 动态解析表达式_flowable

这个是预览流程图走向需要使用到的知识点


Flowable 动态解析表达式


1、 获取参数

Map<String,Object> params = new HashMap<String,Object>

这个参数一般是流程发起的时候需要的

2、 获取表达式得到值

/**
* 原生的解析表达式
*
* @param params 变量的值
* @param exp 表达式
* @param clazz 映射出来的值
* @return
*/
public <T> T getValue(Map<String, Object> params, String exp, Class<T> clazz) {
ExpressionFactory factory = new ExpressionFactoryImpl();
SimpleContext context = new SimpleContext();
if (MapUtils.isNotEmpty(params)){
params.forEach((k, v) -> {
if (v instanceof ObjectNode){
JSONObject jsonObject = JSONObject.parseObject(v.toString());
Map<String, Object> vs = new HashMap<>();
for (String objkey : jsonObject.keySet()) {
vs.put(objkey, jsonObject.get(objkey));
}
context.setVariable(k, factory.createValueExpression(vs, Map.class));
} else {
context.setVariable(k, factory.createValueExpression(v, Object.class));
}
});
}
Object returnObj = null;
try {
ValueExpression e = factory.createValueExpression(context, exp, clazz);
returnObj = e.getValue(context);
} catch (PropertyNotFoundException e) {
logger.error("流程变量的属性找不到,请确认!", e);
throw new FlowException("流程变量的属性找不到,请确认!", e);
}
return typeConverter.convert(returnObj, clazz);
}