martes, 4 de febrero de 2014

SP2013: Cómo incluir una vista de una lista en un Layout Template


Si habéis tenido la ocasión de trabajar con SharePoint 2013, ya sabréis que viene con un “Design Manager” que facilita la generación del paquete de diseño de un site (Master Pages, Pages Layouts, Display Templates…).

Hoy voy a centrarme en la casuística que tengamos que diseñar un Template Layout que contenga en sí mismo una “lista” (una vista de la misma) de nuestro site. Esto que a priori uno podría pensar que no se puede hacer (pues los Template Layous son puro “HTML” y no deja introducir componentes ni fragmentos de código ASP.NET), sí que se puede conseguir mediante el uso de SNIPPETS y algo de esfuerzo manual que, para evitar que perdáis demasiado tiempo investigando o tentados a caer en el pozo de la locura, os contaré en este post:


Lo primero de todo es crear una visualización (vista) de la lista, tal cual la queremos introducir en nuestro Template Layout. Para este ejemplo he tomado el escenario de tener que realizar un Blog personalizado, con un menú de navegación histórico en el frame lateral derecho. Una posible solución para este componente (.NET code free) es realizarlo mediante una vista de la lista de páginas de posts agrupadas por el metadato “mes”, tal y como muestra la siguiente imagen:


Para que esta vista de la lista de posts pueda ser utilizada como elemento de navegación de un frame lateral de nuestro “Template Layout” del detalle de un post, lo siguiente que tendremos que hacer es convertir esta “vista” en un “webpart”. Para ello, abrimos SharePoint Designer y abrimos el sitio donde estamos trabajando. Una vez dentro del sitio, vamos a la sección de "List and Libraries" y pulsamos encima de la lista donde hemos creado la visualización que queremos incorporar



Una vez que la página se ha abierto en modo de edición, situamos el puntero del ratón dentro de la zona del webpart de visualización de la lista (por debajo del tag <WebPartPages:XsltListViewWebPart") y en la cinta de acciones, en la pestaña de WEB PART TOOLS, en la sección de "Save Web Part", pulsamos en el icono "To Site Gallery"


En el pop-up, introducimos el nombre del WebPart y pulsamos en el botón de "OK"


Con esto ya tendremos guardada la vista como un WebPart personalizado. El siguiente paso es obtener el código para insertarla en un Snippet.

Para ello tendremos que vovler a SharePoint y en el desplegable de opciones de la rueda dentada de "Settings", seleccionamos "Design Manager"

 
Una vez dentro del Design Manager, tendremos que seleccionar el apartado "6. Edit Page Layouts" y pulsar sobre el nombre del Page Layout que deberíamos haber creado previamente (en caso de tener que crearlo, consultar el procedimiento aquí)

 
Una vez estemos en la Preview Page que nos muestra cómo está quedando nuestro Layout, pulsaremos en el enlace de "Snippets" que veremos en header de la derecha de lpantalla.
 
 
De esta forma hemos accedido a la "Snippet Gallery", donde podemos obtener código de snippets a partir de Web Parts y Page Fields previamente existentes. Como hemos transformado nuestra vista en un WebPart, desde aquí también podremos obtener el código para su snippet.
 
Sin embargo, antes de hacerlo, crearemos una zona de Web Parts donde situar posteriormente el Web Part de la vista de nuestra lista.
 
Para ello, pulsaremos en el botón de "Web Part Zone" que hay en la sección de "Containers", y obtendremos su código en la ventana de "HTLM Snippet", pulsando sobre el botón "Copy to Clipboard".
 
 
Con el código en el portapapeles, volvemos a SharePoint Designer y editamos en él nuestro Page Layout (sección Page Layouts y "Edit File").
 
 
Dentro del código del Page Layout, nos situamos en la zona donde queramos añadir la visualización de la lista, y "pegamos" el código del portapapeles (Snippet de la Web Part Zone).
Debería quedarnos algo como lo siguiente (tras formatearlo correctamente):
 
 
Ahora que ya tenemos nuestra WebPart Zone, vamos a volver a la galería de Snippets, y esta vez sí, seleccionamos en "Other Web Parts" el Web Part que creamos desde nuestra visualización de la lista.
 
 
 Este es el momento para modificar el Web Part resultante a nuestro gusto, retocando los parámetros que queramos en la Zona de configuración del WebPart, como el título del mismo, el "Chrome Type", la URL del título, etc. A mí me pasó que me aceptaba la 1a modificación (pulsando el botón "Update"), pero no una segunda, de manera que al pulsar por segunda vez el "Update" me daba error en la página. Si os pasa esto también, aseguraos de dejar el WebPart perfectamente configurado con un único Update.
 
 
Una vez tengamos el WebPart perfectamente configurado a nuestro gusto, copiamos el código del snippet resultante con el botón "Copy to Clipboard".
 
 
Ahora volvemos a SharePoint Designer, y pegamos el código dentro de la zona de "Web Part Zone" que hemos pegado anteriormente, justo en sustitución de la línea:
"<!--DC: Replace this comment with default web parts for new pages. -->"
Debería quedarnos un código similar al de la siguiente imagen:
 
 
Un paso importante antes de finalizar la edición de la página, es que debemos registrar el Namepace en la cabecera de la misma.
 
Para ello tendremos que seleccionar todo lo contenido en el primer tag "SPM" del código de nuestro WebPart:
 
"<!--SPM:<%@Register Tagprefix="ab9da2256"  Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>-->" 
 
 
Este trozo de código hay que pegarlo de nuevo en la cabecera de la página, justo debajo de los los otros registros (veremos un conjunto de declaraciones "SPM") y antes del
"<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"[]>"
 

Nos aseguramos de guardar todos los cambios realizados en el Layout Template.

¡Ahora sí! No ha sido trivial, pero por fín podremos visualizar nuestra "lista" (o vista personalizada de la misma) en todas las páginas creadas a partir del Layout Template que hemos trabajado.

Os dejo una imagen para que veais el resultado que obtuve en el blog que creé ("HISTORY en la zona inferior derecha")

 
¡Misión cumplida! Una lista de SharePoint embebida en una página HTML de Layout Template mediante código snippet. No es una frase con la que vayamos a seducir a nuestra mujer, pero seguro que a muchos les alegra saber que puede hacerse.

¡¡Hasta la próxima!!

No hay comentarios: