flowable中动态显示节点的审批人信息
1、上面的流程图当任务还没有到的节点,用户想看看节点的人的信息,如果我们常规的是不能实现的。
2、思路就是我们取出节点的表达式,然后用我们流程实例的变量来给他翻译出来即可,如何做呢?
2.1、通过流程实例id查出历史表中的所有的变量列表
1 2 | List<HistoricVariableInstance> hvis = historyService.createHistoricVariableInstanceQuery() .processInstanceId(processInstanceId).list(); |
2.2、通过流程实例id获取所有的节点信息
List<Process> processes = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId()).getProcesses(); if (CollectionUtils.isNotEmpty(processes)) { for (Process process : processes) { Collection<FlowElement> flowElements = process.getFlowElements(); if (CollectionUtils.isNotEmpty(flowElements)) { for (FlowElement flowElement : flowElements) { if (flowElement instanceof UserTask) {
.......... } } } } }
2.3、取出节点的表达式
if (StringUtils.isNotBlank(userTask.getAssignee())) { //处理多实例的显示 MultiInstanceLoopCharacteristics loopCharacteristics = userTask.getLoopCharacteristics(); if(loopCharacteristics == null) { String expressionValue = null; if (userTask.getName().equals(FlowConstant.FLOW_SUBMITTER)) { expressionValue = processInstance.getStartUserId(); }else { expressionValue = juelExpression.getValue(hvis, userTask.getAssignee()); } if(StringUtils.isNotBlank(expressionValue)) { List<UserVo> userVos = userVoService.getUserByCodeOrGroupId(expressionValue); } }else { String inputDataItem = loopCharacteristics.getInputDataItem(); List<String> values = (List)juelExpression.getValue(hvis, inputDataItem, List.class); if (CollectionUtils.isNotEmpty(values)) { List<UserVo> users = new ArrayList<>(); values.forEach(code->{ List<UserVo> userVos = userVoService.getUserByCodeOrGroupId(code); users.addAll(userVos); }); } } }
2.4、工具类
public Object getValue(List<HistoricVariableInstance> hvis, String exp, Class<?> clazz) { ExpressionFactory factory = new ExpressionFactoryImpl(); SimpleContext context = new SimpleContext(); for (HistoricVariableInstance entry : hvis) { context.setVariable(entry.getVariableName(), factory.createValueExpression(entry.getValue(), Object.class)); } ValueExpression e = factory.createValueExpression(context, exp, clazz); return e.getValue(context); } public String getValue(List<HistoricVariableInstance> hvis, String exp) { return (String) getValue(hvis, exp, String.class); }
分类:
flowable
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
2014-12-25 rabbitmq