Приветствую. Можно ли сделать так, чтобы список отображаемых полей при изменении или создании КЕ менялся в зависимости от значения определенного поля? Например, создаем КЕ “Персональный компьютер”, выбираем тип “Ноутбук”, и как только мы это выбрали, появляются дополнительные поля, специфичные для ноутбуков, которые убираются из виду, если обратно вернуть тип на “Настольный”. Или при выборе категории услуги, при подаче заявки через портал пользователя.
Нашел модуль Customized request forms, но он только для класса UserRequest. Пока смотрю его функционал, вроде то что нужно. Стоит попробовать на основе этого модуля сделать подобный для других классов.
В целом, направление мысли верное, но у этого модуля есть один существенный недостаток – ты не сможешь выполнять поиск UserRequest по полям из дополнительной формы, т.к. эти данные хранятся в другом объекте. Так что, если возможность поиска критична, есть два варианта:
- добавление всех полей в класс через XML + показ/скрытие их с помощью js-скрипта;
- разделение класса на два.
В твоем пример с ноутбуком и десктопом второй вариант предпочтительнее и проще. Сложно представить ситуацию, когда ноутбук в течение своей жизни превращался бы в десктоп или наоборот.
Глобальный поиск по значениям этих полей из дополнительной формы находит нужный UserRequest, этого должно быть достаточно. Недостаток в том что после создания запроса через портал пользователя, эти поля становятся уже недоступными для редактирования. Дальше редактировать их можно только из обычного интерфейса itop, а пользователю портала придется вносить изменения в стандартное поле описания.
Пример с ноутбуком и десктопом был взят с потолка, на деле все немного сложнее, поэтому второй вариант не подойдет. Первый вариант интересен, с добавлением полей в класс через XML я знаком, а вот про “показ/скрытие их с помощью js-скрипта” можно подробнее?
Да особо подробнее рассказывать не чего. Пишем js-script, который будет прятать или показывать поля (jquery в айтопе есть), а потом добавляем его на страницу. Добавить на страницу можно через любой интерфейс, в котором есть метод с аргументом WebPage
, например iApplicationUIExtensions::OnDisplayProperties.