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

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

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

相关推荐
郝学胜-神的一滴1 天前
深入Linux网络编程:accept函数——连接请求的“摆渡人”
linux·服务器·开发语言·网络·c++·程序人生
郝学胜-神的一滴1 天前
线性判别分析(LDA)原理详解与实战应用
人工智能·python·程序人生·算法·机器学习·数据挖掘·sklearn
可触的未来,发芽的智生2 天前
狂想:为AGI代称造字ta,《第三类智慧存在,神的赐名》
javascript·人工智能·python·神经网络·程序人生
郝学胜-神的一滴2 天前
Linux网络编程之listen函数:深入解析与应用实践
linux·服务器·开发语言·网络·c++·程序人生
愚者游世2 天前
list Initialization各版本异同
开发语言·c++·学习·程序人生·算法
郝学胜-神的一滴3 天前
深入解析Linux网络编程之bind函数:从基础到实践的艺术
linux·服务器·网络·c++·websocket·程序人生
郝学胜-神的一滴3 天前
Python中的bisect模块:优雅处理有序序列的艺术
开发语言·数据结构·python·程序人生·算法
小白64023 天前
2025年终总结-迷途漫漫,终有一归
前端·程序人生
John_ToDebug4 天前
2026年展望:在技术涌现时代构筑确定性
人工智能·程序人生
John_ToDebug4 天前
2025年度个人总结:在技术深海中锚定价值,于时代浪潮中重塑自我
人工智能·程序人生