Использование бизнес-процессов для автоматизации повторяющихся задач. Зацикливание процесса
Glossary Item Box
Бизнес-процессы могут использоваться для автоматизации повторяющихся задач или для циклического выполнения определенных задач. В идеале один цикл должен соответствовать одному экземпляру бизнес-процесса, который повторяется автоматически. Выполнение нескольких задач может повторяться в ходе одного экземпляра процесса. Однако не рекомендуется создавать бизнес-процессы, которые зацикливаются большое количество раз.
Если позволяет бизнес-логика процесса, рекомендуется запускать процессы, которые дают большую нагрузку на систему, в нерабочее время.
В бизнес-процессах BPMN можно решить вопрос повторяющихся задач несколькими способами.
- Повторно запускать процесс, используя элемент [Стартовый таймер].
- Использовать событийный подпроцесс для выполнения повторяющихся задач.
- Зациклить процесс для выполнения определенной последовательности действий до выполнения определенного условия.
Создавая бизнес-процессы с действиями, повторяющимися при выполнении каждого экземпляра процесса, учитывайте [Максимальное число повторений] ([Maximum Number of Repetitions]). Это значение ограничивает количество раз, которое элемент может быть выполнен в рамках экземпляра процесса, и по умолчанию составляет 100 повторений (рис. 1).
Рис. 1 — Свойство [Максимальное число повторений] бизнес-процесса
При использовании циклов, необходимо обязательно контролировать результат выполнения бизнес-процесса. В случае, если бизнес-процесс завершается с сообщением об ошибке, ее нужно как можно быстрее исправлять. Не допускайте накопление ошибок в журнале бизнес-процессов.
При первых запусках бизнес-процесса с циклом необходимо провести его тестирование - замерить параметры нагрузки и быстродействия системы во время выполнения бизнес-процесса. Таким образмо можно сразу выявить проблемы и устранить их.
Пример процесса, который автоматизирует выполнение повторяющихся задач доступен в шаблоне Привлечение неактивных клиентов на онлайн-площадке Creatio marketplace. Ниже приведено пошаговое руководство по созданию упрощенного процесса, похожего на упомянутый шаблон.
Описание примера
Создадим бизнес-процесс, который будет регулярно отправлять email-уведомления сотрудникам об их просроченных задачах.
В основном подобные процессы состоят из следующих шагов:
- Процесс запускается регулярно с помощью таймера.
- Обновляет состояние записей, которые должны быть обработаны.
- Проверяет, есть ли необработанные записи. Если необработанных записей нет, то процесс завершается.
- Выбирает первую запись для обработки.
- Обрабатывает запись.
- Тегирует запись как обработанную.
- Проверяет, есть ли другие необработанные записи. Если необработанных записей нет, то процесс завершается.
Процесс повторяет перечисленные действия до тех пор, пока все записи будут обработаны.
Использование зацикливания процессов для автоматизации описанных в статье циклов для перебора записей может привести к значительному снижению производительности. Мы не рекомендуем использование циклов для перебора.
Алгоритм реализации примера
Создадим диаграмму процесса, который регулярно запускается и повторяется, пока уведомления обо всех необработанных активностях не будут отправлены (рис. 2).
Рис. 2 — Процесс "Отправка напоминаний по просроченным активностям" ("Send reminders for overdue activities")
Процесс выполняется следующим образом:
- Элемент [Стартовый таймер]: "Запускать еженедельно"([Start timer]: "Run weekly") — процесс запускается каждый понедельник.
- Действие системы [Удалить данные]: "Снять теги предыдущего экземпляра процесса" ([Delete data]: "Delete tags from previous process instance") — процесс удаляет теги, которыми были тегированы активности, обработанные неделю назад (при выполнении предыдущего экземпляра процесса).
- Действие системы [Читать данные]: "Подсчитать количество просроченных активностей" ([Read data]: "Calculate the number of overdue activities") — процесс проверяет, есть ли необработанные просроченные активности в системе.
- 4.Логический оператор Исключающее "ИЛИ"(Exclusive gateway (OR)), который разветвляет процесс, в зависимости от результата выполнения шага "Подсчитать количество просроченных активностей":
- Если количество необработанных просроченных активностей равно 0, то процесс завершается (условный поток).
- Если необработанные просроченные активности обнаружены, то процесс переходит на шаг “Читать данные следующей просроченной активности” (поток по умолчанию).
- Действие системы [Читать данные]: "Читать данные следующей просроченной активности" ([Read data]: "Read data of the next overdue activity") — процесс вычитывает первую необработанную просроченную активность и получает данные для отправки email-уведомления (ответственный, срок выполнения и тема).
- Действие пользователя [Отправить email]: "Отправить email-уведомление" ([Send email]: "Send email notification") — процесс отправляет email-напоминание ответственному по последней необработанной просроченной активности (тому, чьи данные были получены элементом [Читать данные] на шаге "Читать данные следующей просроченной активности").
- Действие системы [Добавить данные]: "Тегировать обработанную активность" ([Add data]: "Tag processed activity") — процесс добавляет тег "Напоминание отправлено" активности, ответственному по которой было отправлено email-уведомление. Бизнес-процесс считает такие активности обработанными и не отправляет повторных уведомлений по ним в рамках одного экземпляра процесса.
- Промежуточное событие [Обработка таймера]: "Стартовать через 10 секунд" ([Wait for timer]: "Wait for 10 seconds") — приостанавливает процесс на 10 секунд до начала следующего цикла. Исходящий поток этого элемента зацикливает процесс, соединяя таймер с действием системы по вычитке данных: "Подсчитать количество просроченных активностей", в результате чего повторяются с 3 по 8 шаги процесса.
В зацикленном процессе должен быть способ отличать записи, по которым уже были отправлены напоминания, чтобы избежать их повторной обработки. Это легко выполняется с помощью тегов:
- Добавьте публичный тег в разделе, содержащем записи, с которыми работает бизнес-процесс. Например, для процесса, который отправляет напоминания по активностям, добавьте публичный тег "Напоминание отправлено" в разделе [Активности].
- При запуске каждого нового экземпляра процесса состояние "обработано" должно сбрасываться. Для этого используется элемент [Удалить данные], при выполнении которого будут сняты теги со всех записей, которые были тегированы в ходе предыдущего экземпляра процесса.
- При запуске каждого нового цикла в ходе выполнения экземпляра процесса процесс выбирает только необработанные записи. Для настройки используется простой фильтр.
- При завершении каждого цикла в рамках экземпляра процесса обработанные записи должны тегироваться. Настройка тегирования выполняется с помощью элемента [Добавить данные]. Таким образом при выполнении следующего цикла тегированные записи не будут обрабатываться процессом повторно.
При использовании циклов необходимо придерживаться стандартов разработки и не создавать постоянную нагрузку на базу данных:
- В каждой итерации цикла обязательно должна быть пауза.
- Логика созданного бизнес-процесса не должна допускать его бесконечного выполнения.
Настройки шага процесса "Запускать еженедельно" ("Run weekly") (рис. 3):
Рис. 3 — Стартовый таймер "Запускать еженедельно" ("Run weekly")
Настройки шага процесса "Снять теги предыдущего экземпляра процесса" (рис. 4):
Рис. 4 — Элемент [Удалить данные], шаг процесса "Снять теги предыдущего экземпляра процесса"
Настройки шага процесса "Подсчитать количество просроченных активностей" (рис. 5):
Рис. 5 — Элемент [Читать данные], шаг процесса "Подсчитать количество просроченных активностей"
В блоке [Как отфильтровать записи?] настройте фильтр, чтобы отобрать просроченные активности, которые не были помечены тегом "Напоминание отправлено".
- Для этого настройте фильтр по колонке [Завершение]: "Завершение < Сегодня".
- Чтобы отобрать невыполненные активности настройте фильтр по колонке [Состояние]: "Состояние = В работе; Не начата".
- Чтобы отобрать активности без тега "Напоминание отправлено", настройте фильтр по записям связанного объекта "Тег в записи раздела активности (по колонке Объект)".
Для настройки такого фильтра кликните [Добавить условие], а затем в окне выбора колонки нажмите [+] рядом с надписью [Активность], чтобы выбрать нужный связанный объект. Выберите из списка объектов "Тег в записи раздела активности (по колонке Объект)", в поле [Колонка] установите "Количество нажмите кнопку [Выбрать] (Рис. 6). Укажите тег, добавив подчиненный фильтр по колонке [Тег]: "Tag = Напоминание отправлено".
Рис. 6 — Настройка фильтра "Тег в записи раздела активности (по колонке Объект)" по записям связанного объекта
Настройки условного потока "Просроченных активностей 0" (рис. 7):
Рис. 7 — Настройка формулы для условного потока "Просроченных активностей 0"
- В поле [Условие перехода] нажмите кнопку .
- В открывшемся окне настройки формулы выполните настройки на вкладке [Элементы процесса].
- В левой колонке выберите элемент "Подсчитать количество просроченных активностей".
- В правой колонке дважды кликните на параметре [Количество записей]. Соответствующая переменная будет добавлена в формулу: [#Подсчитать количество просроченных активностей.Количество записей#]
- Дополните формулу следующим образом: [#Подсчитать количество просроченных активностей.Количество записей#] == 0
- Нажмите [Сохранить].
Настройки шага процесса "Читать данные следующей просроченной активности" (рис. 8):
Рис. 8 — Элемент [Читать данные], шаг процесса "Читать данные следующей просроченной активности"
- В поле [Какой режим чтения данных использовать?] укажите "Читать первую запись из выборки".
- В поле [Из какого объекта читать данные?] укажите "Активность".
- В области [Как отфильтровать записи?] настройте такой же фильтр, как в настройках шага "Подсчитать количество просроченных активностей".
- В области [Как отсортировать записи?] оставьте установленные по умолчанию значения. В области [Значения каких колонок вычитать?] укажите вариант "Только выбранных колонок" и по кнопке [+] добавьте колонки [Id], [Завершение], [Ответственный] и [Заголовок].
Настройки шага процесса "Отправить email-уведомление" (рис. 9):
Рис. 9 — Элемент [Отправить email], шаг процесса "Отправить email-уведомление"
- В поле [От кого] выберите почтовый адрес, с которого будет отправлено письмо.
- Поле [Кому] свяжите с параметром [Id] элемента "Читать данные следующей просроченной активности".
Рис. 10 — Заполнение поля [Кому] с помощью параметра [Контакт]
a. В поле [Кому] нажмите .
b. В появившемся меню выберите [Контакт] —> "Параметр процесса". Откроется окно выбора параметра.
c. В левой колонке выберите "Читать данные следующей просроченной активности".
d. В правой колонке дважды кликните на параметре [Контакт].
3. В поле [Какое сообщение отправить?] выберите "Произвольное письмо" и заполните поле [Тема], которое отобразится ниже.
4. Настройте шаблон письма.
a. Кликните по серой области под полем темы (область и иконкой ), чтобы открыть шаблон произвольного письма в дизайнере контента.
b. Перетащите подходящий блок контента в тело шаблона и добавьте в него ваш текст.
c. Для использования в письме значений параметров, поместите курсор в текстовый блок письма и кликните на панели инструментов (рис. 11). В окне выбора параметра выберите элемент и его параметр, который должен использоваться в тексте письма.
На заметку
Больше информации о настройке произвольных email-сообщений в рамках бизнес-процесса доступно в статье "Как использовать параметры процесса в теле письма".
Рис. 11 — Добавление значений параметров в текст письма
Настройки шага процесса "Тегировать обработанную активность" (рис. 12):
Рис. 12 — Элемент [Добавить данные], шаг процесса "Тегировать обработанную активность"
- В поле [В какой объект добавить данные?] выберите объект "Тег в записи раздела активности".
- В поле [Какой режим добавления данных?] выберите "Добавить одну запись".
- В блоке [Какие значения колонок установить?] кликните "+". Откроется окно выбора колонок.
- Отметьте колонки [Объект] и [Тег]. Поля [Объект] и [Тег] будут добавлены на панель настройки элемента [Добавить данные].
- Поле [Объект] свяжите с параметром [Id] элемента "Читать данные следующей просроченной активности".
- В поле [Объект] нажмите .
- В появившемся меню выберите [Контакт] —> "Параметр процесса". Откроется окно выбора параметра.
- В левой колонке выберите "Читать данные следующей просроченной активности".
- В правой колонке дважды кликните на параметре [Id].
- В поле [Тег] укажите тег, которым должны помечаться обработанные записи:
- В поле [Тег] нажмите .
- В появившемся меню выберите "Значение справочника". Откроется окно выбора значения из справочника.
- Выберите тег "Напоминание отправлено".
Настройки таймера "Стартовать через 10 секунд" (рис. 13), с помощью которого устанавливается пауза между циклами процесса. Укажите длительность паузы в секундах в поле [Стартовать через (сек.)] панели настроек элемента.
Рис. 13 — Элемент [Обработка таймера], шаг процесса "Стартовать через 10 секунд"
В результате:
- Процесс будет запускаться автоматически каждый понедельник в 8:00.
- При выполнении процесса тег "Напоминание отправлено" будет сниматься со всех записей. Затем будет подсчитано количество незавершенных активностей с датой завершения до текущего дня, которые не помечены тегом "Напоминание отправлено".
- Если такая активность будет найдена, то процесс вычитает ее данные, отправит email-уведомление ответственному и добавит обработанной записи тег "Напоминание отправлено".
- После этого процесс прервется на 10 минут перед тем, как снова подсчитать количество просроченных необработанных (нетегированных) активностей.
- Если необработанных активностей не найдено, то процесс завершается.