15
Глава 3.1 Конечный автомат Что такое конечный автомат? Конечный автомат – это способ организации выполнения процесса с возможностью переключения между ветками состояний во время выполнения конечного автомата. Переключение возможно в любом порядке включая возможность возврата на ветки которые ранее посещались. Каждая ветка конечного автомата называтеся Состоянием. Переключение между состояниями выполняется посредством действия Изменение состояния. Конечный автомат необходим для .отражения в процессе логики обработки машины состояний для моделируемого объекта. Типичным примером применения конечного автоматам является моделирование состояний заявки.

31 Конечный автомат

Embed Size (px)

DESCRIPTION

Глава книги по Nintex Workflow 2010 - 3.1 Конечный автомат

Citation preview

Page 1: 31 Конечный автомат

Глава 3.1 Конечный автомат

Что такое конечный автомат?

Конечный автомат – это способ организации выполнения процесса с возможностью переключения между ветками состояний во время выполнения конечного автомата. Переключение возможно в любом порядке включая возможность возврата на ветки которые ранее посещались. Каждая ветка конечного автомата называтеся Состоянием. Переключение между состояниями выполняется посредством действия Изменение состояния. Конечный автомат необходим для .отражения в процессе логики обработки машины состояний для моделируемого объекта.

Типичным примером применения конечного автоматам является моделирование состояний заявки.

Рисунок 1 Пример схемы машины состояний

Заявка может иметь следующие состояния:

Page 2: 31 Конечный автомат

Подготовка Согласование руководителем Согласование ответственным сотрудником профильного подразделения Выполнение Доставка Выполнена

У заявки также могут быть состояния альтернативные или исключительные сценарии:

Доработка Не согласовано Отмена Отказ Ожидает поставки оборудования.

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

Рисунок 2 Пример перечня состояний в Конечном автомате

Page 3: 31 Конечный автомат

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

Рисунок 3 Пример отображения конечного автомата после определения перечня состояний

Создание и настройка конечного автомата

Действия Конечный автомат и Изменение состояния конечного автомата находятся в группе действий “Действия рабочего процесса”.

Рисунок 4 Пикторграммы действий Конечный автомат и Изменение состояния

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

Рисунок 5 Настройка конечного автомата

Page 4: 31 Конечный автомат

Порядок отображения состояний конечного автомата не важен так как за порядок переключения конечного автомата отвечает проектировщик процесса – используя внутри конечного автомата действие Изменение состояния. Изменить порядок отображения состояний Конечного автомата вручную нельзя.

Рисунок 6 Конечный автомат с тремя состояниями

Переключение состояний

Переключение состояний

Для перехода между состояниями Конечного автомата необходимо воспользоваться действием Изменение состояния. В настройке данного действия вам необходимо выбрать целевое состояние.

Внимание! Переключение состояния конечного автомата выполняется в конце ветки. Если вы два раза подряд укажете Переключение состояния то реально выполнится последнее действие. Так, если вы поставите в ветке конечного автомата два последовательных действия по изменению состояния – то выполнится только последнее.

Page 5: 31 Конечный автомат

Рисунок 7 Выполнение переключения состояния

Наличие действий после действия с указанием изменения состояния допустимо. Таким образом вы можете выполнять завершающие действия в данном состоянии. Например, вносить записи в журнал событий, обновлять данные элемента с которым работаете – например, указать дату выполнения работ в текущем состоянии.

Page 6: 31 Конечный автомат

Рисунок 8 Пример выполненной схемы конечного автомата с действием после блока Изменение состояния

Условный переход на конечное состояние

Если в одном из состояний конечного автомата вам необходимо, например, на основании значения переменной определить куда дальше переходить – появляется условный переход на конечное состояние.

Для этого вы можете воспользоваться действием “Выполнить при условии” или “Переключить”. В данных действиях вы можете проверить условия и перейти, в зависимости от значения, в одно из состояний автомата.

Page 7: 31 Конечный автомат

Рисунок 9 После выполнения действия Изменение состояния процесс продолжит выполнение до конца состояния

Внимание! Следует помнить что переход в указанное вами состояние после проверки условия не будет выполнен в точке вызова действия. Процесс сначала дойдет до конца ветки состояния а затем только выполнит переход в указанное состояние.

