Перейти к содержанию

Вычисление исполнителя текущей активной задачи

Введение

В Comindware Platform можно вычислить исполнителя активной задачи по записи, связанной с экземпляром бизнес-процесса. Это может быть полезно для отображения информации об ответственном за задачу или в иных вычислениях.

Прикладная задача

Имеется бизнес-процесс с пользовательскими задачами.

Задаче может быть назначен как один исполнитель, так список возможных исполнителей.

С бизнес-процессом связана запись.

Для этой записи требуется:

  • получить список исполнителей активных задач и поместить его в атрибут типа «Аккаунт»;
  • определить, имеются ли задачи у текущего пользователя, и записать соответственно значение True или False в логический атрибут.

Исходные данные

Имеется шаблон процесса «Оформление заявок», связанный с шаблоном записи «Заявки».

В шаблоне «Оформление заявок» имеются пользовательские задачи, которым назначены различные исполнители.

Настройка вычислений

  1. На диаграмме процесса «Оформление заявок» назначьте себя исполнителем любой из задач.
  2. В шаблоне «Заявки» создайте атрибут со следующими свойствами:

    • Название: Ответственные
    • Тип данных: аккаунт
    • Хранить несколько значений: флажок установлен
    • Вычислять автоматически: флажок установлен
    • Вычисляемое значение: N3
    # Импортируем функции для работы  
    # с логикой, задачами и статусами задач.
    @prefix cmw: <http://comindware.com/logics#>.
    @prefix task: <http://comindware.com/ontology/task#>.
    @prefix taskStatus: <http://comindware.com/ontology/taskStatus#>.
    @prefix account: <http://comindware.com/ontology/account#>.
    @prefix role: <http://comindware.com/ontology/role#>.
    {
    # Получаем задачи, связанные с текущей записью.
    ?tasks task:objectId ?item.
    # Получаем активные задачи.
    ?tasks cmw:taskStatus taskStatus:inProgress.
    # Получаем фактических и возможных исполнителей задач.
    # Проверяем различные варианты назначения задач.
    or{
    # Возвращаем фактического исполнителя,
    # если он назначен через группы и роли.
    ?tasks cmw:assignee ?assigneeRoles.
    ?assigneeRoles role:roleMembers ?groupMembers.
    ?groupMembers account:groupUsers ?value.
    }
    or {

    # Возвращаем фактического исполнителя,
    # если он назначен через роли.
    ?tasks cmw:assignee ?assigneeRoles.
    ?assigneeRoles role:roleMembers ?value.
    }
    or {
    # Возвращаем фактического исполнителя,
    # если он назначен через аккаунт.
    ?tasks cmw:assignee ?value.
    }
    or{
    # Возвращаем список возможных исполнителей,
    # если они назначены через группы и роли.
    ?tasks cmw:possibleAssignee ?possibleRoles.
    ?assigneeRoles role:roleMembers ?groupMembers.
    ?groupMembers account:groupUsers ?value.
    }
    or {

    # Возвращаем список возможных исполнителей,
    # если они назначены через роли.
    ?tasks cmw:possibleAssignee ?possibleRoles.
    ?assigneeRoles role:roleMembers ?value.
    }
    or {
    # Возвращаем список возможных исполнителей,
    # если они назначены через аккаунты.
    ?tasks cmw:possibleAssignee ?value.
    }.
    # Оставляем только активные аккаунты.
    ?value account:active true.
    # Исключаем отключенные аккаунты.
    not {?value cmw:isDisabled true.}.
    }
  3. Создайте атрибут со следующими свойствами:

    • Название: У вас имеются задачи
    • Тип данных: логический
    • Вычислять автоматически: флажок установлен
    • Вычисляемое значение: N3
    # Импортируем функции для работы  
    # с логикой, задачами и статусами задач.
    @prefix cmw: <http://comindware.com/logics#>.
    @prefix task: <http://comindware.com/ontology/task#>.
    @prefix taskStatus: <http://comindware.com/ontology/taskStatus#>.
    @prefix account: <http://comindware.com/ontology/account#>.
    @prefix role: <http://comindware.com/ontology/role#>.
    {
    # Получаем аккаунт текущего пользователя из контекста безопасности.
    cmw:securityContext cmw:currentUser ?currentUser.
    # Получаем роли текущего пользователя.
    ?roles role:roleMembers ?currentUser.
    # Получаем группы, в которые входит пользователь.
    ?userGroups account:groupUsers ?currentUser.
    ?groupRoles role:roleMembers ?userGroups.
    # Получаем задачи, связанные с текущей записью.
    ?tasks task:objectId ?item.
    # Получаем активные задачи.
    ?tasks cmw:taskStatus taskStatus:inProgress.
    # Проверяем различные варианты назначения задачи.
    once {
    or {
    # Проверяем, назначена ли задача на текущего пользователя.
    ?tasks cmw:assignee ?currentUser.
    }
    or {
    # Проверяем, является ли пользователь возможным исполнителем.
    ?tasks cmw:possibleAssignee ?currentUser.
    }
    or {
    # Проверяем, назначена ли задача на роль пользователя.
    ?tasks cmw:assignee ?roles.
    }
    or {
    # Проверяем, является ли роль пользователя возможным исполнителем.
    ?tasks cmw:possibleAssignee ?roles.
    }
    or {
    # Проверяем, назначена ли задача на группу пользователя.
    ?tasks cmw:assignee ?groupRoles.
    }
    or {
    # Проверяем, является ли группа пользователя возможным исполнителем.
    ?tasks cmw:possibleAssignee ?groupRoles.
    }.
    }.
    # Возвращаем True, если у текущего пользователя есть задачи.
    ?true -> ?value
    }
  4. Поместите атрибуты «Ответственные» и «У вас имеются задачи» на форму шаблона «Заявки».

  5. Установите для поля «У вас имеются задачи» на форме отображение в качестве переключателя.

Тестирование

  1. Запустите процесс «Оформление заявок».
  2. Откройте заявку, созданную при запуске процесса.
  3. В поле «Ответственные» должен отображаться список исполнителей текущей задачи по заявке.
  4. В поле «У вас имеются задачи» должно отобразиться значение «Да»
К началу