APS 1.8.1中候选组用户无法查看流程实例的问题排查
问题分析与解决方案
首先得明确Activiti(APS基于Activiti构建)中ACT_HI_IDENTITYLINK表的设计逻辑,这是理解问题的核心:
- 流程实例级身份链接:这类记录的
proc_inst_id_不为空,通常对应流程启动时指定的参与者、发起人,或者通过流程全局配置添加的身份关联,type_一般是participant或starter,作用是标记哪些用户/组拥有整个流程实例的查看权限。 - 任务级身份链接:这类记录的
task_id_不为空、proc_inst_id_为空,对应单个任务的候选用户/组、办理人等,type_是candidate、assignee,作用是控制单个任务的权限,而非整个流程实例。
回到你的问题:
为什么proc_inst_id_没有自动设置?
因为你是把候选组配置在单个任务节点上的,Activiti的默认行为是:任务的候选组只会生成任务级的身份链接记录,不会自动关联到流程实例层级。也就是说,这些type_="candidate"的记录只和具体任务绑定,不会被标记为流程实例的参与者,自然proc_inst_id_为空。
而你页面的查询逻辑只匹配了type_="participant"且proc_inst_id_不为空的记录,所以完全找不到对应的数据——手动补全proc_inst_id_后,这些记录就符合查询条件了,页面自然能显示。
可行的解决办法
1. 调整页面查询逻辑(推荐,符合Activiti原生设计)
修改查询语句,让它同时覆盖任务级的候选组记录:
- 关联
ACT_HI_TASKINST表,通过task_id_关联到属于目标流程实例的任务; - 同时匹配
type_="participant"(流程实例参与者)和type_="candidate"(任务候选组)的记录。
举个SQL示例(仅供参考,根据你的实际查询调整):
SELECT DISTINCT hi_procinst.* FROM ACT_HI_PROCINST hi_procinst LEFT JOIN ACT_HI_IDENTITYLINK il_proc ON hi_procinst.ID_ = il_proc.PROC_INST_ID_ AND il_proc.TYPE_ = 'participant' LEFT JOIN ACT_HI_TASKINST hi_task ON hi_procinst.ID_ = hi_task.PROC_INST_ID_ LEFT JOIN ACT_HI_IDENTITYLINK il_task ON hi_task.ID_ = il_task.TASK_ID_ AND il_task.TYPE_ = 'candidate' WHERE (il_proc.GROUP_ID_ = '你的候选组ID' OR il_task.GROUP_ID_ = '你的候选组ID')
2. 手动添加流程实例级参与者
如果不想修改查询,可以在流程启动或任务创建时,通过Activiti API把候选组添加为流程实例的参与者:
// 流程启动后,添加候选组为流程参与者 identityLinkService.addParticipantGroup(processInstanceId, candidateGroupId);
这样ACT_HI_IDENTITYLINK会生成一条type_="participant"且proc_inst_id_正确赋值的记录,你的原有查询就能匹配到。
3. 检查APS的定制配置
部分企业定制的APS版本可能提供了“任务候选组同步为流程参与者”的配置项,可以在流程设计器或系统设置里找找相关开关,开启后就能自动生成对应的流程实例级身份链接。
内容的提问来源于stack exchange,提问作者Marco Altieri
相关产品推荐
相关产品推荐

