Периодические напоминания об открытых задачах. Настройка процессов, сценария и HTML-текста письма


Введение

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

Здесь представлен пример настройки отправки исполнителям эл. писем с процессными уведомлениями о задачах в формате HTML.

См. также «Уведомления. Типы, назначение, настройка, использование».

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

Требуется отправлять сотрудникам эл. письма с напоминаниями о назначенных им задачах:

  • напоминания необходимо отправлять ежедневно в в 7:00;
  • письмо должно содержать перечень открытых задач сотрудника в виде таблицы.

Пример решения

Для реализации прикладной задачи настроим два бизнес-процесса:

  • Поиск сотрудников с активными задачами — запускается по таймеру и находит сотрудников, у которых есть открытые задачи на момент запуска, затем для каждого сотрудника запускает процесс «Отправка напоминания».
  • Отправка напоминания — формирует и отправляет эл. письмо каждому сотруднику.

Настройка процесса «Отправка напоминания»

Внимание!

Для корректной работы вычислений и запуска процессов указывайте в выражениях именно те системные имена шаблонов и атрибутов, которые фактически используются в вашем приложении. Они могут отличаться от указанных в примере.

  1. Создайте шаблон записи «Напоминания».
  2. Создайте шаблон процесса «Отправка напоминания», связанный с шаблоном «Напоминания».
  3. В шаблоне «Напоминания» создайте следующие атрибуты:

    • Сотрудник
      • Системное имя: Сотрудник
      • Тип данных: аккаунт
      • Описание: Пользователь, которому будет отправляться напоминание
    • Кому
      • Системное имя: Кому
      • Тип данных: текст
      • Описание: Адрес эл. почты сотрудника
      • Вычислять автоматически: флажок установлен
      • Вычисляемое значение: формула
    $Сотрудник->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.
    }
  4. Постройте диаграмму процесса по показанному на следующей иллюстрации образцу:

    Диаграмма процесса «Отправка напоминания»
    Диаграмма процесса «Отправка напоминания»

  5. Настройте событие-отправку сообщения. См. «Отправка эл. почты из сценариев».

  6. Опубликуйте процесс.
  1. Создайте шаблон записи «Сотрудники для напоминаний».
  2. Создайте шаблон процесса «Поиск сотрудников с активными задачами», связанный с шаблоном «Сотрудники для напоминаний».
  3. В шаблоне «Сотрудники для напоминаний» создайте атрибут:

    • Сотрудники
      • Системное имя: Сотрудники
      • Тип данных: аккаунт
      • Хранить несколько значений: флажок установлен
      • Вычислять автоматически: флажок установлен
      • Вычисляемое значение: 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.}.
    }
    • Сотрудникам на отправку
      • Системное имя: Сотрудникамнаотправку
      • Тип данных: запись
      • Связанный шаблон: Напоминания
      • Взаимная связь с новым атрибутом: Найденные сотрудники (Найденныесотрудники)
      • Хранить несколько значений: флажок установлен
  4. Постройте диаграмму процесса по показанному на следующей иллюстрации образцу:

    Диаграмма процесса «Отправка напоминания»
    Диаграмма процесса «Отправка напоминания»

  5. Настройте начальное событие-таймер на запуск ежедневно в 7:00.

    Настройка таймера
    Настройка таймера

    Примечание

    При необходимости предусмотрите также простое начальное событие для запуска процесса вручную без необходимости ожидания нового рабочего дня.

  6. Настройте сценарий на входе в действие «Вызов процесса» для создания записей, по которым будет запускаться подпроцесс.

    Действия сценария на входе
    Действия сценария на входе

    1. Внутрь действия «Сменить контекст» добавьте действие «Цикл по объектам» и настройте его, как показано ниже.

      Добавление действия «Цикл по объектам»
      Добавление действия «Цикл по объектам»

      Переменная local хранит поочередно по одному экземпляру из указанной выборки.

      Внизу укажите атрибут «Сотрудники», в котором вычисляются сотрудники с активными задачами.

    2. Добавьте действие «Создать запись» и настройте его.

      Добавление действия «Создать запись»
      Добавление действия «Создать запись»

      • Целевой шаблон записи — укажите шаблон записи «Напоминания».
      • Ссылка на новую запись — укажите атрибут «Сотрудникам на отправку», созданный на шаге 3.
      • Операция со значениями — укажите «Добавить».
    3. Добавьте действие «Изменить значения атрибутов» и настройте таблицу атрибутов следующим образом:

      • Атрибут: Сотрудник
      • Операция со значениями: заменить
      • Значение: $$local

      Настройка действия «Изменить значения атрибутов»
      Настройка действия «Изменить значения атрибутов»

  7. Настройте вызов процесса:

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

    Настройка подпроцесса
    Настройка подпроцесса

  8. Опубликуйте и протестируйте процесс.

    Перед началом тестирования проверьте работоспособность подключения для отправки почты и правильность настройки исходящего пути передачи данных.

К началу


Номер Статьи: 4905
Размещено: Thu, Feb 9, 2023
Последнее обновление: Tue, Jul 1, 2025

Online URL: https://kb.comindware.ru/article/periodicheskie-napominaniya-ob-otkrytyh-zadachah-nastrojka-processov-scenariya-i-html-teksta-pisma-4905.html