Форум НПФ  

Вернуться   Форум НПФ "ТОПОМАТИК" > Программные продукты "Топоматик Robur" на платформе "Robur AP3" > Средства разработки Топоматик Robur > Вопросы и ответы
Ник
Пароль
Регистрация FAQ Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #101  
Старый 02-20-2021, 11:49
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 119
По умолчанию

Добрый день!

К сожалению предыдущий способ сильно зависит от самого файла семантики, фактически Вы опираетесь на его внутренние данные.
Посмотреть какие именно handle соответствуют какому узлу, можно просто открыв в текстовом редакторе файл семантики, например,
оперируя данными из файла Semantic.xml

<Item Caption="Канализация" Handle="1017">
<Propertys aType="0">
<Property ClassName="0" Caption="Вид" Handle="1">
<Items aType="0">
<Item Caption="Наземная" Handle="2">
<Propertys aType="0">
<Property ClassName="0" Caption="Тип" Handle="4">
<Items aType="0">
<Item Caption="Без подразделений" Handle="5">
<Propertys aType="0">
<Property ClassName="0" Caption="Подписывать буквенный индекс" Handle="22">
<Items aType="0">
<Item Caption="Да" Handle="39">

Таким образом код, в приведённом примере делает следующее:
Поскольку в SemanticDataSet структурной линии уже содержит корневой узел с handle 1017
То вызвав запрос элемента с handle = 1 мы получим значение свойства "Вид"
Поскольку это SemanticJumper, то его значением является handle выбранного подэлемента.
selected_handle = semantic[semantic[1]]
Метод semantic.Root.TryGetNode позволяет получить семантический узел по его коду
if (semantic.Root.TryGetNode(selected_handle, ref)):
ConsoleListner.Current.WriteLine(ref.Value.Caption )
Здесь мы проверяем, что работаем непосредственно с узлом handle = 2 - то есть с Наземной канализацией
if (selected_handle == 2):
Теперь нам необходимо определить Тип, для этого у Наземной линии мы запрашиваем узел с handle = 4
selected_handle = semantic[semantic[4]]
Снова получаем семантический узел по его коду и выводим его наименование
if (semantic.Root.TryGetNode(selected_handle, ref)):
ConsoleListner.Current.WriteLine(ref.Value.Caption )
Для того чтобы получить Подписывать буквенный индекс значение свойства мы проверяем hanlde типа
sign_index = False
Если это тип Без подразделений, то Подписывать буквенный индекс стоит в значении Да, если значение handle равно 39
if (selected_handle == 5):
sign_index = semantic[semantic[22]] == 39


Этот метод работы достаточно трудоёмок и имеет ряд существенных недостатков - первое, он чуствителен к содержимому файла
семантики, что было нами успешно продемонстрированно в предыдущем примере. Поскольку там использовался нестандартный файл семантики
и handle внутри файла отличались, от системных для версии 8.x
К достоинствам метода можно отнести тот факт, что Вы имеете возможность опредлять значения всех свойств, включая скрытые.

В принципе для решения Вашего вопроса, действительно можно вызвать функцию GetVisibleProperties() у LinearSemantic и определять
Ваши значения по визуальному представлению свойств.
Если Вы создаёте свой собственный объект, и Вам нужно опираться на какие-либо определённые свойства, то рекомендую прописывать для них
свойство Tag, и обращатся к значению свойства по этому тэгу.
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:12.

Навигация по основному сайту
Главная Каталог продуктов и услуг Где купить Сопровождение
Вакансии О компании Обзоры Канал на YouTube

vBulletin v3.0.7 , Copyright ©2000-2021, Jelsoft Enterprises Ltd.
Copyright © 2003-2021, НПФ "ТОПОМАТИК".