Skip to content

Модели состояний

Что такое модель состояний

Модель состояний — это специальный тип поля (State Model, см. Типы полей) который описывает жизненный цикл записи: набор возможных статусов и допустимые переходы между ними. В отличие от обычного поля со списком значений, статус нельзя сменить на произвольный — доступны только те статусы, в которые разрешён переход из текущего.

В одной сущности может быть только одно поле типа State Model.

Готовый, разобранный по шагам пример того, как модель состояний работает на практике — статусы заявки, кто их меняет, что происходит при каждом переходе — смотрите в Service Desk (IT-поддержка): там вся механика показана на конкретной цепочке статусов «Новая → Назначена → В работе → … → Закрыта».

Статусы

Каждый статус модели состояний задаётся тремя атрибутами:

  • название — мультиязычная подпись, которая видна пользователям;
  • значение — техническое значение, которое реально сохраняется в данных записи;
  • цвет — для визуального выделения статуса в списках, карточке и таймлайне.

У статуса нет отдельных флагов «начальный» или «финальный» — это вычисляется через переходы:

  • начальным считается статус, в который ведёт переход без указанного источника (то есть назначается записи при её создании);
  • финальным (терминальным) считается статус, из которого не настроено ни одного исходящего перехода — в карточке записи и на таймлайне такой статус помечается значком «финальный».

Переходы

Переход — направленная связка «из статуса А в статус Б». Настраиваются они в редакторе сущности, на конфигурации поля State Model: для каждого статуса администратор указывает, в какие другие статусы из него можно перейти.

Переход не привязан к конкретной роли или пользователю — кто угодно с правом редактировать запись (и видеть это поле) может выполнить любой из разрешённых переходов. Ограничение конкретных людей или ролей, которые должны переводить запись между статусами, реализуется не самой моделью состояний, а соответствующей бизнес-логикой — например, назначением задачи нужной роли в бизнес-процессе, который и переводит статус по итогам выполнения задачи.

Как это выглядит в карточке записи

Поле статуса в карточке записи — это выпадающий список, но в нём показаны не все существующие статусы, а только те, переход в которые разрешён из текущего статуса записи. Например, если из статуса «В работе» настроены переходы только в «Ожидание» и «Решена», то именно эти два варианта (и больше ничего) увидит пользователь в выпадающем списке.

Если для статуса не настроено ни одного исходящего перехода (он терминальный, но это, возможно, ошибка конфигурации, а не намеренное финальное состояние), список статусов на всякий случай показывает все доступные варианты, а под полем появляется предупреждение, что переходов из текущего статуса не настроено — это защита от того, чтобы запись не «зависала» в статусе, откуда нет выхода.

Таймлайн статусов

Если у сущности настроено поле State Model, на карточке записи появляется вкладка статуса с визуальным таймлайном: граф, где узлы — это статусы, а стрелки — настроенные переходы. На графе:

  • текущий статус записи выделен;
  • уже пройденные статусы отмечены как посещённые;
  • статусы, в которые запись ещё не попадала, показаны бледно и пунктиром;
  • терминальные статусы помечены отдельным значком.

Клик по любому пройденному или текущему статусу открывает историю изменений записи за то время, когда она находилась в этом статусе. Таймлайн — это инструмент просмотра истории конкретной записи, а не место настройки переходов (настройка переходов — отдельный экран в редакторе сущности).

Один набор статусов — несколько подтипов записей

Если в сущности есть подтипы записей (поле типа Type Extender, см. Типы полей), статусы не дублируются для каждого подтипа. Все статусы (названия, цвета, значения) хранятся один раз в общем реестре сущности. Для каждого подтипа администратор отдельно настраивает только:

  • какие из общих статусов доступны этому подтипу (отметкой галочками);
  • какие переходы между этими статусами действуют именно для этого подтипа.

На практике это означает: если нужно переименовать статус или поменять его цвет, это делается один раз и сразу применяется ко всем подтипам, где этот статус используется. А чтобы у разных подтипов были разные жизненные циклы (например, у «Инцидента» — один набор переходов, у «Запроса на изменение» — другой), достаточно настроить только переходы для каждого подтипа, не пересоздавая сами статусы.

Документация Orbita ITSM