当前位置: 首页 > news >正文

踩坑日记 | 记一次流程图问题排查

踩坑日记:记一次流程图问题排查

标签: activiti | 流程

引言

今天排查了一个流程图问题,耗时2个小时终于解决,记录下来

现象

流程审批驳回报错:Unknown property used in expression: ${xxxx}
使用的是 activiti 流程

错误日志:

Error while closing command context
org.activiti.engine.ActivitiException: Unknown property used in expression: ${A0_LS_YCSHENPI}

流程图:
在这里插入图片描述

其中三条分支的配置分别为:
${path==‘P3’}
${path==‘P2’}
${action == ‘REFUSE’ || action == ‘REJECT’}

修改后的流程图:
在这里插入图片描述

其中三条分支的配置分别为:${action==‘PASS’&&path==‘P3’}
${action==‘PASS’&&path==‘P2’}
${action == ‘REFUSE’ || action == ‘REJECT’}

分析过程

完整日志:

提交时执行路径计算,taskId: 55438607,result: ProcessScriptExecuteResult(result=ProcessScriptExecuteResult.Result(path=P3, nextStepRoleIdList=[A0_LS_YCSHENPI], userId=null, nextStepSysFlag=false, nextTaskName=null), isSuccess=true, errMsg=null)
事务开始, transactionDefinition: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
ActivitiGlobalTaskCompletedListener action: REJECT, taskId :55438607
ActivitiGlobalTaskCompletedListener over, taskId: 55438607
2024-07-12 08:49:24.003	
Error while closing command context
org.activiti.engine.ActivitiException: Unknown property used in expression: ${A0_LS_YCSHENPI}

通过完整的日志 以及打断点方式 了解了整个流程

后端接到驳回的请求之后不管是否驳回 都会先调用grovvy的脚本 计算一下 下一步的审批人

计算完成后再去根据action 判断走哪个流程

结果就是 计算后得到结果 Result(path=P3, nextStepRoleIdList=[A0_LS_YCSHENPI], userId=null, nextStepSysFlag=false, nextTaskName=null), isSuccess=true, errMsg=null)

但实际上 应该驳回或否决的路 ,结果走到了下一个人审批的路径

导致程序去bpmn中找对应的角色 找不到,最后报错

解决方案就是,使用action强制约束每条路径
${action==‘PASS’&&path==‘P3’}
${action==‘PASS’&&path==‘P2’}
${action == ‘REFUSE’ || action == ‘REJECT’}

最后问题解决。(长舒一口气)

总结

这是一个画流程图的坑

画流程图时需要注意:如果一个节点之后有多个分支,需要先试用 action 做好分流,再用path做进一步的分流。

http://www.lryc.cn/news/401564.html

相关文章:

  • 数据建设实践之大数据平台(四)安装mysql
  • MongoDB常用命令大全,概述、备份恢复
  • uni-app 保存号码到通讯录
  • Jetson-AGX-Orin gstreamer+rtmp+http-flv 推拉流
  • ES证书过期替换方案
  • 计算机网络——网络层(IP地址与MAC地址、地址解析协议ARP、IP数据报格式以及转发分组、ICMP、IPV6)
  • 音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现
  • WEB前端05-JavaScrip基本对象
  • 新手教学系列——简单的服务配置项集中管理
  • 《0基础》学习Python——第十三讲__面向对象
  • 前端JS特效第42波:纯CSS实现的卡片切换效果
  • 2.10、matlab中字符、数字、矩阵、字符串和元胞合并为字符串并将字符串以不同格式写入读出excel
  • 中文科技核心论文发表
  • 使用 Flask 3 搭建问答平台(一):项目结构搭建
  • 力扣经典题目之->用队列实现栈 的详细讲解和实现,看这一篇就够了!
  • [JS]认识feach
  • tomcat如何进行调优?
  • 复现GMM文章(一):图1代码和数据
  • 链接追踪系列-07.logstash安装json_lines插件
  • 火山引擎数据飞轮实践:在电商场景中,如何建设全链路数据血缘?
  • 使用加密软件对企业来说有什么好处
  • STM32入门开发操作记录(二)——LED与蜂鸣器
  • n3.平滑升级和回滚
  • C#WPF DialogHost.Show 弹出对话框并返回数据
  • Kafka Producer发送消息流程之分区器和数据收集器
  • Codeforces Round 958 (Div. 2)
  • <数据集>猫狗识别数据集<目标检测>
  • Figma 中文版指南:获取和安装汉化插件
  • 用c语言写一个贪吃蛇游戏
  • 计算机网络入门 --网络模型