Использование бизнес-процессов для автоматизации повторяющихся задач. Зацикливание процесса
Glossary Item Box
Бизнес-процессы могут использоваться для автоматизации повторяющихся задач или для циклического выполнения определенных задач. В идеале один цикл должен соответствовать одному экземпляру бизнес-процесса, который повторяется автоматически. Выполнение нескольких задач может повторяться в ходе одного экземпляра процесса. Однако не рекомендуется создавать бизнес-процессы, которые зацикливаются большое количество раз.
ВАЖНО
Если позволяет бизнес-логика процесса, рекомендуется запускать процессы, которые дают большую нагрузку на систему, в нерабочее время.
В бизнес-процессах BPMN можно решить вопрос повторяющихся задач несколькими способами.
- Повторно запускать процесс, используя элемент [Стартовый таймер].
- Использовать событийный подпроцесс для выполнения повторяющихся задач.
- Зациклить процесс для выполнения определенной последовательности действий до выполнения определенного условия.
Создавая бизнес-процессы с действиями, повторяющимися при выполнении каждого экземпляра процесса, учитывайте [Максимальное число повторений] ([Maximum Number of Repetitions]). Это значение ограничивает количество раз, которое элемент может быть выполнен в рамках экземпляра процесса, и по умолчанию составляет 100 повторений (Рис. 1).
Рис. 1 — Свойство [Максимальное число повторений] бизнес-процесса
ВАЖНО
При использовании циклов, необходимо обязательно контролировать результат выполнения бизнес-процесса. В случае, если бизнес-процесс завершается с сообщением об ошибке, ее нужно как можно быстрее исправлять. Не допускайте накапление ошибок в журнале бизнес-процессов.
ВАЖНО
При первых запусках бизнес-процесса с циклом необходимо провести его тестирование - замерить параметры нагрузки и быстродействия системы во время выполнения бизнес-процесса. Таким образмо можно сразу выявить проблемы и устранить их.
Пример процесса, который автоматизирует выполнение повторяющихся задач доступен в шаблоне Привлечение неактивных клиентов на онлайн-площадке bpm’online 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 минут перед тем, как снова подсчитать количество просроченных необработанных (нетегированных) активностей.
- Если необработанных активностей не найдено, то процесс завершается.