Постановка задачи
Одна из неотъемлемых частей любого ECM-системы это управление бизнес-процессами или рабочий процесс.
Бизнес-процессы в каждой отдельной организации имеют множество нюансов.
Они постоянно меняются в связи с изменениями внутри организации, изменениями в законодательстве и т. д. Поэтому дешевле и логичнее привлечь к разработке бизнес-процессов либо аналитиков, либо программистов, специализирующихся на бизнес-логике.
Это значит, что создание и изменение бизнес-процессов должно быть максимально простым и удобным.
Кроме того, при изменении процесса уже запущенные процессы должны работать правильно.
Нельзя остановить долгое и сложное соглашение-договор только потому, что теперь согласованный документ должен печатать не инициатор соглашения, а секретарь.
Это диктует некоторые требования к движку бизнес-процессов:
- Процессы должны разрабатываться на основе блоков высокого уровня.
Примером такого блока может быть создание задачи на согласование документа, запуск подзадачи, выполнение произвольного фрагмента кода и т.п.
- При изменении схемы процесса необходимо обеспечить возможность конвертировать уже запущенные процессы в новую версию схемы.
Разработка на основе блоков высокого уровня
Упрощение разработки бизнес-процессов
Каждый блок маршрутов высокого уровня может состоять из большого количества действий (например, для блока задач требуется 68 действий).Это связано с тем, что в каждом блоке есть несколько событий, в обработчики которых можно написать код. Также обработка ошибок должна работать для каждой части блока (событий, внутренней логики блока).
Эта обработка делает следующее: если было выброшено исключение, оно анализируется, и в некоторых случаях необходимо не прерывать процесс, а повторить попытку через некоторое время.
При этом время ожидания до следующей попытки постепенно увеличивается с 5 минут до 1 часа.
Это необходимо в ситуациях, когда операцию не удалось завершить из-за проблем со связью, тайм-аута SQL-сервера и т. д. Можно было бы объединить блоки в составные действия, но WF не допускает действий с несколькими исходящими стрелками.
Например, блок маршрута «Задание на согласование документа» должен выглядеть так:
А WF позволяет делать только это:
Более того, вам также придется создать переменную и передать через нее результат выполнения задачи.
Вторая проблема — блоки выполняются параллельно.
Единственный способ сделать это в WF — использовать параллельный блок.
Но тогда вместо интуитивного:
Мы получаем:
Все это привело нас к выводу, что деятельности WF как таковой нам недостаточно; нам нужна схема высшего порядка, описывающая маршрут «сверху».
При разработке маршрута используются наши блочные классы (никак не связанные с WF), и только потом готовая схема конвертируется в Activity. Диаграммы процессов хранятся в форме XML; Генерация активности происходит в момент публикации маршрута на сервере приложений.
Помимо блоков, диаграммы содержат связи между блоками (стрелки от одного блока к другому).
Преобразование блоков в активность
Для каждого блока существует парный класс-строитель, генерирующий активность.Это выглядит примерно так:
Теги: #workflow #windows Workflow Foundation #ecm #bpm #ECM/EDMSpublic override System.Activities.Activity BuildContent() { var result = new Variable<bool>(this.Block.ResultVariableName); return new Sequence() {
-
Скромный Комплект №3 Запущен.
19 Oct, 24 -
О Переносе Домена.
19 Oct, 24 -
Идеальный Офис Для Малого Бизнеса
19 Oct, 24 -
Linkedin Готовится К Экспансии В Европу
19 Oct, 24