2012-06-13 6 views
9

¿Alguien sabe si es posible en una plantilla compuesta utilizar un elemento de cadena en el paquete y ejecutarlo como si fuera una plantilla de Dreamweaver? ¿Y si aplica el mismo método a otros mediadores (como navaja de afeitar)?Ejecución de un elemento en el paquete como plantilla de Dreamweaver

Gracias Marcos

+0

La clase Package tiene un método 'package.EvaluateExpression (string expression)' que podría valer la pena investigar. –

Respuesta

5

Me temo que eso no será posible en cualquier elemento de la Package, ya que el Engine espera Template s que se basan en artículos Tridion.

Si su Plantilla Artículo es basada en un Artículo de Tridion, puede obtener bastante lejos comenzando en el método Engine.GetMediator. Si no es así, deberá encontrar la forma de convertirlo en un objeto válido Template.

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

Cuando tengo que crear un objeto Component de un artículo basado en Tridion en el paquete, que normalmente hacer algo como esto:

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

no lo han intentado, pero se espera que puede hacer lo mismo con un Template, dado que, para empezar, comienza con un Artículo válido del Paquete que representa una Plantilla. Probablemente pueda clonar el XML de un Artículo existente o encontrar otra forma de simularlo.

Si hace que esto funcione, funcionará en todos los tipos de plantillas registradas. El Engine no ofrece un tratamiento especial para los tipos que vienen con Tridion.

+1

Gracias Frank por el puntero. Veremos eso. Tuyo –

+0

Descubrí hoy que 'engine.GetMediator' no es público, por lo que no puedes acceder a él. Terminé simplemente instanciando el 'DreamweaverMediator' en mi TBB y pasando el objeto' TemplateBuildingBlock' construido previamente. Actualizaré el código anterior si más personas lo encuentran útil. –

5

Sospecho que esto no es posible.

Package.EvaluateExpression puede ser útil, pero como el nombre sugiere que sólo va a trabajar en las expresiones, no grandes fragmentos de código con expresiones incrustadas (es decir TEL)

Engine.GetMediator espera una Template y devuelve el Mediator adecuado para ello. El problema entonces es que la interfaz IMediator solo define el método Transform, que requiere un Engine, un Template y un Package.

No se me ocurre ninguna forma elegante de evitar esto. Tal vez escriba su propio Mediator, pero eso aún esperaría un Paquete, no una cadena, por lo que primero tendría que almacenar el Artículo basado en cadenas de otro TBB.

Mi consejo: Parece que necesita volver al diseño y encontrar una solución alternativa a su problema.

+1

Supuse que Mark quería invocar la "cadena como un DWT" desde una ITemplate o Mediator existente, ya que se refiere a que es un elemento del paquete. Si ese es el caso, simplemente podría pasar sus objetos Engine y Package existentes al método Mediator.Transform. El problema principal que pude ver es convertir ese elemento de cadena en una instancia de Plantilla.Pero es un buen punto, entonces actualizaré mi respuesta para elaborar. –

+1

Creo que es posible crear un nuevo objeto ComponentTemplate o PageTemplate y pasar una representación XML válida de una plantilla. Sin embargo, eso todavía no te llevaría a ninguna parte. Creo que tendrías que crear un nuevo TBB a partir de tu elemento de cadena y agregar al XML de su nueva plantilla. Espero que TBB necesite ser salvado. –

Cuestiones relacionadas