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

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

标签: 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做进一步的分流。

相关推荐
航Hang*3 天前
C PRIMER PLUS——第6-2节:二维数组与多维数组
c语言·开发语言·经验分享·程序人生·算法·学习方法·visual studio
大刘讲IT3 天前
轻量化工业互联网平台在中小制造企业的垂直应用实践:架构、集成、数据价值与选型策略
大数据·学习·程序人生·架构·数据挖掘·能源·制造
CIb0la8 天前
同质化的旅游内核
程序人生·生活·旅游
柏木乃一10 天前
平衡二叉搜索树模拟实现1-------AVL树(插入,删除,查找)
c++·学习·程序人生·算法·二叉搜索树·avl树·平衡二叉搜索树
自由鬼14 天前
深海科技服务博客简介
运维·网络·人工智能·程序人生·安全威胁分析·个人开发·数据安全
程序员曦曦16 天前
17:00开始面试,17:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
拾光师16 天前
为什么MySQL推荐使用自增主键?
程序人生
七七知享17 天前
深入探索Python Pandas:解锁数据分析的无限可能
python·程序人生·程序员·数据挖掘·数据分析·pandas·个人开发
测试界茜茜18 天前
16:00开始面试,16:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
岩中竹20 天前
力扣热题100题解(c++)—矩阵
数据结构·c++·程序人生·算法·leetcode·矩阵