Автоматические цепочки подзадач в GLPI с SubTask Flow

Связывайте этапы обработки в GLPI в цепочку: SubTask Flow автоматически создаёт следующую задачу в соответствии с решением, зарегистрированным в ленте. Настройка через шаблоны, обнаружение циклов и SQL для аудита.

В этой статьеРазделов: 8

ИТ-процессы редко укладываются в один шаг. Диагностика ведёт к выполнению, выполнение - к проверке, и каждый этап имеет смысл только после результата предыдущего. В стандартном GLPI каждая из этих задач появляется из ручного ввода специалиста, что делает стандартизацию невозможной, как только растёт объём. Модуль SubTask Flow связывает эти этапы в цепочку: когда специалист регистрирует решение задачи в ленте, следующая создаётся автоматически в соответствии с этим ответом.

Почему ручное создание следующей задачи не масштабируется

Многие процессы обработки предсказуемы: проанализировать, выполнить, проверить, сообщить. GLPI предлагает шаблоны задач (TaskTemplates) для стандартизации содержимого каждого шага, но он не знает, что один шаг должен порождать следующий. Результат известен: специалист открывает нужный шаблон, копирует ответственного и срок и создаёт следующую задачу вручную. В среде с десятками специалистов это порождает три хронические проблемы: забытые этапы, расхождения данных между аналогичными заявками и полное отсутствие отслеживаемости того, «почему эта задача существует». Когда аудит спрашивает, была ли проведена проверка, ответ зависит от личной дисциплины каждого специалиста, а не от спроектированного процесса.

Как SubTask Flow связывает задачи по решению

Модуль создаёт иерархические связи между TaskTemplates. Родительский шаблон указывает на один или несколько дочерних, и каждый дочерний может быть обусловлен конкретным решением. Когда специалист регистрирует решение в ленте родительской задачи (или, если у шаблона нет условия, отмечает задачу как «Выполнено»), модуль выполняет три шага:

  1. Определяет дочерние шаблоны, привязанные к этому решению;
  2. Создаёт дочерние TicketTasks в ленте той же заявки;
  3. Копирует содержимое, категорию, длительность и ответственного (специалиста и группу), заданные в дочернем шаблоне.

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

Пошаговая настройка

  1. Стандартизируйте список решений в настройках модуля (например: «hardware», «software», «нет дефекта»). Относитесь к нему как к закрытому словарю, а не к свободному тексту.
  2. Откройте родительский TaskTemplate и привяжите дочерние шаблоны на вкладке цепочки.
  3. Для каждого дочернего шаблона укажите, какое решение его запускает. Условный дочерний шаблон требует, чтобы у родительского шаблона было состояние по умолчанию «Информация».
  4. Убедитесь, что у каждого дочернего шаблона заполнены ответственная группа или специалист и длительность - именно это поле причиняет больше всего проблем впоследствии.
  5. Протестируйте на тестовой заявке, прежде чем выпускать в продуктив: создайте тестовую родительскую задачу для каждого возможного решения, зарегистрируйте решение в ленте и убедитесь, что появляется нужная дочерняя задача с правильными данными.

Обнаружение циклов

Цепочка без защиты становится ловушкой. Шаблон A, порождающий B, который порождает C, который снова возвращается к A, пересоздавал бы одни и те же задачи на каждом круге, и процесс никогда бы не завершился. При сохранении новой связи модуль выполняет поиск в глубину (DFS) по графу шаблонов. Если находится цикл, он показывает предупреждение с путём петли, но связь остаётся сохранённой: удалить её - задача того, кто настраивает. Блокируется только связь шаблона с самим собой. Поэтому стоит соблюдать дисциплину любой автоматизации: короткие и понятные цепочки облегчают диагностику, когда что-то идёт не так, как ожидалось.

Отслеживаемость: вкладка журнала

Автоматизация без журнала - чёрный ящик. SubTask Flow ведёт историю выполнений с заявкой, родительской задачей, созданной дочерней задачей, тем, кто запустил, тем, кто завершил, и временными метками. При аудите это отвечает на самый частый вопрос - «эта подзадача создана кем-то или процессом, и из какой задачи?» - не полагаясь на чью-либо память. Это также первое место, куда смотреть, когда клиент сообщает, что «этап пропал»: журнал показывает, сработал ли триггер и из какой задачи.

Диагностика: аудит процесса через SQL

