Personalización y extensión del WebPart de Consulta de Contenidos (CQWP): Tu otro nuevo mejor...

Preview:

DESCRIPTION

Página oficial del SolidQ Summit: http://summit.solidq.com/madrid/2013/ El WebPart de Consulta de Contenidos (Content By Query Part) es sin duda una de las herramientas más poderosas con las que cuenta todo desarrollador SharePoint. En esta sesión veremos como ir un paso más allá, y convertir esta herramienta en un “todoterreno”, que permita abordar situaciones que no creías poder resolver únicamente con un WebPart de Consulta de Contenidos.

Citation preview

Personalización y extensión del WebPart de Consulta de Contenidos (CQWP): Tu otro nuevo mejor amigo Cristian M. Zaragoza Gómez

CyB200002

Desarrollador SharePoint – Colaboración y Búsqueda MCTS, SharePoint 2010, Configuración & Desarrollo

czaragoza@solidq.com

Objetivos de la sesión

Conocer el funcionamiento base y el alcance.

Aprender cómo personalizar el aspecto visual.

Aprender cómo extender la funcionalidad nativa.

Llamar a funciones .NET personalizadas desde el propio XSLT.

¿Qué es el Content By Query Web Part?

Demo 1: Toma de contacto

¿Qué lo hace especial?

Personalización del aspecto visual

Demo 2: Slider de imágenes

Agenda

CQWP para la gente de a pie

¿Eso es todo?

Cómo extender CQWP paso a paso

Demo 4: Paginación + filtrado dinámico

Insisto, ¿Eso es todo?

.NET desde XSLT

Demo 5: Invocando funciones .NET desde CQWP

Agenda

CQWP para superhéroes

CQWP para la gente de a pie

Herramienta orientada a diseñadores/desarrolladores, que…

permite reunir “trozos” de información con diferentes orígenes (listas, sitios…).

para después filtrar la información obtenida según se requiera…

y finalmente mostrar el conjunto de información filtrada en un único bloque.

CQWP para la gente de a pie

¿Qué es el Content By Query Web Part?

CQWP para la gente de a pie

¿Qué es el Content By Query Web Part?

3 5

4 1

9 7

3 5

7 9

Lista de SharePoint CQWP Query Resultado

DEMO Demo 1: Toma de contacto con CQWP

Herramienta Nativa (OOTB) SharePoint Server (2007 y 2010)

Separación de capas: datos y presentación.

Mejorado en 2010 con los “Slots”.

Sencillo personalizar aspecto visual. Requiere conocimientos en XSLT.

RENDIMIENTO

CQWP para la gente de a pie

¿Qué lo hace especial? (1)

Implementa un sistema de caché para optimizar las consultas.

Para ello se apoya en dos clases:

CrossListQueryCache

CrossListQueryInfo

A su vez éstas usan internamente SPSiteDataQuery.

CQWP para la gente de a pie

¿Qué lo hace especial? (2)

SPSiteDataQuery

Caché

CQWP

CrossListQueryCache

¿Qué lo hace especial? (3)

CQWP para la gente de a pie

CQWP para la gente de a pie

Personalización del aspecto visual (1)

Archivo Descripción

ContentQueryMain.xsl

Contiene la lógica que genera las llamadas adecuadas a

las plantillas de encabezado y elemento para cada

elemento.

ItemStyle.xsl

Contiene plantillas que definen cómo mostrar un

elemento. Estas plantillas reciben y procesan una fila de

datos cada vez, lo que permite garantizar que el estilo y

los datos de las filas de elementos sean coherentes.

Header.xsl

Contiene plantillas que definen cómo mostrar un

encabezado y garantizan la coherencia de los

encabezados de grupo.

CQWP para la gente de a pie

Personalización del aspecto visual (2)

XML

ContentQueryMain.xsl

Header.xsl

ItemStyle.xsl

HTML

En SharePoint 2010 aparece el concepto de slot.

Los slots permiten crear plantillas de presentación semánticas y reusables.

¿Cómo funcionan?

CQWP para la gente de a pie

Personalización del aspecto visual (3)

CQWP para la gente de a pie

