RUS  ENG 

Как выйти на БД текущего слоя в подключенном плагине?

Страницы: 1
RSS
Как выйти на БД текущего слоя в подключенном плагине?
 
Как выйти на БД текущего слоя в подключенном плагине?
 
берем слой
Map = Connector.Zulu.ActiveDocument.NativeDoc
Layer = Map.Layers.Active

а дальше, семантическая база зависит от того, для примитивов ли она нужна
или для типизированных объектов.

Взять базу по текущему выбранному элементу можно так:
ElemID = Layer.CurrentID
Elem = Layer.Elements.Item(ElemID)
If Elem.TypeID <> -1 Then
// типизированный объект
BaseName = Elem.Type.BaseName
Else
// объект - примитив, берем
// текущую базу, подключенную к слою
BaseName = Layer.BaseName
EndIf

имея BaseName мы можем ее открыть и работать
zb = new ZbDatabase
zb.Open BaseName
...
 
Как выйти на поля описательной БД?
Имея ID объекта необходимо узнать значение поля БД по описателю
 
В примере кода в предыдущем посте мы открываем семантическую базу по ID объекта, а дальше:
Query = zb.ActiveQuery
DataSet = Query.SelectByKey(ID)
В dataset обязательно попадает поле связи с картой, а также набранный список полей запроса. Вы просто можете брать значение поля DataSet->FieldValue(i).
Можно сделать так:
fields = DataSet.GetDataFields(zbDataFieldVisible) 'получили множество значимых/видимых полей запроса
index = fields.GetFieldIndexByName( zbShortName, "имя_поля")
fields.GetFieldValue(index)
или
fields.GetFieldDisplayValue(index)
Страницы: 1