Найти в Дзене

Генерация общих параметров в ФОП

Оглавление
Фоп-стоп, мы подошли из-за угла (с), гопник Коля, ПТУ #6, через неделю после неудачного гоп-стопа, когда ему выбили зубы

Год назад я писал статью о том, как добавлять общие параметры, существующие в файле общих параметров, к категориям проекта. Рассказал как сделать привязку по типу, по экземпляру, настроить изменение значение среди групп. Но как оказалось — самое интересное я и не рассказал. Нам вообще не обязательно иметь общие параметры в ФОП, мы можем генерировать их самостоятельно.

Важное примечание

Перед генерацией параметра не забудьте убедиться, что данного параметра ещё не существует в нужной вам группе, иначе ваш ФОП рискует довольно сильно раздуться. Так же понятно, что эта история лучше всего подойдёт для тех случаев, когда число параметров заранее неизвестно, иначе их лучше добавлять вручную. Я также рекомендую выносить данные параметры в группу с очевидным именем типа "_generated", а общие части имени для параметров сохранять как константу в коде.

Генерация параметров

Вообще, тут всё максимально просто — самое сложное это придумать сценарий, когда это действительно нужно. Поэтому я сделаю немного искусственный пример: для каждого используемого типа окон создам текстовый параметр и назначу его категории Стены. Заполнять не будем, только создадим.

Давайте сразу посмотрим код, а потом я всё расскажу. Ссылка на код на гитхабе будет в конце статьи.

-2

Итак, как и при создании существующих параметров в Ревит-файле, нам понадобится файл общих параметров, который мы получаем на строке 62.

Но теперь мы проверяем, существует ли там нужная нам группа, и если нет, то создаём её (строки 64-67), и записываем в переменную (строка 69).

Далее работаем с группой. Мы каким-то образом получили список параметров, которые нам надо создать. У меня это список окон. Я специально не стал брать список типов, а взял список размещённых экземпляров, чтобы там были дубли по именам.

Что происходит на строках 76-80: для каждого имени мы ищем такой параметр в группе. Если его нет, мы создаём его с помощью класса ExternalDefinitionCreationOptions, указав его имя и единицы измерения через SpecTypeId. У него есть отдельные подклассы для текста, чисел и значения Да/Нет:

-3

В общем-то, и всё, that's it, как говорит мой любимый ютуб-блогер Ник Чапсас.

Далее на строках 82-84 я просто проверяю существование данного параметра, и, если его нет в проекте, назначаю его категории стены (строки 86-93). Всё это, разумеется, заключаем в транзакцию. Генерация параметров в ФОП не требует её, так как не модифицирует документ Ревита, а генерация параметров в проекте — требует.

Результат в ФОП:

-4

Результат в Ревите:

-5

Заключение

Недавно обнаружив эту фишку, я был весьма удивлён, и решил поделиться её с вами. Итоговый код вы можете посмотреть здесь.

Конечно же, не забывайте подписываться на мой телеграм-канал, ставить лайки статье, если было интересно. И подписывайтесь на меня и на GitHub и ставьте звёздочки моим репозиториям. До новых встреч!

-6