Тихая автоматизация требует активного мониторинга. Запрос ниже выводит ещё открытые подзадачи, созданные без назначенного ответственного, - классический симптом неполного дочернего шаблона. Выполняйте его на реплике для чтения или в окно низкой нагрузки:

-- Subtarefas em aberto (state=1) sem tecnico nem grupo responsavel.
-- Sinaliza TaskTemplate filho sem users_id_tech/groups_id_tech preenchido.
SELECT t.id                       AS chamado,
       tt.id                      AS task_id,
       tmpl.name                  AS modelo,
       tt.state,
       tt.users_id_tech,
       tt.groups_id_tech,
       tt.date_creation
FROM glpi_tickettasks tt
JOIN glpi_tickets t               ON t.id  = tt.tickets_id
LEFT JOIN glpi_tasktemplates tmpl ON tmpl.id = tt.tasktemplates_id
WHERE tt.state = 1
  AND tt.users_id_tech  = 0
  AND tt.groups_id_tech = 0
  AND t.is_deleted = 0
ORDER BY tt.date_creation DESC
LIMIT 200;

В GLPI state = 1 - это «К выполнению», а state = 2 - «Выполнено». Если этот список растёт каждую неделю, проблема не в модуле: это дочерний шаблон, опубликованный без ответственного, который порождает задачи, невидимые ни в чьей очереди.

Когда использовать (и когда нет)

ПодходКогда использоватьОграничение
Отдельная задача (вручную)Разовые процессы, малый объём, без повторенияНе стандартизирует и не отслеживает
Встроенный шаблон задачиПовторяющийся шаг с фиксированным содержимымНе связывает со следующим шагом
SubTask FlowУсловная последовательность задач внутри одной заявки, запускаемая решениемОбласть действия - заявка; не создаёт новых заявок
Проект GLPIПоставка с вехами, несколькими заявками, диаграммой Ганта и срокамиВысокие накладные расходы для короткого процесса
Бизнес-правилаМаршрутизация и назначение при создании заявкиНе управляет шагами после создания

Самая частая ошибка на практике

При сопровождении сред с большим количеством специалистов чаще всего встречается проблема не техническая, а моделирования. Кто-то настраивает дочерний шаблон на срабатывание по решению «Hardware», а вариант, который специалист реально выбирает на экране, - «hardware» строчными буквами или «HW» в среде, унаследовавшей словарь от другого инструмента. Триггер не совпадает, подзадача не создаётся, никто не получает ошибки, и этап выполнения просто исчезает из процесса, не оставляя видимого следа. Исправление, которое мы стандартизировали: относиться к строкам решений как к контролируемому словарю, все строчными буквами, задокументированными в единой таблице соответствий, и пересматривать дочерние шаблоны каждый раз, когда кто-то добавляет новое решение. Вторая повторяющаяся ошибка - дочерний шаблон без ответственного: задача рождается бесхозной, теряется посреди ленты и всплывает снова, только когда SLA уже нарушен. Поэтому SQL-запрос выше входит в чек-лист сопровождения, а не в разовый аудит.

NexTool внедряет и сопровождает среды GLPI с автоматизациями вроде SubTask Flow, спроектированными под реальную работу каждого клиента. Свяжитесь с нашей командой, чтобы описать и автоматизировать процесс задач вашей команды.


Проверено командой NexTool Solutions.

Часто задаваемые вопросы

Нет. GLPI предлагает шаблоны задач (TaskTemplates) для стандартизации содержимого каждого шага, но не запускает следующий шаг автоматически. SubTask Flow добавляет связь «родитель - потомок» между шаблонами, чтобы регистрация решения задачи или её завершение создавали следующую.

Да. Срабатывание происходит, когда специалист регистрирует решение в ленте или, если у шаблона нет условия, отмечает задачу как «Выполнено». Дочерние подзадачи создаются в той же ленте заявки, без ожидания cron или внешнего процесса.

При сохранении связи модуль выполняет поиск в глубину (DFS) по графу шаблонов. Если находится цикл (A порождает B, B порождает A), в форме появляется предупреждение, но связь остаётся сохранённой: удалите её на том же экране. Блокируется только связь шаблона с самим собой. Держите цепочки короткими.

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

Используйте вкладку журнала модуля, чтобы видеть заявку, родительскую задачу, дочернюю задачу, кто запустил, кто завершил и время. Для контроля порядка выполняйте SQL по glpi_tickettasks и glpi_tasktemplates с фильтром по state и пустому ответственному, чтобы выявить бесхозные задачи.

Нужна помощь?