目前项目有个业务需要获取流程表达式的执行结果,
但是流程图的执行结果在到达流程节点前是不可见的
所以这里 我们手动去调用activiti的juel表达式
在查找资料实现的过程中参考了别人的一些文章
https://blog.csdn.net/isyoungboy/article/details/81282699
在照搬过程中遇到了一些问题,索性最后是解决了
代码如下:
activiti配置文件
/***
* activiti配置累
*/
@Configuration
public class ActivitiConfig extends AbstractProcessEngineAutoConfiguration {
/***
* 创建数据源对象
* @return
*/
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource activitiDataSource() {
return DataSourceBuilder.create().build();
}
/***
* 创建activiti流程引擎
* @param transactionManager
* @param springAsyncExecutor
* @return
* @throws IOException
*/
@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration(
PlatformTransactionManager transactionManager,
SpringAsyncExecutor springAsyncExecutor) throws IOException {
SpringProcessEngineConfiguration config = baseSpringProcessEngineConfiguration(
activitiDataSource(),
transactionManager,
springAsyncExecutor);
return config;
}
}
调用方法
@Autowired
private SpringProcessEngineConfiguration processEngineConfiguration;
/***
* 执行juel表达式
* @param el 表达式
* @param var 参数
* @return
*/
public Object invokeJuelExpression(String el, Map<String, Object> var) {
ApplicationContext applicationContext = processEngineConfiguration.getApplicationContext();
Map beans = applicationContext.getBeansOfType(Object.class);
SpringExpressionManager expressionManager = new SpringExpressionManager(applicationContext, beans);
Expression expression = expressionManager.createExpression(el);
MyVariableScope impl = new MyVariableScope(var);
Context.setProcessEngineConfiguration(processEngineConfiguration);
return expression.getValue(impl);
}
MyVariableScope.java
public class MyVariableScope implements VariableScope {
private Map<String, Object> variables = null;
public MyVariableScope(Map<String, Object> variables) {
this.variables = ParamUtil.isEmpty(variables) ? new HashMap<>() : variables;
}
//.....以下都是VariableScope 的默认实现方法,没有具体代码,就不贴了
}