2

在 APS 1.8.1 中,我定义了一个流程,其中每个任务都有一个候选组。

当我使用属于候选组的用户登录时,我看不到流程实例。

我发现当我尝试访问流程实例时,APS 在数据库中执行以下查询:

select distinct RES.* , DEF.KEY_ as PROC_DEF_KEY_, DEF.NAME_ as PROC_DEF_NAME_, DEF.VERSION_ as PROC_DEF_VERSION_, DEF.DEPLOYMENT_ID_ as DEPLOYMENT_ID_
    from ACT_HI_PROCINST RES
    left outer join ACT_RE_PROCDEF DEF on RES.PROC_DEF_ID_ = DEF.ID_
        left join ACT_HI_IDENTITYLINK I_OR0 on I_OR0.PROC_INST_ID_ = RES.ID_
     WHERE  RES.TENANT_ID_ = 'tenant_1'
        and 
        (  (
              exists(select LINK.USER_ID_ from ACT_HI_IDENTITYLINK LINK where USER_ID_ = '1003' and LINK.PROC_INST_ID_ = RES.ID_)
            )
            or (
              I_OR0.TYPE_ = 'participant'
              and
              I_OR0.GROUP_ID_ IN ('1','2','2023','2013','2024','2009','2025','2026','2027','2028','2029','2007','2018','2020','2017','2015','2012','2003','2021','2019','2004','2002','2005','2030','2031','2032','2011','2006','2008','2014','2010','2016','2022','2033','2034','2035','2036','2037','1003')
            ) ) 
     order by RES.START_TIME_ desc 
    LIMIT 50 OFFSET 0

此查询不返回任何记录有两个原因:

  1. 在我的 ACT_HI_IDENTITYLINK 中,没有任何任务同时设置了 group_id_ 和 proc_inst_id_。
  2. 记录的类型是“候选人”,但查询正在寻找“参与者”

    select * fro m ACT_HI_IDENTITYLINK;
    -[ RECORD 1 ]-+----------
    id_           | 260228
    group_id_     | 
    type_         | starter
    user_id_      | 1002
    task_id_      | 
    proc_inst_id_ | 260226
    -[ RECORD 2 ]-+----------
    id_           | 260294
    group_id_     | 2006
    type_         | candidate
    user_id_      | 
    task_id_      | 260293
    proc_inst_id_ | 
    -[ RECORD 3 ]-+----------
    id_           | 260300
    group_id_     | 2009
    type_         | candidate
    user_id_      | 
    task_id_      | 260299
    proc_inst_id_ | 
    -[ RECORD 4 ]-+----------
    id_           | 262503
    group_id_     | 
    type_         | starter
    user_id_      | 1002
    task_id_      | 
    proc_inst_id_ | 262501
    -[ RECORD 5 ]-+----------
    id_           | 262569
    group_id_     | 2016
    type_         | candidate
    user_id_      | 
    task_id_      | 262568
    proc_inst_id_ | 
    -[ RECORD 6 ]-+----------
    id_           | 262575
    group_id_     | 2027
    type_         | candidate
    user_id_      | 
    task_id_      | 262574
    proc_inst_id_ | 
    

为什么查询只查找“参与者”以及为什么具有 type_ = 'candidate' 的记录没有任何 proc_inst_id_ 集?

更新: 约束“参与者”的问题有一个简单的解决方法:添加与参与者相同的候选组就足够了。另请参阅在 BPM Modeler 中允许“参与者”配置的功能

不幸的是,这不足以解决第二个问题。仍然没有返回记录,因为未设置列 proc_inst_id_。

我尝试在“参与者”记录上手动更新该列,并且我已经验证这样做该页面是可访问的并且运行良好。

有谁知道为什么没有设置列?

4

2 回答 2

2

一个可能的解决方案(或解决方法,直到ACTIVITI-696被修复)是将作为候选添加的每个组作为流程实例的参与者添加到任务中。

有一个 REST API 可以做到这一点:

POST /enterprise/process-instances/{processInstanceId}/identitylinks

该 API 所做的应该由任务侦听器完成,该侦听器将自动将已创建任务的候选组添加为流程实例的参与者。

要添加新的身份链接,请在侦听器中使用以下行:

ActivitiEntityEvent aee = (ActivitiEntityEvent)activitiEvent;
TaskEntity taskEntity = (TaskEntity)aee.getEntity();
List<IdentityLinkEntity> identities = taskEntity.getIdentityLinks();
if (identities != null) {
    for (IdentityLinkEntity identityLinkEntity : identities) {
        String groupId = identityLinkEntity.getGroupId();
        runtimeService.addGroupIdentityLink(activitiEvent.getProcessInstanceId(), groupId, "participant");
    };
}
于 2018-05-13T18:52:19.527 回答
0

首先尝试通过访问“我已经开始的工作流程”来检查您的工作流程是否真的开始了。如果没有,您应该在“活动任务”中看到您的任务,这意味着您的定义中有一些错误。如果一切正常,请检查您的组名,不要忘记添加“GROUP_”myGRPName。如果您想查看工作流实例,使用 Web 脚本和服务会更简单。

于 2018-05-13T17:33:25.837 回答