lunes, 14 de diciembre de 2015

Primero lo primero, la estructura de datos

La primer vez que me dediqué a desarrollar una solución sobre SharePoint recuerdo sentarme frente a la computadora, poner las manos en el teclado y decir: ¿por dónde comienzo? Fue ahí que me di cuenta que el primer paso que siempre hacía (definir la estructura de la base de datos) cambiaba de enfoque debido a que en lugar de tener tablas y vistas ahora tenía listas y bibliotecas (además de columnas de sitio y tipos de contenido que en ese momento no sabía a ciencia cierta cómo usar). Mi primer paso fue apoyarme de la interfaz gráfica para crear las listas a ocupar. Aprendí cuándo usar una lista para un catálogo y cuándo una columna de tipo Elección, etc.
Después de un tiempo desarrollando, la primer pregunta sigue siendo la misma: ¿cómo almacenaremos los datos? y, ya pensando un poco a futuro y, sobre todo en colocar la solución en un ambiente de pruebas y el productivo; uno busca la forma de ahorrarse el tiempo que pasaría en el navegador definiendo las listas o resolviendo problemas de compatibilidad con plantillas, entre otras curiosidades que se pueden encontrar al migrar la solución de una granja a otra o bien, entre versiones de las granjas.
La solución es sencilla (requiere su esfuerzo pero es sencilla jeje). Define tu modelo de datos en el proyecto de Visual Studio, empaquétalo y cuando lo implementes en otras granjas éste se creará completo ahorrándote todo el tiempo que se invierte en pulir esos detalles del pase a producción.

Pongamos un ejemplo. 

Ejemplo de modelo Entidad Relación del escenario propuesto
Pensemos en un sistema en el que un usuario registra un rango de fechas para solicitar licencia. Dicha solicitud almacena el usuario, la fecha de inicio y fin del periodo, el nombre de la persona que tomará sus responsabilidades en ese periodo y una categoría para la licencia (vacaciones, seminario/capacitación, razón médica).
Al leer el ejemplo y pensar en un modelo de base de datos tradicional, uno vislumbraría una tabla en la que se almacene el catálogo de "Categorías de licencia" y una tabla en la que se almacenan las solicitudes.
Ejemplo simplificado en SharePoint

En cambio, si ocupamos las opciones que nos provee SharePoint al momento de diseñar las listas, podríamos ahorrarnos una de las tablas si en lugar de usar una lista adicional ocupamos un campo de tipo Elección. Claro está que la elección de la solución depende del requerimiento sin embargo, no nos compliquemos la vida y pensemos en que el campo de tipo Elección es adecuado al requerimiento.

Esto nos indica que tendremos dos campos de tipo Fecha, un campo de tipo persona y un campo de tipo elección.
Podemos dispensar del campo ID y Solicitante ya que SharePoint nos provee con estos de forma automática.

El proyecto de Visual Studio

Una vez identificada nuestra estructura de datos abramos Visual Studio y creamos un proyecto de SharePoint. Las siguientes opciones funcionan tanto para Soluciones On Premise como On Line por lo que siéntete con la seguridad de que funcionará (por favor revisa la sección probando jejeje). En este caso estamos usando Visual Studio Community 2015. En la siguiente liga coloco un post de cómo configurar Visual Studio para poder usar las plantillas de proyectos de Office/SharePoint. Nosotros usaremos la opción de App's para SharePoint Online.
En Visual Studio selecciona la opción File > New Project y selecciona Templates > Visual C# > Office/SharePoint y selecciona SharePoint Add-in.
Creando un proyecto para SharePoint Online
Al presionar el botón OK, Visual Studio solicitará la URL de tu sitio de desarrollo, en mi caso, coloco la URL de mi sitio en Office 365 con la opción SharePoint-hosted y proveo mis credenciales de acceso. 

También solicitará la versión del sitio de SharePoint, en mi caso selecciono SharePoint Online.


Al presionar el botón Finish, Visual Studio creará un proyecto con la plantilla adecuada. Para dar un poco de orden a los siguientes puntos, coloqué algunas carpetas anidadas en las que definiré las columnas de sitio y la lista.

Las columnas de sitio

Una columna de sitio es la definición de un tipo de dato que puede ser usado varias veces en un sitio de SharePoint y ahí es donde radica su utilidad. Por otro lado, tienes un control mucho mayor que apreciarás en su momento como, la posibilidad de ocupar una clave como título y otra para descripción y, de esta forma, controlar el idioma del nombre y descripción de la columna que se muestra al usuario. En otro momento hablaremos de este tema.
Lo primero que se necesita para agregar una columna de sitio es, presionar con el botón derecho sobre el folder Columnas y seleccionar las opciones Add > Add New Item. Esto abrirá un cuadro de diálogo en el que la opción Site Column estará disponible, selecciónala y dale un nombre a la columna. Te recomiendo que al definir nombres internos o de referencia nunca ocupes espacios o caracteres especiales ya que estos valores se codifican de otra forma y te harán un poco difícil el desarrollo.
Al realizar este procedimiento se generará un archivo xml en el que podrás definir el resto de las propiedades de las columnas por ejemplo, en la siguiente ilustración coloco la definición de la columna TipoLicencia que es de tipo Choice y Requerida. Para que puedas construir el resto de las columnas (de tipo fecha y persona) te recomiendo la definición de Microsoft que contiene un par de ejemplos adicionales.

