Активити и группы кандидатов - PullRequest
0 голосов
/ 13 мая 2018

В 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_ ='андидатом 'не имеют никакого набора proc_inst_id_?

ОБНОВЛЕНИЕ: Проблема с ограничением «участник» имеет простой обходной путь: достаточно добавить ту же группу кандидатов, что и участник.См. Также Функция, позволяющая конфигурировать «Участник» в BPM Modeler

К сожалению, этого недостаточно для решения второй проблемы.Запись по-прежнему не возвращается, поскольку столбец proc_inst_id_ не задан.

Я попытался обновить столбец вручную для записи «участник», и я убедился, что эта страница доступна и работает хорошо.

Кто-нибудь знает, почему столбец не установлен?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Возможное решение (или обходной путь до исправления 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");
    };
}
0 голосов
/ 13 мая 2018

сначала попробуйте проверить, действительно ли ваш рабочий процесс запущен путем доступа к «рабочему процессу, который я запустил». Вы должны видеть свою задачу в «активной задаче», если нет, это означает, что в ваших определениях есть некоторые ошибки. Если все в порядке, проверьте название своей группы и не забудьте добавить «GROUP_» myGRPName. Если вы хотите увидеть экземпляры рабочего процесса, проще использовать веб-сценарий и службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...