Как получить доступ к свойствам компонента Tridion, таким как имя схемы, на основе которого он создан на странице aspx?

Я настраиваю панель инструментов ленты, добавляя на нее кнопку в версии TRIDION 2011 SP1. Когда я нажимаю кнопку, она открывает страницу aspx. Внутри этой страницы aspx мне нужно получить доступ к имени схемы, используемой для создания этого компонента, перед созданием самого компонента (я имею в виду при создании самого компонента).

Пожалуйста, дайте мне способ решить эту проблему. Заранее спасибо.


person P.Muralikrishna    schedule 02.04.2012    source источник
comment
Благодарю за ваш ответ. Я уже пытался получить доступ ко всем компонентам, присутствующим в папке, с помощью URL-адреса webdav. Моя цель — открыть всплывающую страницу, содержащую несколько выпадающих списков, которые будут заполняться на основе схемы, используемой для создания компонента. Основная проблема здесь в том, что все это должно произойти до сохранения компонента. (Поэтому я не могу получить доступ к идентификатору tcm uri, чтобы получить имя схемы, потому что tcm uri будет создан после сохранения компонента)   -  person P.Muralikrishna    schedule 02.04.2012
comment
Вы уже пробовали какие-либо из МНОГИХ руководств и примеров по расширениям графического интерфейса? Просто погуглите расширение tridion gui, и вы найдете довольно много, включая пошаговые инструкции. Если вы уже пробовали это, то я думаю, что вы могли упустить некоторые основы Tridion...   -  person Nuno Linhares    schedule 02.04.2012


Ответы (2)


Вы должны передать его в свое всплывающее окно. URI схемы доступен в объекте модели компонента в CME, поэтому ваша команда кнопки может получить к нему доступ и передать его во всплывающее окно (например, в URL-адресе).

var schemaId = $display.getView().getItem().getSchemaId();
person Peter Kjaer    schedule 02.04.2012
comment
Не могли бы вы предоставить мне ссылку/API, где я могу получить больше методов, касающихся объекта модели компонента. Поскольку моя дальнейшая работа требует, чтобы значение в элементах управления отображалось во всплывающем окне. Любые рекомендации помогут мне. Заранее спасибо. - person P.Muralikrishna; 02.04.2012
comment
Я не думаю, что для этого есть какая-либо документация по API. Но если вы используете инструмент разработчика (например, встроенный в ваш браузер), вы можете увидеть все доступные вам методы. - person Peter Kjaer; 02.04.2012
comment
вы можете найти документацию на docportal.sdl.com/sdltridion. Tridion 2011 SP1 API расширения графического интерфейса - person Bart Koopman; 02.04.2012
comment
@PeterKjaer Не могли бы вы предоставить мне команду, которая вернет текущий компонент tcmURI (компонент уже сохранен, а tcmURI существует). Заранее спасибо. - person P.Muralikrishna; 05.04.2012
comment
var itemId = $display.getView().getItem().getId(); - person Peter Kjaer; 05.04.2012

Если у вас есть компонент (как объект), вы можете получить его идентификатор схемы, как указал Питер. Если у вас есть только идентификатор компонента, вы можете загрузить компонент и через него перейти к схеме.

Когда вам нужно загрузить какой-либо элемент, вы должны знать, что это не синхронный вызов в UI API, поэтому вы должны использовать для этого методы делегата. Например что-то вроде этого:

Example.prototype._loadItemInformation = function Example$_loadItemInformation(itemId, reload) {
    var item = $models.getItem(itemId);
    if (item) {
        var self = this;
        function Example$_loadItemInformation$_onItemLoaded() {
            $evt.removeEventHandler(item, "load", Example$_loadItemInformation$_onItemLoaded);
            // proceed with the actions on the loaded item here
        };

        if (item.isLoaded(true) && !reload) {
            Example$_loadItemInformation$_onItemLoaded();
        }
        else {
            $evt.addEventHandler(item, "load", Example$_loadItemInformation$_onItemLoaded);
            //$evt.addEventHandler(item, "loadfailed", Example$_loadItemInformation$_onItemLoadFailed);
            item.load(reload, $const.OpenMode.VIEW);
        }
    }
};

Также имейте в виду, что элемент может не загрузиться, вам также следует зарегистрировать обработчик события для loadfailed (как мой пример кода не делает).

person Bart Koopman    schedule 02.04.2012