Периодические напоминания об открытых задачах. Настройка процессов, сценария и HTML-текста письма
Введение
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

Настройка действия «Изменить значения атрибутов»
-
-
Настройте вызов процесса:
- Записи для запуска процесса: атрибут «Сотрудникам на отправку»
- Шаблон вызываемого процесса: атрибут «Отправка напоминания»

Настройка подпроцесса -
Опубликуйте и протестируйте процесс.
Перед началом тестирования проверьте работоспособность подключения для отправки почты и правильность настройки исходящего пути передачи данных.
Эта статья была полезна 2 чел.