Параметр спецификации по имени

Автор Тема: Параметр спецификации по имени  (Прочитано 4755 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
День добрый.
Подскажите как получить параметр спецификации/его  BuiltInParametr/ I'd по его имени?
1. Получили нужную через коллектор OST Shedules , далее?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Параметр спецификации по имени
« Ответ #1 : 28-08-2018, 10:13:14 »
Во-первых - есть ScheduleInstance и есть ViewSchedule. Первое - это экземпляр спецификации на листе, а второе - это вид спецификации. Из первого можно найти и второе
Во-вторых - у всех элементов, унаследованных от Element есть метод LookupParameter, который как-раз таки и ищет параметр по имени

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Параметр спецификации по имени
« Ответ #2 : 28-08-2018, 10:37:45 »
У воздухораспределителей параметр "Пространство: Номер" можно увидеть только в спецификации.

Отмечено как Решение enot 29-08-2018, 14:57:46

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Параметр спецификации по имени
« Ответ #3 : 28-08-2018, 14:19:31 »
У Definition спецификации есть метод ScheduleDefinition.GetSchedulableFields()
Цитировать
Return Value
A list of SchedulableField objects representing the non-calculated/non-combined fields that may be included in the schedule.

Смотрим у полученных объектов значение свойства ParameterId, если его IntegerValue меньше 0, значит его можно привести к перечислению BuiltInParameter, если больше 0, то это SharedParameterElement - общий параметр.

Если работаем с BuiltInParameter, то можем напрямую сравнивать SchedulableField.ParameterId == new ElementId(BuiltInParameter....);
Если у нас общий параметр, можем получить SharedParameterElement.Lookup(new Guid("<guid value>"), и уже сравнивать с его Id.

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Параметр спецификации по имени
« Ответ #4 : 28-08-2018, 22:41:01 »
Есть ли способ получить BuiltInParameter зная ElementId ?
Дело в том что
Element_Id=field.ParameterId (получили отриц.значение)
Parameter par = doc .GetElement(Element_Id) as Parameter ; ->Ничего не возврвщает, выдает ошибку

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Параметр спецификации по имени
« Ответ #5 : 29-08-2018, 12:00:39 »
Преобразовать Id.IntegerValue к перечислению BuiltInParameter:
Код - C# [Выбрать]
  1. var bip = (BuiltInParameter)field.ParameterId.IntegerValue;

Оффлайн enotАвтор темы

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Параметр спецификации по имени
« Ответ #6 : 29-08-2018, 12:55:59 »
Параметр не имеет BuiltInCategory, верно?
Параметр имеет только BuiltInParameter

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Параметр спецификации по имени
« Ответ #7 : 29-08-2018, 13:26:12 »
Да. И имеет в самом документе некие сущности, которые можно получить, например, по Id только для общих и глобальных параметров. В этом случае Id.IntegerValue положительный. Если он отрицательный - то параметр встроенный