jueves, 17 de mayo de 2012

Sharepoint y HTML5


SharePoint and HTML5 por Fernando Hunth
clip_image001El propósito de esta serie de SharePoint y HTML5 no es desmembrar HTML5 sino para ver cómo podemos aplicarlo dentro de SharePoint. Cada artículo, presenta las investigaciones pertinentes y vínculos útiles a otros recursos relacionados para SharePoint y HTML5
clip_image003Introducción
Hay muchos recursos donde se puede obtener información acerca de la nueva versión de HTML, HTML5, en detalle. Puede encontrar varios recursos aquí:
Cuando se pregunta "Que es HTML5" se escuchan algunas respuestas como las siguientes:
"Se trata de la nueva web semántica."
"Es un reemplazo de Adobe Flash."
"Es un Nuevo lenguaje para aplicaciones mobile."
También se escuchan personas que mencionan los nuevos elementos estructurales, Client Storage, etc
HTML5 fue presentado por el WHATWG - Web Hypertext Application Technology Working Group y W3C World Wide Web Consortium. Diseñado para ayudar a los desarrolladores web y diseñadores, sin necesidad de añadir plugins para cosas como el vídeo, audio/mp3, la función de selección de fecha, marcador de posición en el cuadro de entrada, canvas, gráficos 2D/3D, base de datos SQL local , etc
Con todo lo que está disponible se puede empezar a escribir una web más lógica y semántica. Es nuestro trabajo utilizar esas herramientas de una manera inteligente a fin de crear contenidos de calidad y mejorar la forma de escribir y entender la web.
clip_image005Preguntas Básicas
Comencemos por preguntarnos algunas preguntas básicas
Que es <!DOCTYPE> ?
<!DOCTYPE> es una instrucción para que los navegadores sepan qué versión de HTML de la página está escrita , no tiene etiqueta de cierre ni es case sensitive.
<! DOCTYPE> debe ser lo primero en un documento HTML 5, antes de la etiqueta <html>. Al igual que en HTML 4.01, todo <! DOCTYPE> requiere una referencia a una definición de tipo de documento (DTD), ya que HTML 4.01 se basa en Standard Generalized Markup Language (SGML). HTML5 no está basado en SGML, y por lo tanto no requiere una referencia a una definición de tipo de documento (DTD).
clip_image007Elementos Markup
<article>
<aside>
<bdi>
<command>
<details>
<summary>
<figure>
<figcaption>
<footer>
<header>
<hgroup>
<mark>
<meter>
<nav>
<progress>
<ruby>
<rt>
<rp>
<section>
<time>
<wbr>
Elementos Media
<audio>
<video>
<source>
<embed>
<track>
<canvas>
Atributo de Input Type
tel
search
url
email
datetime
date
month
week
time
datetime-local
number
range
color
placeholder
Video y Audio
Video

1 <video width="800" height="600" controls="controls">
2 <source src="Satisfaction.mp4" type="video/mp4" />
3 <source src=" Satisfaction.ogg" type="video/ogg" />
4 </video>

Audio

1 <audio controls="controls">
2 <source src="Satisfaction.ogg" type="audio/ogg" />
3 <source src="Satisfaction.mp3" type="audio/mpeg" />
4 </audio>

Elemento Canvas
Se puede utilizar el elemento canvas para dibujar imágenes de gráficos en una página web mediante JavaScript / jQuery, como a continuación

1 <canvas id="SharepointCanvas" width="800" height="600"></canvas> <script type="text/javascript">
2 var SharepointCanvas=document.getElementById("SharepointCanvas");
3 var pcdsText=SharepointCanvas.getContext("2d");
4 pcdsText.fillStyle="#FF0000";
5 pcdsText.fillRect(0,0,150,75);
6 </script>

clip_image009Storage
localStorage
Si no estás usando HTML5, lo podes hacer con las cookies. Las cookies no son muy buenos para grandes cantidades de datos, ya que se pasan en todos los roundtrips, comprometiendo el rendimiento.
Ahora en HTML5, es posible almacenar grandes cantidades de datos sin afectar al rendimiento del sitio web y los datos se almacenan en diferentes áreas. Si necesitas para crear localstores sólo tenés que llamar a los objetos localStorage como a continuación.

