StorageType из BuiltInParameter

Автор Тема: StorageType из BuiltInParameter  (Прочитано 4546 раз)

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

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
StorageType из BuiltInParameter
« : 05-03-2019, 15:33:28 »
Возможно ли получить StorageType из BuiltInParameter ?

Что я конкретно пытаюсь сделать :
Вот код , получаю параметры спецификации

         
Код - C# [Выбрать]
  1. var ids = schedule.Definition.GetFieldOrder();
  2.                             foreach (ScheduleFieldId id in ids)
  3.                             {
  4.                                 ScheduleField field = schedule.Definition.GetField(id);                            
  5.                                     if (field.ParameterId.IntegerValue < -1)
  6.                                     {
  7.                                         BuiltInParameter bip =((BuiltInParameter)field.ParameterId.IntegerValue);
  8.                                     }


далее мне нужно из field или BuiltInParameter  получить StorageType параметра ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: StorageType из BuiltInParameter
« Ответ #1 : 05-03-2019, 15:56:00 »
Напрямую - никак. Но, у спецификации есть категория, достаточно из документа получить ровно один инстанс и ровно один тип этой категории, собрать из них все built-in-parameter-ы, например, в словарь.

А вообще, Ваш код в общем случае не будет работать на реальных спецификациях, где будут combined/calculated параметры, там доп. проверки нужны перед тем, как получать field.ParameterId

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: StorageType из BuiltInParameter
« Ответ #2 : 05-03-2019, 15:58:23 »
Но, у спецификации есть категория, достаточно из документа получить ровно один инстанс и ровно один тип этой категории, собрать из них все built-in-parameter-ы, например, в словарь
- мда, логично StorageType свойства параметра , а Parameter= element. get_Paraneter(BuiltInParameter ... , для ElementId>0 получаем SharedParameterElement - здесь проще


 - А это будет работать для спецификации из нескольких категорий?
 для такой спецификации schedule.Definition.CategoryId по моему возвращает null

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: StorageType из BuiltInParameter
« Ответ #3 : 05-03-2019, 16:02:48 »
Нет ))
Но можно взять категории из doc.Settings и по тому же алгоритму.

Вообще, что-то мне подсказывает, что Вы, вероятно, не по правильному пути идёте. Зачем вообще перебирать поля спецификации и получать Storage type параметров?

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: StorageType из BuiltInParameter
« Ответ #4 : 05-03-2019, 16:11:07 »
Вообще, что-то мне подсказывает, что Вы, вероятно, не по правильному пути идёте
все может быть...

Смотрите,
я далее буду создавать фильтры в спецификации для этих параметров.
При добавлении фильтра мне нужно указать значение, которое в свою очередь будет зависеть от StorageType параметра

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: StorageType из BuiltInParameter
« Ответ #5 : 05-03-2019, 16:16:05 »
А разве значения фильтров таки не от конкретного параметра зависит?

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: StorageType из BuiltInParameter
« Ответ #6 : 05-03-2019, 16:18:10 »
StorageType -  да , а значение может быть любое

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: StorageType из BuiltInParameter
« Ответ #7 : 05-03-2019, 16:21:10 »
Случайной чтоли?  :o

Вроде, по логике, значение создаваемого фильтра должно зависеть от того, по какому параметру фильтруется, а раз знаем перечень параметров для фильтров, то и знаем всё остальное

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: StorageType из BuiltInParameter
« Ответ #8 : 05-03-2019, 16:23:19 »
а раз знаем перечень параметров для фильтров, то и знаем всё остальное
В существующей спецификации мы можем получить не параметры , а  ParameterId , верно?

когда я буду создавать фильтр , то подаваемое значение Фильтра => value будет всегда String , зная StorageType параметра я конвертирую его в случае, например если StorageType параметра = StorageType.Double , а value="123":  convert_value = Convert.ToDouble("123")

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: StorageType из BuiltInParameter
« Ответ #9 : 05-03-2019, 16:29:00 »
Чтобы создать фильтр, нужно знать значение этого фильтра, должна же быть какая-то логика, а не случайное значение. Эта логика подразумевает, что мы знаем тип поля, по которому фильтруется спецификация, нет?

Отмечено как Решение enot 04-04-2019, 20:26:19

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: StorageType из BuiltInParameter
« Ответ #10 : 04-04-2019, 16:35:57 »
Напрямую - никак.

Простите, был неправ

Код - C# [Выбрать]
  1. var storageType = doc.get_TypeOfStorage(BuiltInParameter.SYMBOL_NAME_PARAM);

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: StorageType из BuiltInParameter
« Ответ #11 : 04-04-2019, 20:26:11 »
О!! Это отличная новость! Работает   :D