Вы открываете выпадающий список категорий, чтобы зарегистрировать заявку в GLPI 11, и вместо чистого названия видите такой блок: «Ошибка при использовании автоматизации - 337.ТИП:INC;Группа:АВТОМАТИЗАЦИЯ;Срочность:Очень высокая». То, что должно быть просто названием категории, превратилось в строку метаданных, которую специалисту приходится каждый раз расшифровывать. Это не дефект вашей среды: это сам GLPI приклеивает поле code категории во всех выпадающих списках.
Проблема
У каждой категории ITIL в GLPI есть необязательное поле code. Оно существует не просто так: нумерация процессов, ключ маршрутизации для бизнес-правил, параметр интеграции с ERP или внешней системой заявок. Проблема не в том, что поле заполнено, а в том, где оно отображается. Когда у категории есть code, ядро GLPI приклеивает это значение к названию во всех выпадающих списках интерфейса, используя разделитель - . Служебная информация просачивается на экран того, кто хочет просто выбрать «Сеть» или «Принтер».
На практике чем более структурирован ваш code, тем хуже. Команды, которые хранят в поле метаданные (тип заявки, ответственную группу, рекомендуемую срочность), получают выпадающие списки, где настоящее название категории - наименьшая часть текста. Взгляд читает слева направо, сначала натыкается на код и замедляется. На небольших экранах текст обрезается посреди кода - и тогда даже название не видно целиком.
Два очевидных выхода не подходят. Редактирование ядра GLPI, чтобы убрать склейку, работает до следующего обновления, когда файл перезаписывается и проблема возвращается. Удаление поля code очищает экран, но ломает всё, что от него зависело, - правила, интеграции, отчёты. Вы бы променяли визуальное неудобство на функциональный сбой.
Как это решает Essentials
Модуль Essentials устраняет симптом в правильном месте: при отрисовке, а не в данных. Он не трогает базу и не редактирует ядро. Вместо этого он оборачивает глобальные шаблонные функции Select2, которые использует GLPI (window.templateResult и window.templateSelection), и очищает текст в источнике, до того как он попадёт в DOM. Поле code остаётся в базе нетронутым; оно лишь перестаёт отображаться в интерфейсе.
- Очищает название и подсказку - убирает суффикс
- CÓDIGOкак из текста варианта, так и из атрибутаtitle(всплывающей подсказки при наведении мыши), в списке и в уже выбранном значении. - Охватывает оба места, где появляется категория - классический выпадающий список заявки, изменения и проблемы (
itilcategories_id) и вопросы выбора категории в новой системе форм GLPI 11 (Glpi\Form). - Ничего не удаляет -
codeостаётся доступным для бизнес-правил, интеграций и отчётов. Это чисто визуальное исправление. - Включается и выключается по функциям - исправление - это отдельный переключатель на вкладке «Функции»; включение или выключение действует сразу, без переустановки модуля.
- Переживает обновления - поскольку всё работает через плагин, обновление GLPI не отменяет исправление.
Деталь, которая отличает безопасное исправление от ломающего всё остальное
Здесь пригождается опыт эксплуатации GLPI в продуктивной среде. Первая версия исправления делала очевидное: очищала текст любого выпадающего списка Select2 с шаблоном « - что-то». Всё казалось правильным, пока клиент не сообщил, что названия групп обрезались - «N1 - Поддержка» превращалась в «N1», «N2 - Инфраструктура» - в «N2». Разделитель - законно встречается во многих названиях; очищать по шаблону текста наивно. Исправление стало ограничиваться идентичностью поля, а не видом текста.
Для заявки это просто: оно срабатывает, только когда <select> называется itilcategories_id. В новой системе форм тоньше, потому что вопрос использует общее имя вроде answers_5[items_id], подходящее для любого элемента (категория, местоположение, поставщик). Подсказка - в соседнем <input hidden>, который объявляет тип. Модуль очищает текст, только когда этот соседний элемент указывает ITILCategory:
<!-- Ticket: the fix runs because the name is exactly itilcategories_id -->
<select name="itilcategories_id">
<option value="12"
title="Error using automation - 337.TYPE:INC;Group:AUTOMATION">
Error using automation - 337.TYPE:INC;Group:AUTOMATION
</option>
</select>
<!-- Form (Glpi\Form): only cleans if the sibling hidden is ITILCategory -->
<select name="answers_5[items_id]"> ... </select>
<input type="hidden" name="answers_5[itemtype]" value="ITILCategory">
<!-- Group: different name and no ITILCategory hidden -->
<!-- the legitimate " - " is PRESERVED -->
<select name="groups_id">
<option>N1 - Support</option>
</select>
Такие решения появляются только при сопровождении: «быстрое» решение ломает пограничный случай, который не покрывает ни один синтетический тест, но который есть почти в каждой реальной среде с группами, названными по линиям поддержки.
До и после, по контекстам
| Где | Нативный GLPI (до) | С Essentials (после) |
|---|---|---|
| Выпадающий список в заявке | Ошибка при использовании автоматизации - 337.ТИП:INC;... | Ошибка при использовании автоматизации |
| Вопрос категории в форме | Сеть - NET.02;Группа:INFRA | Сеть |
| Подсказка (title) элемента | Показывает полный код | Показывает только название |
| Выпадающий список групп (напр., N1 - Поддержка) | N1 - Поддержка | N1 - Поддержка (без изменений) |
| Поле code в базе | Заполнено | Заполнено (никогда не изменяется) |
Как включить
- Установите плагин NexTool в свой GLPI 11 (если его ещё нет).
- Перейдите в Настройка > NexTool > Модули и активируйте модуль Essentials.
- Откройте Настроить и перейдите на вкладку Функции.
- Убедитесь, что Скрывать код категории в выпадающих списках включено - после установки эта функция уже активна по умолчанию.
Исправление начинает действовать при следующем открытии выпадающего списка категорий. Не нужно ни перезапускать службу, ни очищать кеш: JS-ресурс несёт метку версии, которая меняется автоматически при включении или выключении функции, так что браузер всегда загружает правильную версию.
Кому подходит (и когда не использовать)
Имеет смысл для любой команды, которая заполняет поле code у категорий ITIL - для внутренней нумерации, маршрутизации правилами или интеграции, - и чьи специалисты или конечные пользователи ежедневно выбирают категорию. Чем больше людей создают заявки, тем заметнее выигрыш в ясности.
Разницы не будет, если у ваших категорий code не заполнен: без приклеенного кода очищать нечего. А если вы хотите, чтобы код отображался на экране, - некоторые команды используют его как быструю справку на стойке обслуживания, - просто оставьте функцию выключенной. Именно поэтому исправление необязательное.
Совместимость
- GLPI: 11.0 или выше
- Модуль: Essentials (ключ
essentials) - бесплатный тариф (FREE) - Плагин: NexTool 6.3.0 или выше
- Охват: заявки, изменения и проблемы, а также новая система форм (
Glpi\Form)
Следующий шаг
Essentials входит в NexTool - экосистему модулей, расширяющую GLPI без доработки ядра. Модуль бесплатный и уже есть в каталоге. Если нужна помощь с установкой или оценкой других исправлений, свяжитесь с командой.
Проверено командой NexTool Solutions.