1 <script type="text/javascript">
2 localStorage.name="Fernando Hunth";
3 document.write(localStorage.name);
4 </script>
5 <script type="text/javascript">
6 localStorage.address="Argentina";
7 document.write(localStorage.address);
8 </script>

El objeto sessionStorage guarda la información para tu actual sesión. La información es borrada cuando se cierra el browser.
Podes darle una Mirada a los elementos HTML5 y sus constantes cambios en http://dev.w3.org/html5/markup/elements.html
Arranquemos viendo algo con SharePoint y HTML5
Hay algunas maneras básicas de usar HTML5 en SharePoint.
  • CEWP
  • Master Pages
  • Custom WebParts
  • Etc
También hay cosas más avanzadas para su uso en SharePoint, pero vamos a verlo más adelante. En este capítulo vamos a cubrir cómo hacer uso de algunos de HTML5 con un CEWP
Content Editor Web Part - CEWP
Hay un ejemplo en vivo (Browsear con Chrome ) aqui que muestra un simple rectángulo rojo dibujado en un elemento CANVAS usando una SharePoint Content Editor Web Part.
clip_image011
Estos son los pasos para implementarlo en tu página Sharepoint:
Pasos
  • Crear un Nuevo archive.js y agregarle este código:

01 <canvas id="myCanvas" width="200" height="100" style="border-bottom: #c3c3c3 1px solid; border-left: #c3c3c3 1px solid; border-top: #c3c3c3 1px solid; border-right: #c3c3c3 1px solid">
02 </canvas>
03
04 <script type="text/javascript">
05
06 var c=document.getElementById("myCanvas");
07 var ctx=c.getContext("2d");
08 ctx.fillStyle="#FF0000";
09 ctx.fillRect(0,0,150,75);
10
11 </script>

  • Subir el archivo .js a una SharePoint Document Library
  • Crear una nueva página con una Content Editor Web Part
  • Editar la Content Editor Web Part
  • En el Content Link escribir el path al archivo javascript que subiste
  • Click OK
  • Guardar la pagina
  • Browsear con un browser que permita rendering HTML5 (por ejemplo Google Chrome)

jueves, 3 de mayo de 2012

Sharepoint Best Practices: Powershell



SharePoint Best Practices: PowerShell

Introducción
Hoy en día al desarrollar con SharePoint suele suceder que podemos tener más de un ambiente de trabajo, en muchos casos contamos con varios ambientes de desarrollo y al menos un ambiente de prueba. Por supuesto, además contamos con el ambiente productivo en el cual se encuentran los datos reales del negocio.

En el esquema “tradicional” de desarrollo de aplicaciones, es decir, fuera del mundo SharePoint, los datos del negocio suelen estar almacenados en Bases de Datos, y además solemos contar con varias de ellas para los diferentes ambientes con los que trabajamos. Generalmente estas bases son accesibles directamente por nosotros (desarrolladores) y se nos permite replicar los datos alojados en una Base de Datos a otra Base de Datos, salvo restricciones de seguridad, para poder emular escenarios a través de los diferentes ambientes.

Pero, ¿qué pasa con SharePoint? En SharePoint el asunto es un poco distinto. La manera “tradicional” de guardar datos en SharePoint es a través de las Listas, las cuales no son tan fáciles de replicar en otros ambientes. El manejo de las listas tiene sus particularidades, y el almacenamiento de sus datos en la Base  de Datos no es tan directo como con las aplicaciones “tradicionales”.

Sin embargo, actualmente, SharePoint nos ofrece distintas alternativas a la hora de poder reproducir el contenido que se encuentra en una Lista de un Servidor, o conjunto de Servidores, a una Lista de otro Servidor, o conjunto de Servidores.

