Фильтрация списка по активным задачам текущего пользователя с помощью N3: по всем процессам, по конкретному процессу
Введение
В Comindware Platform можно настроить фильтрацию списка задач, чтобы отображать только активные задачи текущего пользователя. Это может быть полезно для создания персональных представлений задач или для мониторинга текущих задач пользователя. Например, можно создать список задач с особыми столбцами на странице «Мои задачи» в дополнение к системным спискам задач, которые нельзя настроить.
Здесь представлены примеры настройки системного фильтра для таблицы со списком задач текущего пользователя по всем процессам и по определённому процессу.
См. также «Создание таблицы со списком задач».
Прикладная задача
Имеется два бизнес-процесса: «Оформление заявок» и «Ведение проектов».
В обоих процессах имеются пользовательские задачи, назначенные разным исполнителям.
Требуется добавить на страницу «Мои задачи» две таблицы для отображения:
- всех активных задач текущего пользователя по всем процессам;
- активных задач текущего пользователя в рамках конкретного процесса.
В таблицах должны быть столбцы с данными заявок и проектов, связанных с задачами, а также не требуется отображать стандартный столбец «Исполнитель», так как он всегда указывает текущего пользователя. Этого нельзя достичь с помощью системных списков активных и завершённых задач.
Настройка таблиц
Таблица со списком всех активных задач пользователя
- В любом из шаблонов процессов создайте таблицу задач «Задачи по всем процессам».
- Добавьте в таблицу необходимые столбцы.
-
В свойствах таблицы установите следующий системный фильтр на языке N3:
# Импортируем функции для работы
# с логикой, статусами задач, аккаунтами и ролями
@prefix cmw: <http://comindware.com/logics#>.
@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.
# Помещаем массив всех задач в переменную ?item
# Если выражение используется в таблице задач процесса,
# то эта строка не требуется, т. к. контекст уже будет задачами.
?item a cmw:UserTask.
# Начинаем цикл по массиву задач.
# Получаем активные задачи.
?item cmw:taskStatus taskStatus:inProgress.
# Получаем роли текущего пользователя.
?roles role:roleMembers ?currentUser.
# Получаем группы, в которые входит пользователь.
?currentUser account:userGroupMembership ?groups.
# Получаем роли, в которые входят группы пользователя.
?roleGroups role:roleMembers ?groups.
# Проверяем, является ли текущий пользователь
# фактическим или возможным исполнителем задачи.
# Проверяем различные варианты назначения задачи.
or {
# Проверяем, назначена ли задача на текущего пользователя.
?item cmw:assignee ?currentUser.
}
or {
# Проверяем, является ли пользователь возможным исполнителем.
?item cmw:possibleAssignee ?currentUser.
}
or {
# Проверяем, назначена ли задача на роль пользователя.
?item cmw:assignee ?roles.
}
or {
# Проверяем, является ли роль возможным исполнителем.
?item cmw:possibleAssignee ?roles.
}
or {
# Проверяем, назначена ли задача на группу пользователя.
?item cmw:assignee ?roleGroups.
}
or {
# Проверяем, является ли группа возможным исполнителем.
?item cmw:possibleAssignee ?roleGroups.
}.
}
-
Добавьте таблицу «Задачи по всем процессам» на страницу «Мои задачи». См. «Создание таблицы со списком задач».
Фильтр по задачам конкретного процесса
Чтобы получить в таблице список всех активных задач, где текущий пользователь является исполнителем (а также возможным исполнителем, если задача назначена на нескольких пользователей) по конкретному процессу, используйте следующее выражение в системном фильтре таблицы:
- В шаблоне процесса «Ведение проектов» создайте таблицу задач «Задачи по проектам».
- Добавьте в таблицу необходимые столбцы.
-
В свойствах таблицы установите следующий системный фильтр на языке N3:
# Импортируем функции для работы с логикой, задачами,
# статусами задач, объектами, аккаунтами и ролями
@prefix cmw: <http://comindware.com/logics#>.
@prefix taskStatus: <http://comindware.com/ontology/taskStatus#>.
@prefix object: <http://comindware.com/ontology/object#>.
@prefix account: <http://comindware.com/ontology/account#>
@prefix role: <http://comindware.com/ontology/role#>.
{
# Получаем шаблон процесса по его системному имени
?process object:alias "СистемноеИмяШаблонаПроцесса".
# Получаем аккаунт текущего пользователя из контекста безопасности.
cmw:securityContext cmw:currentUser ?currentUser.
# Помещаем массив всех задач в переменную ?item
# Если выражение используется в таблице задач процесса,
# то эта строка не требуется, т. к. контекст уже будет задачей.
?item a cmw:UserTask.
# Начинаем цикл по массиву задач
# Фильтруем задачи по конкретному процессу.
?item cmw:container ?process.
# Получаем активные задачи.
?item cmw:taskStatus taskStatus:inProgress.
# Получаем роли текущего пользователя.
?roles role:roleMembers ?currentUser.
# Получаем группы, в которые входит пользователь.
?currentUser account:userGroupMembership ?groups.
# Получаем роли, в которые входят группы пользователя.
?roleGroups role:roleMembers ?groups.
# Проверяем, является ли текущий пользователь
# фактическим или возможным исполнителем задачи.
# Проверяем различные варианты назначения задачи.
or {
# Проверяем, назначена ли задача на текущего пользователя.
?item cmw:assignee ?currentUser.
}
or {
# Проверяем, является ли пользователь возможным исполнителем.
?item cmw:possibleAssignee ?currentUser.
}
or {
# Проверяем, назначена ли задача на роль пользователя.
?item cmw:assignee ?roles.
}
or {
# Проверяем, является ли роль возможным исполнителем.
?item cmw:possibleAssignee ?roles.
}
or {
# Проверяем, назначена ли задача на группу пользователя.
?item cmw:assignee ?roleGroups.
}
or {
# Проверяем, является ли группа возможным исполнителем.
?item cmw:possibleAssignee ?roleGroups.
}.
}
-
Добавьте таблицу «Задачи по проектам» на страницу «Мои задачи».
Тестирование
- Запустите процессы «Оформление заявок» и «Ведение проектов».
- Откройте страницу «Мои задачи».
- Рядом со вкладками «Активные» и «Завершённые» должны отображаться вкладки «Задачи по всем процессам» и «Задачи по проектам».
- Проверьте, что в таблицах отображаются соответствующие задачи.
Эта статья была полезна 1 чел.