Введение
Comindware Platform поддерживает отправку пользователю стандартных уведомлений о назначенных ему задачах или процессных уведомлений с информацией из бизнес-процесса.
Здесь представлен пример настройки отправки исполнителям эл. писем с процессными уведомлениями о задачах в формате HTML.
См. также «Уведомления. Типы, назначение, настройка, использование».
Прикладная задача
Требуется отправлять сотрудникам эл. письма с напоминаниями о назначенных им задачах:
- напоминания необходимо отправлять ежедневно в в 7:00;
- письмо должно содержать перечень открытых задач сотрудника в виде таблицы.
Пример решения
Для реализации прикладной задачи настроим два бизнес-процесса:
- Поиск сотрудников с активными задачами — запускается по таймеру и находит сотрудников, у которых есть открытые задачи на момент запуска, затем для каждого сотрудника запускает процесс «Отправка напоминания».
- Отправка напоминания — формирует и отправляет эл. письмо каждому сотруднику.
Настройка процесса «Отправка напоминания»
Внимание!
Для корректной работы вычислений и запуска процессов указывайте в выражениях именно те системные имена шаблонов и атрибутов, которые фактически используются в вашем приложении. Они могут отличаться от указанных в примере.
- Создайте шаблон записи «Напоминания».
- Создайте шаблон процесса «Отправка напоминания», связанный с шаблоном «Напоминания».
-
В шаблоне «Напоминания» создайте следующие атрибуты:
- Сотрудник
- Системное имя:
Сотрудник
- Тип данных: аккаунт
- Описание: Пользователь, которому будет отправляться напоминание
- Системное имя:
- Кому
- Системное имя:
Кому
- Тип данных: текст
- Описание: Адрес эл. почты сотрудника
- Вычислять автоматически: флажок установлен
- Вычисляемое значение: формула
- Системное имя:
$Сотрудник->cmw.account.mbox
- Текст письма
- Системное имя:
Текстписьма
- Тип данных: текст
- Формат отображения: HTML-текст
- Описание: Текст письма с таблицей задач в формате HTML
- Вычислять автоматически: флажок установлен
- Вычисляемое значение: N3
- Системное имя:
# Импортируем функции для работы с логикой, строками, объектами,
# конфигурацией, статусами задач, аккаунтами и ролями.
@prefix cmw: <http://comindware.com/logics#>.
@prefix string: <http://www.w3.org/2000/10/swap/string#>.
@prefix cmwstring: <http://comindware.com/logics/string#>.
@prefix object: <http://comindware.com/ontology/object#>.
@prefix configuration: <http://comindware.com/ontology/configuration#>.
@prefix taskStatus: <http://comindware.com/ontology/taskStatus#>.
@prefix account: <http://comindware.com/ontology/account#>.
@prefix role: <http://comindware.com/ontology/role#>.
{
# Получаем базовый URL системы для формирования ссылок на задачи.
# Вместо <yourhost> подставьте адрес вашего сайта Comindware Platform
# либо используйте конструкцию:
#?confid configuration:baseUri ?baseUri.
?baseUri a "https://<yourhost>/".
# Находим атрибут «Сотрудник» в шаблоне «Напоминания»
# для получения данных об пользователе,
# которому будет отправлено напоминание.
("Напоминания" "Сотрудник") object:findProperty ?Employee.
?item ?Employee ?EmployeeVal.
# Формируем заголовок таблицы с задачами
# Создаем HTML-заголовок и начало таблицы со столбцами "Задача" и "Срок"
("<p style='font-size: 100%' >Перечень Ваших задач</p>" "<table border='1' style='width: 60%; border-collapse: collapse; border: 1px solid black' ><tBody> <tr><td style='padding: 2px; width: 200px; border: 1px solid black'>Задача</td> <td style='width: 200px; padding: 2px; border: 1px solid black'>Срок</td></tr>") string:concatenation ?firstHeaderRow.
# Собираем задачи пользователя
from {
# Получаем все задачи.
?tasks a cmw:UserTask.
# Получаем активные задачи.
?tasks cmw:taskStatus taskStatus:inProgress.
# Получаем роли пользователя.
?roles role:roleMembers ?EmployeeVal.
# Получаем группы, в которые входит пользователь.
?EmployeeVal account:userGroupMembership ?groups.
# Получаем роли, в которые входят группы пользователя.
?roleGroups role:roleMembers ?groups.
# Проверяем, является ли пользователь
# фактическим или возможным исполнителем задачи.
# Проверяем различные варианты назначения задачи.
or {
# Проверяем, назначена ли задача на пользователя.
?tasks cmw:assignee ?EmployeeVal.
}
or {
# Проверяем, является ли пользователь возможным исполнителем.
?tasks cmw:possibleAssignee ?EmployeeVal.
}
or {
# Проверяем, назначена ли задача на роль пользователя.
?tasks cmw:assignee ?roles.
}
or {
# Проверяем, является ли роль возможным исполнителем.
?tasks cmw:possibleAssignee ?roles.
}
or {
# Проверяем, назначена ли задача на группу пользователя.
?tasks cmw:assignee ?roleGroups.
}
or {
# Проверяем, является ли группа возможным исполнителем.
?tasks cmw:possibleAssignee ?roleGroups.
}.
# Получаем название и ID задачи.
?tasks cmw:title ?title.
?tasks cmw:id ?id.
# Форматируем название и ID задачи для вставки в HTML.
("{0}" ?title) string:format ?titleVal.
("{0}" ?id) string:format ?idVal.
# Получаем срок выполнения задачи (если есть).
or {?tasks cmw:dueDate ?dueDate.}
or {"" -> ?dueDate.}.
# Форматируем дату для отображения.
("{0}" ?dueDate) string:format ?dueDateVal.
# Формируем строку таблицы с ссылкой на задачу и сроком.
("<tr><td class='A' style='padding: 2px; border: 1px solid black; '><a href='"?baseUri"#task/" ?idVal "'>" ?titleVal "</a></td><td align='right' style='padding: 2px; border: 1px solid black; text-align: right'>" ?dueDateVal "</td></tr>") string:concatenation ?firstRow.
} select ?firstRow -> ?firstFactRow.
# Объединяем все строки таблицы.
(" " ?firstFactRow) cmwstring:join ?firstFact.
# Формируем финальный HTML с заголовком, таблицей и закрывающими тегами.
(?firstHeaderRow ?firstFact "</tBody></table> <br/>") string:concatenation ?first.
# Возвращаем результат.
?first -> ?value.
}
- Сотрудник
-
Постройте диаграмму процесса по показанному на следующей иллюстрации образцу:
Диаграмма процесса «Отправка напоминания» -
Настройте событие-отправку сообщения. См. «Отправка эл. почты из сценариев».
- Опубликуйте процесс.
Настройка процесса «Поиск сотрудников с активными задачами»
- Создайте шаблон записи «Сотрудники для напоминаний».
- Создайте шаблон процесса «Поиск сотрудников с активными задачами», связанный с шаблоном «Сотрудники для напоминаний».
-
В шаблоне «Сотрудники для напоминаний» создайте атрибут:
- Сотрудники
- Системное имя:
Сотрудники
- Тип данных: аккаунт
- Хранить несколько значений: флажок установлен
- Вычислять автоматически: флажок установлен
- Вычисляемое значение: N3
- Системное имя:
# Импортируем основные функции для работы
# с логикой, контейнерами, аккаунтами и статусами задач
@prefix cmw: <http://comindware.com/logics#>.
@prefix container: <http://comindware.com/ontology/container#>.
@prefix account: <http://comindware.com/ontology/account#>.
@prefix taskStatus: <http://comindware.com/ontology/taskStatus#>.
{
# Получаем все задачи.
?tasks a cmw:UserTask.
# Получаем активные задачи.
?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.}.
}
- Сотрудникам на отправку
- Системное имя:
Сотрудникамнаотправку
- Тип данных: запись
- Связанный шаблон: Напоминания
- Взаимная связь с новым атрибутом: Найденные сотрудники (
Найденныесотрудники
) - Хранить несколько значений: флажок установлен
- Системное имя:
- Сотрудники
-
Постройте диаграмму процесса по показанному на следующей иллюстрации образцу:
Диаграмма процесса «Отправка напоминания» -
Настройте начальное событие-таймер на запуск ежедневно в 7:00.
Настройка таймера Примечание
При необходимости предусмотрите также простое начальное событие для запуска процесса вручную без необходимости ожидания нового рабочего дня.
-
Настройте сценарий на входе в действие «Вызов процесса» для создания записей, по которым будет запускаться подпроцесс.
Действия сценария на входе -
Внутрь действия «Сменить контекст» добавьте действие «Цикл по объектам» и настройте его, как показано ниже.
Добавление действия «Цикл по объектам» Переменная
local
хранит поочередно по одному экземпляру из указанной выборки.Внизу укажите атрибут «Сотрудники», в котором вычисляются сотрудники с активными задачами.
-
Добавьте действие «Создать запись» и настройте его.
Добавление действия «Создать запись» - Целевой шаблон записи — укажите шаблон записи «Напоминания».
- Ссылка на новую запись — укажите атрибут «Сотрудникам на отправку», созданный на шаге 3.
- Операция со значениями — укажите «Добавить».
-
Добавьте действие «Изменить значения атрибутов» и настройте таблицу атрибутов следующим образом:
- Атрибут: Сотрудник
- Операция со значениями: заменить
- Значение:
$$local
Настройка действия «Изменить значения атрибутов»
-
-
Настройте вызов процесса:
- Записи для запуска процесса: атрибут «Сотрудникам на отправку»
- Шаблон вызываемого процесса: атрибут «Отправка напоминания»
Настройка подпроцесса -
Опубликуйте и протестируйте процесс.
Перед началом тестирования проверьте работоспособность подключения для отправки почты и правильность настройки исходящего пути передачи данных.