Personalización del aspecto visual (4) <xsl:template name="DetailedOverview" match="Row[@Style='DetailedOverview']" mode="itemstyle">

<xsl:variable name="SafeLinkUrl">

<xsl:call-template name="OuterTemplate.GetSafeLink">

<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>

</xsl:call-template>

</xsl:variable>

<xsl:variable name="DisplayTitle">

<xsl:call-template name="OuterTemplate.GetTitle">

<xsl:with-param name="Title" select="''"/>

<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>

<xsl:with-param name="UseFileName" select="1"/>

</xsl:call-template>

</xsl:variable>

<p>

<strong><xsl:value-of select="$DisplayTitle"/></strong><br />

<xsl:value-of select="@Author"/>, <xsl:value-of select="@Date"/> </p>

<p>

<xsl:value-of select="@RollupImage"/>

<xsl:value-of select="@Details"/> </p>

<p>

<a href="{$SafeLinkUrl}">Read more</a>

</p>

</xsl:template>

DEMO Demo 2: Slider de imágenes

CQWP para superhéroes

En muchas ocasiones, podemos necesitar “algo más”: Mostrar contenidos según idioma.

Paginar elementos.

Parámetros propios.

Filtrados dinámicos.

Contenidos aleatorios.

Etc.

Tendencia natural Desarrollar un nuevo Web Part.

Nueva tendencia natural Extender CQWP.

CQWP para superhéroes

¿Eso es todo?

CQWP para superhéroes Cómo extender CQWP paso a paso (1)

' Incluir DLL y referencia.

Imports Microsoft.SharePoint.Publishing.WebControls

Public Class CQWPEx

Inherits ContentByQueryWebPart

Protected Overrides Sub CreateChildControls()

End Sub

End Class

CQWP para superhéroes Cómo extender CQWP paso a paso (2)

' Añadir parámetros al fichero XSLT.

Protected Overrides Sub ModifyXsltArgumentList(ByVal e As System.EventArgs) ...

argList.AddParameter(“Locale", "", “1033”)

MyBase.ModifyXsltArgumentList(argList)

End Sub

CQWP para superhéroes Cómo extender CQWP paso a paso (3)

' Sobrescribir esta función para filtrados dinámicos.

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)

MyBase.OnLoad(e)

' Operador lógico (And, Or)

Me.Filter1ChainingOperator = FilterChainingOperator.And

' ID de la lista en la que vamos a filtrar

Dim filterField1ID As Guid = miLista.Id

Me.FilterField1 = filterField1ID.ToString

' Valor que ha de cumplir. Ej: Valor de la Query String

Me.FilterValue1 = “Categoria 1”

End Sub

CQWP para superhéroes Cómo extender CQWP paso a paso (4)

'A esta función llegamos después de haber filtrado.

'Podemos “refinar” los resultados Paginado

'También podemos establecer configuración extra Ficheros XSLT

Protected Overrides Sub OnInit(ByVal e As System.EventArgs)

MyBase.OnInit(e)

' Establecemos ficheros XSLT propios

Me.ItemXslLink = "/.../ItemStyleEx.xsl"

Me.MainXslLink = "/.../ContentQueryMainEx.xsl"

...

End Sub

CQWP para superhéroes Cómo extender CQWP paso a paso (5)

' Recibe un DataTable con las filas ya procesadas (filtradas)

' Devuelve otro DataTable que será con que se cree el XML final.

' ¿Paginación?.

Protected Function processData(ByVal dt As DataTable) As DataTable

...

End Sub

DEMO Demo 4: Paginación + filtrado dinámico

CQWP para superhéroes

Insisto, ¿Eso es todo?

Con CQWP hay que tocar XSLT…

y no es el mejor amigo del desarrollador.

.NET si puede serlo…

Sería genial ejecutar .NET desde XSLT, ¿verdad?

CQWP aprueba esta “unión”

CQWP prácticamente para todo.

CQWP para superhéroes

.NET desde XSLT

DEMO Demo 5: Invocado funciones .NET desde CQWP

Si quieres disfrutar de las mejores sesiones de

nuestros mentores de España y Latino América,

ésta es tu oportunidad.

http://summit.solidq.com/madrid/

Síguenos:

Recommended