Una de estas alternativas, y sobre la cual nos enfocaremos en el artículo, consiste en hacer uso de dos comandos de PowerShell que pueden ser ejecutados a través de la Consola de Administración de SharePoint y que nos permitirán tanto exportar como luego importar el contenido de una manera práctica, rápida y sencilla. Estos comandos son Export-SPWeb e Import-SPWeb respectivamente.

Cómo Exportar el Contenido de una Lista con PowerShell
Para exportar el contenido de una Lista SharePoint de un Servidor o Farm de Servidores SharePoint a través de la Consola de Administración de SharePoint debemos usar el comando Export-SPWeb, el cual nos permite exportar el contenido de una Lista SharePoint a un archivo o carpeta en el disco. Para ello deberemos seguir los siguientes dos pasos:
  1. Abrir la Consola de Administración de SharePoint como Administrador.
  2. Ejecutar el comando Export-SPWeb, tal como se muestra a continuación:
/*** EXPORT LIST ***/
Export-SPWeb -Identity [WEB_IDENTITY] -Path [EXPORT_PATH] -ItemURL /Lists/[LIST_NAME] -IncludeVersions CurrentVersion –Verbose -Force -NoLogFile
En donde se deberán configurar los siguientes parámetros:
  • -Identity [WEB_IDENTITY]: Permite indicar el Sitio Web del cual se desea exportar el contenido de la Lista SharePoint. El valor del parámetro [WEB_IDENTITY] puede ser tanto el GUID como la URL del Sitio Web.
  • -Path [EXPORT_PATH]: Permite indicar la ruta completa del archivo en el cual se exportará el contenido de la Lista SharePoint. Si la ruta contiene espacios en blanco se deberá encerrar el valor [EXPORT_PATH] con comillas dobles (").
  • -ItemURL /Lists/[LIST_NAME]: Permite indicar la ruta de la Lista SharePoint que se desea exportar. El valor del parámetro [LIST_NAME] debe ser un nombre válido que apunte a la Lista SharePoint que se desea exportar.
  • -IncludeVersions CurrentVersion: Permite indicar qué versiones del contenido de la Lista SharePoint se desean exportar. En este caso particular, sólo se exportará la versión actual.
  • -Verbose: Permite indicar si se mostrará un log por pantalla con el resultado de la exportación del contenido de la Lista SharePoint.
  • -Force: Permite sobrescribir el archivo de destino de la exportación si es que el mismo ya existe. Si no se especifica éste parámetro, por defecto el archivo no será sobrescrito.
  • -NoLogFile: Permite indicar que no se deberá crear un archivo de log al exportar el contenido de la Lista SharePoint.

A continuación se presenta un ejemplo de cómo exportar el contenido de una Lista SharePoint llamada TestList que se encuentra en el Servidor SharePoint develop01 a un archivo en disco:
/*** EXPORT LIST ***/
Export-SPWeb -Identity http://develop01:8081/ -Path "C:\Develop\BF\BF.KP.Packages\ListsContents\TestList.cmp" -ItemURL /Lists/TestList -IncludeVersions CurrentVersion -Verbose -Force -NoLogFile

Cómo Importar el Contenido a una Lista con PowerShell
Para importar el contenido de una Lista SharePoint a un Servidor o Farm de Servidores SharePoint a través de la Consola de Administración de SharePoint debemos usar el comando Import-SPWeb, el cual nos permite importar el contenido de una Lista SharePoint que haya sido previamente exportado a un archivo o carpeta en el disco, a un Servidor SharePoint, el cual podrá ser tanto el mismo Servidor como cualquier otro que tenga instalada la Definición de Lista en cuestión. Para ello deberemos seguir los siguientes dos pasos:
  1. Abrir la Consola de Administración de SharePoint como Administrador.
  2. Ejecutar el comando Import-SPWeb, tal como se muestra a continuación:
/*** IMPORT LIST ***/
Import-SPWeb -Identity [WEB_IDENTITY] -Path [IMPORT_PATH] –Verbose -NoLogFile
En donde se deberán configurar los siguientes parámetros:
  • -Identity [WEB_IDENTITY]: Permite indicar el Sitio Web en el cual se desea importar el contenido de la Lista SharePoint. El valor del parámetro [WEB_IDENTITY] puede ser tanto el GUID como la URL del Sitio Web.
  • -Path [IMPORT_PATH]: Permite indicar la ruta completa del archivo del cual se importará el contenido de la Lista SharePoint. Si la ruta contiene espacios en blanco se deberá encerrar el valor [IMPORT_PATH] con comillas dobles (").
  • -Verbose: Permite indicar si se mostrará un log por pantalla con el resultado de la importación del contenido de la Lista SharePoint.
  • -NoLogFile: Permite establecer que no se deberá crear un archivo de log al importar el contenido de la Lista SharePoint.

A continuación se presenta un ejemplo de cómo importar el contenido de la Lista SharePoint exportada anteriormente al archivo TestList.cmp, pero al Servidor SharePoint develop02:
/*** IMPORT LIST ***/
Import-SPWeb -Identity http://develop02:8081/ -Path "C:\Develop\BF\BF.KP.Packages\ListsContents\TestList.cmp" -Verbose –NoLogFile

Sugerencias al Exportar e Importar Contenido de Listas SharePoint
Si bien en primera instancia el manejo de la exportación e importación del contenido de Listas SharePoint parece una tarea fácil y hasta trivial, la misma puede presentar ciertas complicaciones, especialmente a la hora de importar contenido desde otros Servidores.
Es por ello deberemos tener presentes las siguientes cuestiones al exportar e importar el contenido de Listas SharePoint:

  • Antes de importar el contenido de una Lista de SharePoint es necesario tener instalada y activada la Definición de Lista correspondiente, sino el proceso puede arrojar errores inesperados al tratar de crear nuevamente la Lista SharePoint.
  • El proceso de importación además de cargar el contenido de la Lista SharePoint, crea una nueva instancia de la misma si es que ésta no existe. Por lo tanto, si se desea reproducir un ambiente en otro Servidor SharePoint será necesario eliminar manualmente la Lista SharePoint si es que la misma ya existiese en el Servidor de destino a fin de evitar posibles inconvenientes con los datos ya existentes.
  • Si la Lista SharePoint que se está tratando de importar tiene un campo con una referencia LookUp a otra Lista SharePoint, primero se deberá importar el contenido de la Lista SharePoint referenciada de manera que cuando se importe la Lista que posee la referencia, pueda encontrar el contenido apuntado en la Lista de Referencia. Si el proceso se hiciera al revés, o si la lista no existiese, el proceso de importación arrojaría resultados inesperados.

Por último, vale la pena aclarar que tanto al exportar como al importar el contenido de una Lista SharePoint de un Servidor o una Farm de Servidores SharePoint será necesario ejecutar la ventana de la Consola de Administración de SharePoint con privilegios de usuario Administrador, ya que se requieren de permisos especiales para poder ejecutar los comandos Export-SPWeb e Import-SPWeb.

Otros Usos Para los Comandos Export-SPWeb e Import-SPWeb
Si bien en el presente artículo se usaron los comandos Export-SPWeb e Import-SPWeb para permitir la exportación e importación del contenido de Listas SharePoint, estos dos comandos se pueden usar para exportar e importar cualquier tipo de objeto SharePoint, entre los cuales se pueden enumerar:
  • Colecciones de Sitios
  • Aplicaciones Web
  • Bibliotecas
  • Listas

En Baufest

En Baufest, quienes construimos sobre Sharepoint, el uso de PowerShell forma parte de nuestras buenas practicas a la hora de implementar lo que construimos, siempre y cuando encajen en el governance de nuestro cliente.
Hemos encontrado que la mejor manera de equilibrar las personalizaciones solicitadas y una sólida metodología con Best Practices de implementación es el uso de PowerShell en lugar de código creado en la activación de Features y otros eventos en los paquetes de soluciones. Es mandatorio establecer cuando y porque PowerShell - y no una compiled Feature y Solution Packages (WSPs)

Gracias a Ariel Bensussan por haber colaborado con este artículo.

Seguinos en Twitter