本文讨论了单据不触发工作流的四种情况及解决方案,包括全部单据、部分用户、某一类单据和部分同类单据的问题。问题涉及工作流许可、用户身份、流程启用状态、过期及业务配置等多个方面。通过流程引擎日志、后台事务监控等工具进行排查,并提供了具体步骤和示例。总结了排查流程,鼓励读者反馈,以不断完善本文内容。
概念澄清
流程日志
案例分析
案例总结
结束语
概念澄清
单据提交的时候是否会走工作流取决于单据的实际业务,如果确定你所在的业务线需要流程来驱动单据走业务的,那么这篇文章对你便是有帮助的。
总体上把单据不触发工作流分为这几类:
所有单据都无法触发流程
某些用户无法触发流程
某一类单据无法触发流程
部分单据无法触发流程
下面将会介绍上面4类,并给出解决方案
流程日志
涉及到3类:
流程引擎日志,路径:客户端》流程引擎日志
workflow.log.*/工作流日志,路径:eas\server\profiles\server{n}\logs \Workflow.log.*
apusic.log.*/阿帕斯日志,路径: eas\server\profiles\server{n}\logs \apusic.log.*
怎样判断是否应该由工作流来分析问题
收集单据提交时段的工作流日志workflow.log,打开这些日志用单据ID去搜索,假设单据ID为:p4AAAABvKQlj0wED,看是否能搜到如下图的信息:Submit p4AAAABvKQlj0wED,如果能匹配到如下信息, 则说明进了流程服务,如果在任何日志中都没匹配到 则说明业务有参数控制,不走工作流,需要找对应的业务同事去分析,shr的单就找shr同事,房地产的单就找房地产同事分析...
案例1-所有单据都无法触发流程
问题描述:所有的单据都无法触发流程,在这之前流程没有任何问题
问题原因:
工作流license出问题
后台事务堵塞
处理过程:
在管理控制台或者客户端查看是否有工作流的许可,或者许可是否过期
打开后台事物监控,看是否有大量任务状态是就绪中,如果存在大量任务是就绪中状态在观察执行中任务是否一直没有变化卡死或者执行很慢(可以通过开始时间观察)。如果确定是后台事物堵塞,请联系执行中相关比较慢的功能的业务排查具体原因。同时收集当时的线程堆栈信息。
如果以上2个问题现象都不存在。则收集工作流日志,打开日志搜索关键字 no BPM license ,如果能搜到也说明工作流license出问题了。如下图:
案例2-某些用户无法触发流程
问题描述:某些用户提交单据无法流程,可能在重新登录客户端之后又可以触发流程。其他用户一直可以
问题原因:
该用户是非职员用户(这种如果不能触发,则一直不能触发)
某些EAS实例校验license出问题
处理过程:
在客户端》流程引擎日志 中去查看是否存在对应时间点的记录。存在的话,双击打开,是否有类似下图的日志描述
如果有类似上图Can not start process,can't find natched processDef by person!的描述则证明提交人是非职员用户,非职员用户一度是不能使用工作流的。但是现在打工作流最新的补丁即可支持非职员用户提交流程(仅限EAS820版本及以上,补丁查看方式https://vip.kingdee.com/knowledge/specialDetail/79212475333201152 【BOS核心引擎_工作流】)
针对EAS实例校验license出问题,详见案例1。
案例3-某一类单据无法触发流程
问题描述:某一类单据无法触发流程
问题原因:
流程被禁用
流程过期
业务存在参数控制该单据是否走工作流
二开的单据代码问题
单据提交按钮/提交事件与流程提交节点配置的任务不匹配(有调整过function元数据)
处理过程:
客户端 》流程定义表 查看流程是否启用,没有启用 则 启用流程
客户端 》流程引擎日志 中去查询,对应时间点的日志,查看 流程是否过期,如下图:
如果有如上的描述则说明流程过期了,打开bos工具找到对应的流程,调整一下失效时间即可:
确定了流程启用且没有过期之后。则需要收集 工作流日志。打开所有的日志用单据ID作为关键字去搜索。假设单据ID为:p4AAAABbfhVj0wED,看是否能搜到如下图的信息:Submit boid:p4AAAABbfhVj0wED
如果搜不到,则需要找对应的业务同事或者二开同事来排查这个问题,看是否有参数或者字段控制 触发流程。
如果存在日志信息 Submit boid:p4AAAABbfhVj0wED,则继续查看是紧跟着有:Shocked!!! WfEventListenerStateManager.getInstance().isEnable() = false, boid:p4AAAABbfhVj0wED。如果也存在这样的日志则表明,业务代码中错误的禁用了工作流服务,需要联系业务的同学处理。
如果以上都没问题,则可能是业务function元数据开发的有问题,则需要按照附件《function元数据排查》来定位问题,修改function元数据
案例4-同类单据中存在部分单据无法触发流程
问题描述:部分单据无法触发流程
问题原因:
可能是单据的原因造成触发流程的时候计算出错
对应提交人没有符合条件的流程
处理过程:
查找的时候都可以使用单据id用类似条件去查询
打开后台事物监控,用对应的 单据id 类似 标题 中查找是否有一条失败的后台事物
如果能够查询到对应的后台事物,则打开具体的错误信息,错误信息中会有比较明确的说明
打开流程引擎日志,用单据id在描述信息里查找,如果能找到对应的记录,打开对应的记录具体查看
查看引擎日志如果发现对应时间点有Can not start process,can't find matched processDef by condition!的日志描述:则表明流程的启动条件不满足。需要仔细检查 单据是否满足 流程的启动条件。
案例总结
排查过程可以总结为:
先进行简单的排查
检查流程许可是否可用
在客户端》后台事务监控 中 查看后台事务是否整体被堵塞
在客户端》后台事务监控 中 查看是否有失败的 流程任务
在客户端》流程引擎日志 中 是否存在可疑的日志
在客户端》流程定义表 中 查看 流程是否被禁用
收集工作流日志,上面的案例中都有 如何结合工作流日志去排查 单据没有触发工作流的原因
结束语
不难看出单据不触发流程的原因众多。本文不能面面俱到,以后会随着问题的处理逐渐完善案例,也希望大家对本文中的疑惑留言,我们做出调整,力争本文可以做到通俗易懂,对大家解决问题有帮助。
function元数据排查.docx(40.94KB)
推荐阅读