Снегопат
https://snegopat.ru/forum/

Работа с метаданными
https://snegopat.ru/forum/viewtopic.php?f=3&t=133
Страница 1 из 7

Автор:  orefkov [ 22 фев 2012, 11:39 ]
Заголовок сообщения:  Работа с метаданными

В этой ветке я постараюсь рассказать о том, как работать с метаданными, и отвечать на вопросы.
Для начала пример, как перебрать существующие метаданные.

Код:
text = []
printMdObj(metadata.current.rootObject, "", text)
var d = v8New("ТекстовыйДокумент")
d.УстановитьТекст(text.join('\n'))
d.Показать()

function printMdObj(mdObj, indent, text)
{
    // Получим и покажем класс объекта
    var mdc = mdObj.mdclass
    text.push(indent + "mdclass " + mdc.name(1))
    // Переберем свойства объекта. Количество доступных свойств объекта
    // определяется в его классе. Сами свойства объекта получаются методом
    // property(индекс), где индекс может быть - порядковым номером свойства (с нуля)
    // или названием свойства, или строкой с гуидом свойства
    for(var i = 0, c = mdc.propertiesCount; i < c; i++)
    {
        var mdProp = mdc.propertyAt(i)
        var propVal = toV8Value(mdObj.property(i))
        text.push(indent + " prop " + mdProp.name(1) + " " + mdProp.id + " = " + propVal.presentation())
    }
    // Перебираем классы потомков (например у Документа это Реквизиты, ТабличныеЧасти, Формы)
    for(var i = 0; i < mdc.childsClassesCount; i++)
    {
        var childMdClass = mdc.childClassAt(i)
        // Покажем название на русском языке во множественной форме
        text.push(indent + childMdClass.name(1, true))
        // Теперь переберем потомков этого класса.
        for(var chldidx = 0, c = mdObj.childObjectsCount(i); chldidx < c; chldidx++)
            printMdObj(mdObj.childObject(i, chldidx), indent + "\t", text)
    }
}

Автор:  artbear [ 22 фев 2012, 12:09 ]
Заголовок сообщения:  Re: Работа с метаданными

НеизвестныйОбъект обозначает отсутствие на самом деле?
например, для форм или синонимов метаданных?
Цитата:
prop Синоним {CF4ABEA3-37B2-11D4-940F-008048DA11F9} = НеизвестныйОбъект
prop Комментарий {CF4ABEA4-37B2-11D4-940F-008048DA11F9} =
prop ОсновнаяФорма {3E8C558E-64B4-405D-8AD3-7FAF63B866BA} = НеизвестныйОбъект
prop ДополнительнаяФорма {2B017861-CB7F-449D-812A-3BD6A81B0177} = НеизвестныйОбъект

а по комментарию непонятно, какой тип?

Автор:  orefkov [ 22 фев 2012, 12:19 ]
Заголовок сообщения:  Re: Работа с метаданными

НеизвестныйОбъект - там всякие могут попадаться, просто внтутре в движке данные лежат в Value, а наружу в COM не все типы нормально преобразовываются. Смотреть надо по toStringInternal.
Вот пример небольшой есть опять же в create_doc.js, смотри например, как ОсновнойЯзык получается.

Автор:  orefkov [ 22 фев 2012, 12:31 ]
Заголовок сообщения:  Re: Работа с метаданными

Пока со многими свойствами почти ничего не сделать, кроме как прочитать, что они есть.
Но всякие модули/формы уже можно открывать.
Свойства Синоним, Комментарий, Тип можно получать сразу спец-методами объекта IV8MDObject
Сам объект можно активировать в дереве метаданных, а также открыть на редактирование.

Автор:  kuntashov [ 22 фев 2012, 12:43 ]
Заголовок сообщения:  Re: Работа с метаданными

orefkov писал(а):
Но всякие модули/формы уже можно открывать.
Сам объект можно активировать в дереве метаданных, а также открыть на редактирование.


А вот это уже для меня новость! Давно ли?

Автор:  orefkov [ 22 фев 2012, 12:50 ]
Заголовок сообщения:  Re: Работа с метаданными

Так посмотрите в объектной модели IV8MDObject, методы activateInTree, openEditor, editProperty
Вот например
metadata.current.rootObject.editProperty("МодульУправляемогоПриложения")

Автор:  orefkov [ 22 фев 2012, 12:51 ]
Заголовок сообщения:  Re: Работа с метаданными

Сейчас работаю над получением текстов модулей и внутренних представлений форм/макетов и т.д.

Автор:  kuntashov [ 22 фев 2012, 13:03 ]
Заголовок сообщения:  Re: Работа с метаданными

Спасибо :)
Тогда просьба: можно ли при выпуске следующих релизов сопровождать релиз дополнительной информацией по добавленным возможностям.

Автор:  orefkov [ 22 фев 2012, 13:12 ]
Заголовок сообщения:  Re: Работа с метаданными

Ок, я постараюсь.
Просто когда я добавлял работу с метаданными, описать все добавленные возможности в "Что нового" было просто нереально, настолько там много всего.
К тому же добавлялось это пока как тестовый функционал, с возможными изменениями, и писать доку пока не стал, а надо бы.
Попытаюсь тут инфу донести по тому, что есть.

Автор:  orefkov [ 22 фев 2012, 13:21 ]
Заголовок сообщения:  Re: Работа с метаданными

kuntashov писал(а):
Спасибо :)
Тогда просьба: можно ли при выпуске следующих релизов сопровождать релиз дополнительной информацией по добавленным возможностям.

Хотя так-то это все было сделано еще в 1.1.3.1

Страница 1 из 7 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/