viernes, 3 de octubre de 2008

Vistas agrupadas de entradas de blog con CKS

Hasta hoy había utilizado en alguna ocasión Community Kit for Sharepoint (CKS) especialmente los componentes para gestión de FBA y para blogs (Enhanced Blog Edition - EBE) en alguno de los portales en los que he trabajado pero, hasta ahora, no había necesitado mostrar vistas agrupadas de diferentes blogs dentro de la misma colección de sitios. En cualquier caso, la idea parecía simple: utilizar un ContentByQueryWebpart (CQWP) y extenderlo para poder admitir alguno de los campos propios de los posts.

Bien, como suele suceder, la simplicidad no existe y, por alguna extraña razón, ha costado un poco más de lo esperado. Por si alguien está pensando hacer lo mismo, voy a explicar brevemente los pasos que yo he seguido.

1. Añadir a la página un CQWP, seleccionando todas las entradas de blog existentes en la colección de sitios.

2. Utilizando Sharepoint Designer, buscar el fichero ItemStyle.xsl dentro de la carpeta Style Library/XSL Style Sheets de la colección de sitios.

3. En este fichero, crear un nuevo template para mostrar entradas de blog. En mi caso, algo similar a lo siguiente:

<xsl:template name="Blogs" match="Row[@Style='Blogs']" 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="SafeImageUrl">
        <xsl:call-template name="OuterTemplate.GetSafeStaticUrl">
            <xsl:with-param name="UrlColumnName" select="'ImageUrl'"/>
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="DisplayTitle">
        <xsl:call-template name="OuterTemplate.GetTitle">
            <xsl:with-param name="Title" select="@Title"/>
            <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="LinkTarget">
        <xsl:if test="@OpenInNewWindow = 'True'" >_blank</xsl:if>
    </xsl:variable>
      <xsl:variable name="publishedDate" select="ddwrt:FormatDateTime(string(@PublishedDate),3082
                            ,'dd/MM/yyyy')" />
    <xsl:variable name="pureText">
        <xsl:call-template name="removeHtmlTags">
            <xsl:with-param name="html" select="@Body" />
        </xsl:call-template>
    </xsl:variable>
    <div>
        <a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
            <p><xsl:value-of select="$publishedDate"/>  <xsl:value-of select="@Author"/></p>
            <p><strong><xsl:value-of select="$DisplayTitle"/></strong></p>
            <xsl:if test="string-length($SafeImageUrl) != 0">
                <img src="{$SafeImageUrl}" width="77" height="77" alt="{@ImageUrlAltText}"/>            
            </xsl:if>
            <p><xsl:value-of select="substring($pureText, 0, 250)" disable-output-escaping="yes" />...</p>
        </a>
    </div>
</xsl:template>

4. Editar el CQWP y establecer como estilo para los elementos el que acabamos de crear.

5. Exportar el CQWP y editar el fichero generado para buscar la siguiente línea:

<property name="CommonViewFields" type="string"/>

y cambiarla por lo siguiente:

<property name="CommonViewFields" type="string">PublishedDate,DateTime;Body,Memo;</property>

6. Eliminar el CQWP de la página e importar el fichero que acabamos de modificar.

Et voilà! La verdad: una vez hecho me doy cuenta de que he seguido los mismos pasos que he seguido siempre para añadir campos personalizados a los CQWP pero, no sé muy bien por qué, esta vez ha costado más de la cuenta.

miércoles, 1 de octubre de 2008

En casa del herrero...

... web hecha en MOSS. Bueno, tiempo para un post no técnico para informar de que por fin, después de varios años de andar utilizando Sharepoint en muchos de nuestros proyectos, hemos encontrado un hueco para traspasar la web de nuestra compañía a esta plataforma, uniéndose al conjunto de herramientas (intranet, proyectos, kb, etc...) que ya la utilizaban. En esta primera fase el objetivo ha sido poco ambicioso debido a las restricciones de tiempo. Las características básicas de lo que actualmente se puede ver son:
  • Portal de publicación con espacio para todos los contenidos que existían en la versión anterior.
  • Preparado para el salto a multi-idioma utilizando variaciones de sitio.
  • Pequeña integración con Live Maps para la sección de contacto.

A medida que se publiquen las sucesivas fases que están previstas iré informando de ello aquí mismo. Entre las futuras novedades, veremos:

  • Publicación de contenidos en más idiomas.
  • Aprovechamiento de las características Web 2.0 que proporciona Sharepoint.
  • Integraciones con nuevas tecnologías como Silverlight.
  • Etc.