Вычисление исполнителя текущей активной задачи
Введение
В Comindware Platform можно вычислить исполнителя активной задачи по записи, связанной с экземпляром бизнес-процесса. Это может быть полезно для отображения информации об ответственном за задачу или в иных вычислениях.
Прикладная задача
Имеется бизнес-процесс с пользовательскими задачами.
Задаче может быть назначен как один исполнитель, так список возможных исполнителей.
С бизнес-процессом связана запись.
Для этой записи требуется:
- получить список исполнителей активных задач и поместить его в атрибут типа «Аккаунт»;
- определить, имеются ли задачи у текущего пользователя, и записать соответственно значение
True
илиFalse
в логический атрибут.
Исходные данные
Имеется шаблон процесса «Оформление заявок», связанный с шаблоном записи «Заявки».
В шаблоне «Оформление заявок» имеются пользовательские задачи, которым назначены различные исполнители.
Настройка вычислений
- На диаграмме процесса «Оформление заявок» назначьте себя исполнителем любой из задач.
-
В шаблоне «Заявки» создайте атрибут со следующими свойствами:
- Название: Ответственные
- Тип данных: аккаунт
- Хранить несколько значений: флажок установлен
- Вычислять автоматически: флажок установлен
- Вычисляемое значение: 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.}.
}
-
Создайте атрибут со следующими свойствами:
- Название: У вас имеются задачи
- Тип данных: логический
- Вычислять автоматически: флажок установлен
- Вычисляемое значение: 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
}
-
Поместите атрибуты «Ответственные» и «У вас имеются задачи» на форму шаблона «Заявки».
- Установите для поля «У вас имеются задачи» на форме отображение в качестве переключателя.
Тестирование
- Запустите процесс «Оформление заявок».
- Откройте заявку, созданную при запуске процесса.
- В поле «Ответственные» должен отображаться список исполнителей текущей задачи по заявке.
- В поле «У вас имеются задачи» должно отобразиться значение «Да»
Эта статья была полезна 2 чел.