Таким образом, если поставить после условия переход на другое состояние – именно последнее выполнение действия “Изменение состояния” определит в какое состояние перейдет конечный автомат. Данное поведение приведет к логической ошибке выполнения процесса – процесс отработает технически корректно, но с точки зрения разработчика процесса это будет ошибка. Для того чтобы избежать подобной проблемы рекомендуется так строить условия проверки перехода в состояние чтобы они не пересекались и только гарантированно одно из них сработало.

Page 8: 31 Конечный автомат

Рисунок 10 Логическая ошибка в процессе

Выход из конечного автомата

Вы можете выйти из конечного автомата двумя способами:

Выполнить действие “Изменение состояния” и выбрать в нем состояние “Конечный автомат состояний” – это завершит конечный автомат. Если после конечного автомата определены какие либо действия – они выполнятся. Следует помнить что если после данного действия в состоянии определены какие либо действия – то они выполнятся.

Page 9: 31 Конечный автомат

Рисунок 11 Завершение конечного автомата через Изменение состояния

Выполнить действие “Остановить процесс” - это завершит процесс в целом и конечный автомат в частности. Если после действия “Окончание рабочего процесса” были указаны какие либо действия – они не выполнятся.

Page 10: 31 Конечный автомат

Рисунок 12 Завершение конечного автомата через действие "Окончание рабочего процесса"

Оба метода остановки конечного автомата действуют – но с разным эффектом.

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

Действие “Изменение состояния” работает намного мягче – оно позволяет выолниться до конца ветке состояния и не прерывает сам процесс. Если в процессе после машины состояния были определены какие-то действия – они выполнятся. Данный подход требует аккуратного определения порядка действия в ветке после этого действия – так как любое следующее действие “Изменение состояния” может переключить конечный автомат на другое состояние.

Какой из способов применять – зависит от специфика процесса и вашего вкуса.

Page 11: 31 Конечный автомат

Варианты компоновки конечного автомата

Конечный автомат в конечном автомате

Вы можете определить в одном из состояний вашего процесса вложенный конечный автомат.

Рисунок 13 Конечный автомат в конечном автомате

Применение данного подхода крайне редко требуется объективно на практике. Однако в случаях когда в рамках одного из состояний появляется набор состояний

Page 12: 31 Конечный автомат

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

Последовательные конечные автоматы

Вы можете выстроить цепочку из конечных автоматов – один конечный автомат за другим. Эта конструкция имеет смысл в ситуациях когда между двумя наборами состояний объекта существует граница, которую можно пересечь только один раз и в одну сторону. Хотя а практике такое встречается редко – обычно между состояниями есть возвраты или общие состояния (доработка) – есть случаи когда данная конструкция удобна. Если в задаче можно выделить такие последовательные наборы состояний – это поможет вам значительно разгрузить визуально схему процесса по горизонтали.

Рассмотрим пример когда данная конструкция будет удобна на практике. В качестве примера рассмотрим процесс управления вынесением вопроса на голосование. После того как вопрос выносимый на согласование Наблюдательного совета прошел согласование с руководителем инициатора, секретарем Наблюдательного совета, главой Наблюдательного совета – он переходит в отдельную группу состояний – голосование на Наблюдательном совете. Вторая группа состояний состоит из планирования голосования, голосования и обработки результатов. Если же далее предусматривается контроль его выполнения и решение является частью записи – то можно выделить и третью машину состояний.

Паралельное выполнение конечных автоматов

Вы можете выполнять несколько конечных автоматов паралельно – по сути это вариация выполнения конечного автомата в конечном автомате с помощью действия “Выполнить паралельные действия”. Этот подход к структурированию процесса имеет смысл использовать в случае встроенного жизненного цикла для нескольких подчиненных записей или для паралельного рассмотрения различных аспектов записи с собственными моделями состояний. Например, если договор проходит контуры проверки в безопасности (информационная безопасность, экономическая безопаность) в финансовом направлении (бухглатер, инвестиционный аналитик, МСФО аналитик).

Page 13: 31 Конечный автомат

Рисунок 14 Паралельное выполнение конечных автоматов