本文详细解释了流程挂起及报错“没有找到{***}活动参与人”的原因和解决方案。首先,概述了流程挂起的状态和报错日志的查看方法。接着,分析了常见问题类型,包括节点参与人配置的三种主要类型(参与人变量、具体职员/职位/关系、工作流角色/角色组),并详细说明了每种类型下可能遇到的问题及解决方案。最后,归纳总结了根本解决方案和临时解决方案,强调了流程定义问题、单据字段数据缺失或后台数据有误时的处理办法。
一:报错详解
1、流程状态为‘已挂起’ - 流程图上挂起的节点存在很直观的显示 - 标识为暂停 II
2、挂起报错 - 错误日志中可以查看到报错 - 没有找到{***}活动参与人
【说明】在挂起的节点 - 该节点通过流程定义配置去找该节点 配置的参与人,没有找到报错。 没有找到{***}活动参与人
二:常见问题类型&分析
主要类型有:
1、节点参与人配置 - 【参与人变量 - i】
2、节点参与人配置 - 【某个具体职员、职位、或者对应的某个对应关系(直接上级,下级,间接上下级)】
3、节点参与人配置 - 【工作流角色 /工作流角色组】
【核心要点】遇到挂起的流程
可以先按照右面连接取到对应文件先分析 - 取 当前单据运行 的【流程定义文件】 和 【流程属性文件】分析
特别注意:一定要取 当前单据运行 的【流程定义文件】 和 【流程属性文件】分析
原因:流程存在版本的概念 - 经常有客户走入误区 - 看着自己BOS工具里的流程定义和当前的流程属性文件对比分析
怎么看,怎么看就是没有问题,怎么回事 bug吧!!! -( PS:抓脑阔,脑壳疼)
流程存在版本的概念:也即每次在BOS工具中发布完流程 - 对应后台流程的版本都会 +1,单据提交默认是走最新版本的流程定义。
那么就会存在 -其实当前问题的单据流程是在 n 版本的流程,但是BOS里的流程又是 n+1版本的流程,找不到问题就很正常
(PS :用前朝的剑斩本朝的官呀 - 哟嚯嚯嚯~ )
1、节点参与人配置 - 【参与人变量 - i】
1、单据提交流程变量 i 值为空,导致流程找不到活动参与人 后挂起
解决方案:
a:检查流程定义配置 变量 i 的赋值情况 见《图二》
b:分析出该流程变量在该流程中没有赋值 - 需要修改流程定义 在发布重新提交单据走流程即可
c:对于已经进入提交的流程 - 可参考附件《修改正在运行的流程变量的方案.docx》即可
2、单据提交流程变量 i 值不为空 ,但是流程还是找不到活动参与人 后挂起 见《图三》
解决方案: (PS:假如变量值不是预计所获取的值 - 则要像 1 - a 那样分析流程变量赋值情况)
a:取流程属性文件 - 对应流程变量 i 的值
b:检测变量 i - 所对应的用户/职员是否满足工作流参与人条件
见附件 - 《【SQL】-检查用户是否符合工作流参与人.docx》
c:若为脚本取值异常 - 则需要写这个脚本的人分析
其余数据问题可咨询总部老师分析
2、节点参与人配置-【某个具体职员,职位,或者对应的某个对应关系(直接上级,下级,间接上下级)】
1、配置了某个具体 职员 - 但是流程报错 找不到参与人 - 节点挂起
解决方案: (PS:一般出现该问题的情况为 - 职员/用户离职了导致)
可通过附件 - 《【SQL】-检查用户是否符合工作流参与人.docx》检查即可
当前运行流程可 - 重新指定执行人即可
- 检查准则见下图 - 《SQL】-检查用户是否符合工作流参与人.docx》
2、配置了某个具体 职位 - 但是流程报错 找不到参与人 - 节点挂起
解决方案:(PS:工作流会找到该职位上所有人员作为本节点参与人)
- 即多了一步通过职位id查职位上所有人员(对应配置的关系 - 找人员),在校验人员是否满足工作流参与人条件
-- > 【核心要点】 - 我们这里需要取到的是 单据运行时流程定义配置 - 所对应的职位id
【取法&解释】:见下图 - 代码编辑模式下 - 找到对应节点的-配置的职位id的值
因为工作流是通过流程定义中这个职位id取后台找人员的,若客户做过组织或职位调整都有可能造成原单据运行时流程找对应人员找不到,故报错找不到活动参与人。
【取到对应id后】 - 在带入一下sql查询 该职位上人员,再《【SQL】-检查用户是否符合工作流参与人.docx》
select fpersonid from t_org_positionMember where fpositionid = '【找到的职位id】'
t_org_positionMember : 职员_任职情况表 - 1、可通过职员id查到任职的职位 2、可通过职位id查到职位任职的人员
3、配置了某个 关系,(PS:检查方式与 2 相似 - 只是对应sql需要转换调整一下)
例如:
a、取申请人职位直接上级
select FPARENTID from T_ORG_PositionHierarchy where FHIERARCHYID ='00000000-0000-0000-0000-000000000001396FCAD0'and FCHILDID ='【找到的职位id】'
t_org_positionHierarchy : 职位汇报关系表 - fparentid 要查的上级职位id,fhildid 带入查询的职位id。可反查
00000000-0000-0000-0000-000000000001396FCAD0 : 默认的行政关系
b、根据部门fid取部门的负责人作为审批人
select FID from T_PM_USER where Fpersonid in
(select Fpersonid from T_ORG_PositionMember where fpositionid in
( select FID from T_ORG_Position where FIsRespPosition = '1' and FAdminOrgUnitID = '【你拿到的部门fid变量】'))"
t_org_positionMember : 职员_任职情况表 - 1、可通过职员id查到任职的职位 2、可通过职位id查到职位任职的人员
T_ORG_Position : 职位表 FIsRespPosition :是否负责任职位 FAdminOrgUnitID:行政组织 (我们这里带入的部门也就是一个组织)
3、节点参与人配置 - 【工作流角色 /工作流角色组】
1、与上述两种配置情况区别 & 工作流角色取值逻辑 & 初步前台数据分析模型
1.1:上面两种方式是直接按照工作流的配置 - 直接取后台数据,取到啥就是啥
1.2:工作流角色 - 会根据流程定义配置
- ① 先取到定义配置中角色配置的组织字段 - (这个字段是单据上的组织类型的字段)
- ② 再取到定义配置中参与人配置的是哪个工作流角色 - (代码编辑下可取到对应的 角色id)
- ③ 取到单据上对应配置字段的值 - A , 与系统EAS客户端配置的工作流角色 - 组织字段A,B,C 比较
若:找到匹配的组织 - 则去对应后面配置的 职员/职位-在找职员/组织-找组织上的所有人
2、工作流角色的类型 & 后台数据分析模型
2.1:在第二步之前 - 我们需要先了解工作流角色的类型有些
配置过工作流角色的人会清楚 - 工作流分别对应有三类 对应后台数据表
职员角色:T_WFR_PERSONROLE
职位角色:T_WFR_POSITIONROLE
组织角色:T_WFR_WFOrgRole (PS : 通常作为连接弧条件的配置 - 不作为节点参与人配置)
同理按照工作流角色取值逻辑分析 - 结合流程定义代码数据 - 及后台单据数据 - 系统工作流角色信息配置情况分析
备注:
第三步 - 当前截图演示的配置使用的是 职员角色
第四步 - 参考上面职员/职位 校验是否满足工作流参与人条件《【SQL】-检查用户是否符合工作流参与人.docx》
三:归纳总结 & 解决方案
根本解决方案:
按照问题定位可分为:
1、流程定义问题 - 角色中组织字段选错了
1.1、需要重新修改流程之后发布
1.2、新提交的单据 -进新版本流程 就不会有问题了
2、单据对应字段上没有数据 - (PS:后台查单据数据表为准)
2.1、需要找业务确认 - 是否可能后台修复数据解决
3、后台数据有误 - 职员 / 职位 / 工作流角色 有做过调整
3.1、若以上数据有错过调整 - 流程定义中的以上配置需要重新选择 - 然后发布
临时解决方案:
场景:客户某些单据很重要 - 不能重新做单进流程 -或者有大领导审批了不好重新再让领导审批
1、使用流程中 - 重新指定执行人/添加执行人操作
【备注】:以上分析思路仅做 报错 【没有找到{***}活动参与人】问题排查思路,实际问题需要结合问题情况具体分析
【SQL】-检查用户是否符合工作流参与人.docx(30.93KB)