2012-06-13 1 views
9

Кто-нибудь знает, возможно ли в составном шаблоне использовать строковый элемент в пакете и выполнить его, как если бы он был шаблоном Dreamweaver? И применяете ли вы тот же метод к другим посредникам (например, к бритве)?Выполнение элемента в пакете в виде шаблона Dreamweaver

Благодаря Марк

+0

Класс пакета имеет метод 'package.EvaluateExpression (строковое выражение)', который может стоить исследовать. –

ответ

5

Я боюсь, что не будет возможно только на какой-либо элемент в Package, так как Engine ожидает Template s основываться на пунктах TRIDION.

Если ваш шаблон Item является на основе предмета Tridion, возможно, вы получите довольно далеко, начав с метода Engine.GetMediator. Если это не так, вам нужно будет найти способ превратить его в действительный объект Template.

Template template = ... 
IMediator mediator = engine.GetMediator(template); 
mediator.Transform(engine, template, package); 

Когда я должен создать Component объект из пункта Tridion основе в пакете, я обычно делаю что-то вроде этого:

Component component = new Component(item.GetAsXmlDocument().DocumentElement, 
            engine.GetSession); 

Я не пробовал, но ожидать, что вы можете сделать то же самое для Template - учитывая, что вы начинаете с действительного элемента из пакета, представляющего шаблон для начала. Вероятно, вы можете клонировать XML из существующего элемента или найти другой способ подделать его.

Если вы его заработаете, он будет работать по всем зарегистрированным типам шаблонов. Engine не предусматривает специальной обработки типов, которые поставляются с Tridion.

+1

Спасибо за указатель. Посмотрите на это. Yours –

+0

Я узнал сегодня, что 'engine.GetMediator' не является общедоступным, поэтому вы не можете его достичь. В итоге я просто создал экземпляр «DreamweaverMediator» в своем TBB и передал в свой предварительно построенный объект «TemplateBuildingBlock». Я обновлю код выше, если больше людей найдут его полезным. –

5

Я подозреваю, что это невозможно.

Package.EvaluateExpression может быть полезным, но, как следует из названия, она будет работать только с выражениями, а не большие фрагменты кода со встроенными выражениями (т.е. TEL)

Engine.GetMediator ожидает Template и возвращает соответствующий Mediator для него. Ваша проблема заключается в том, что интерфейс IMediator определяет только метод Transform, который требует Engine, Template и Package.

Я не могу придумать никаких изящных путей вокруг них. Возможно, напишите свой собственный посредник, но это все равно ожидает пакет, а не строку, поэтому вам нужно сначала сохранить элемент на основе строки из другого TBB.

Мой совет: Похоже, вам нужно вернуться к чертежной доске и найти альтернативное решение вашей проблемы.

+1

Я предположил, что Марк хотел вызвать «строку как DWT» из существующего ITemplate или Mediator, так как он имеет в виду, что это элемент в пакете. Если это так, он может просто передать свои существующие объекты Engine и Package в метод Mediator.Transform. Основная проблема, которую я мог видеть, заключается в том, чтобы превратить этот элемент строки в экземпляр шаблона.Но это хороший момент, поэтому я уточню свой ответ, чтобы уточнить. –

+1

Я думаю, что возможно создать новый объект ComponentTemplate или PageTemplate и передать действительное XML-представление шаблона. Это все равно вас не доставит - я думаю, вам нужно будет создать новый TBB из вашего строкового элемента и добавить это к XML вашего нового шаблона. Я ожидаю, что TBB нужно будет спасти. –