La lista

Una vez creadas las columnas, es necesario crear la plantilla de la lista en la que se hará referencia a las columnas recientemente creadas. Para ello de click derecho a la carpeta Listas y seleccione las opciones Add > Add New Item.
En el cuadro de diálogo que aparece, seleccione la opción List y dele un nombre a la lista.
Visual Studio le presentará un Wizard con el que podrá elegir la plantilla de la lista, revise las opciones para que se dé una idea de las posibilidades para futuros proyectos. En nuestro caso dejamos la selección original y presionamos el botón OK.
Al presionar Finish el Wizard creará varios archivos xml con los que podremos definir varias opciones de la lista incluso, los formularios para visualizar, dar de alta y actualizar la información de ítem. 
Archivos XML de configuración de la lista
El archivo que contiene el grueso de la información es el llamado Schema.xml. Éste archivo está compuesto de cuatro secciones principales:

    1. Content Types
    2. Fields
    3. Views
    4. Forms
Los Content Types son plantillas de información bastante útiles y que veremos en otro post debido a su extensión. Por el momento basta con decir que en dicha sección se colocarán referencias a las columnas que creaste en la sección Las columnas de sitio, y que agregas en el editor que aparece justo después de haber finalizado el Wizard de la creación de la lista (La imagen de abajo muestra el editor y las columnas que hemos agregado, dichas columnas son las que creamos en la sección anterior). 
En la sección Fields se encuentra toda la definición de las columnas que creamos anteriormente. Esta redundancia se debe a motivos de seguridad y es que, ¿qué ocurriría si su proyecto llegara a productivo y por algún error, un administrador borrara la definición de una columna de sitio que sea ocupada por la lista?, por ejemplo Suplente. Para evitar que se genere un error, la lista tiene su propia definición de la columna de sitio.
Estructura del archivo Schema.xml
Tanto la sección Views como Forms merecen cada uno su propio post debido a que cada uno tiene configuraciones especiales. En el caso de Views, ésta sección del XML administra la estructura de la vista; desde su nombre, el número de elementos a mostrar, el orden de las columnas, los datos a mostrar, los criterios de filtrado y los archivos con los que se manejará la apariencia de la lista. Para la sección de Forms está destinado el archivo que manejará el formulario para Edición, Inserción y Visualización de datos. En éstos archivos podrás agregar referencias a elementos JavaScript y CSS, lo que te dará un mejor manejo y presentación del formulario.
Agregando columnas de sitio a la lista.














Finalmente agregaremos un vínculo a la lista para que puedas probar su funcionamiento. Para ello, abre el archivo Default.aspx que está dentro de la carpeta Pages. Dentro coloca el código HTML para dirigirte a la lista, por ejemplo yo ocupé el siguiente fragmento de código:
Agregando vínculos a nuestra lista

Probando

Es el momento de probar todo el trabajo, para ello ejecuta el depurador con la tecla F5.
Una vez que termine de implementar la solución verás una página similar a la que se muestra en el lado izquierdo, en ella verás el vínculo que colocamos; al seguir el vínculo te mostrará la lista que definimos con todos los XML.
Te recomiendo que hagas avances pequeños cuando definas tu estructura de datos y los pruebes; es decir, crea las columnas que necesites para tu primer lista y también crea dicha lista, posterior a eso prueba que funcione correctamente. Si todo sale bien, crea las siguientes columnas que necesites, su lista y vuelve a probar. 
¿A qué se debe mi sugerencia?
Lamentablemente existen algunos problemas al momento de implementar las soluciones durante el desarrollo, relacionados con SharePoint. Entre los problemas más comunes están, que no puedas ocupar la lista debido a que una de las columnas no fue creada de forma correcta (ocurre seguido con las columnas de tipo Choice y Lookup). La solución a este problema es eliminar la columna problema y volverla a crear (esto a nivel del Visual Studio), lo cual es un problema si tienes poco tiempo para realizar el desarrollo. En ambientes productivos no he tenido dicho problema pero, si a alguno de ustedes le ha ocurrido, ojalá puedan compartir su experiencia.

Los siguientes pasos

Con esto concluimos nuestro primer post, esperamos que les sea de utilidad en sus proyectos y siéntanse libres de expresar todos sus comentarios. En nuestros siguientes artículos le daremos un poco más de funcionalidad a nuestra lista con:
  • Formularios de listas personalizados
  • Usando JSOM

Enlaces de interés