2012-05-09 10 views
17

Estoy intentando crear un implementador personalizado en Tridion 2011 SP1 que pueda indexar un componente a una instancia de solr una vez publicado. Todo está funcionando bien, pero me he encontrado con un problema con la forma en que indexa los campos de los componentes.Acceda a los campos de un componente desde un implementador personalizado

Puedo acceder bien a los campos de metadatos utilizando el método Component.getCustomMeta() y analizando el XML. Sin embargo, no parece posible acceder a los campos normales sin leer el archivo que se está emitiendo y analizar la salida. Esto no es del todo factible ya que el marcado puede cambiar y parece ser un largo camino para hacer lo que (con suerte) debería ser algo simple.

He revisado los documentos y parece que no hay nada disponible para obtener los valores de campo, así que estoy perdido aquí y tendré que analizar la salida o me falta algo en alguna parte.

Respuesta

12

Los campos de contenido no se exponen como tales en el lado de la entrega, el contenido se expone, como es lógico, como "contenido".

Si realmente necesita los campos, es necesario:

  1. producir una salida "analizable" para sus presentaciones componentes
  2. Analizar las presentaciones de componentes a medida que se publican.

Mire implementaciones como DD4T para enfoques similares.

En resumen, no puede hacerlo, porque Tridion no lo expone de la caja. La única forma de hacerlo es cambiando el formato de salida de contenido a través de una plantilla.

4

Hemos hecho una solución alternativa para lograr el requisito similar. Un aspecto negativo de la implementación es la representación adicional de las presentaciones de componentes en XML y el duplicado de almacenamiento xml en el intermediario.

Esto es lo que hemos hecho:

  1. Creado TC dinámica (representación XML de contenido) GetComponentAsXML y se asigna a todos los esquemas
  2. todas las plantillas de página tiene un C# TBB que busca el contenido que tenemos que empujar a la SOLR
  3. C# TBB hace el RenderComponentPresentation con por encima de TC dinámica GetComponentAsXML, esto empuja el XML (engine.RenderComponentPresentation (component.Id, componentTemplateURI)
  4. Desplegador ahora obtiene el contenido en formato XML, en una Además del otro tipo de presentaciones de componentes (como ascx, emebedded en la página, etc.)

Espero que esta información ayude.

+0

Gracias Ram, esto parece una forma razonable de hacerlo. Actualmente estoy buscando en el sistema de eventos para vincular un controlador de eventos para la publicación/publicación de páginas y CP dinámicos. Parece que va bien, pero si falla, entonces investigaré algo como lo que has descrito – ajwhitehead88

Cuestiones relacionadas