Introducción al PnP Program y Provisioning framework

Escrito por Luis Mañez - 03/03/2016

​Desde hace cerca ya de dos años, un grupo de Patterns and Practices de Microsoft, liderado por Vesa Juvonen (http://blogs.msdn.com/b/vesku), inicio el programa Office 365 Dev PnP, con la idea principal de ayudar a los clientes a transformar y realizar la transición del modelo Soluciones Full Trust de SharePoint, al modelo de AddIns, tratando de establecer unas guías y buenas prácticas para hacer ese paso.´

 

Componentes del programa PnP

El Office 365 Dev PnP se liberó en GitHub, y poco tiempo después se dividió en distintos repositorios. Estos son algunos de los componentes principales:

  • PnP-Sites-Core:
    • https://github.com/OfficeDev/PnP-Sites-Core
      Es el componente principal del PnP. Se trata de una .dll con diferentes clases y métodos que nos harán la vida más fácil al trabajar con el modelo cliente de SharePoint (CSOM). Además, incluye el framework de Provisioning del que hablaremos en breve.
  • PnP-Provisioning-Schema:
    •  https://github.com/OfficeDev/PnP-Provisioning-Schema
      Este proyecto contiene el Schema XML que es utilizado por el framework de provisioning. Este XML nos recordara bastante al XML utilizado en las "antiguas" soluciones SharePoint, y desde él se pueden definir la mayoría de los componentes de una solución de SharePoint: Fields, ContentTypes, Lists, Files, Pages, RegionalSettings, etc.
  • PnP-PowerShell:
  • PnP:
    • https://github.com/OfficeDev/PnP Este fue el repositorio original, que posteriormente fue dividido en varios repositorios, entre los que se encuentran los anteriores. Actualmente este repositorio contiene varios ejemplos de uso del PnP y otras buenas prácticas.

Ejemplos interesantes

El siguiente listado contiene algunos de los ejemplos más interesantes que podemos encontrar en el PnP, si bien es muy recomendable revisar todos los ejemplos.

Extensiones y utilidades con CSOM

Algunas de las clases y métodos que extienden CSOM:

  • ClientContextExtensions.ExecuteQueryRetry
    Similar al método ExecuteQuery(), pero gestiona posibles errores de conexión y aplica varios reintentos (10, por defecto, con un retardo de 500 ms).
  • FieldAndContentTypeExtensions: Clase con varias extensiones para trabajar con Campos y Tipos de contenido.
  • ListExtensions: Extensiones para trabajar con Listas (crear Listas, Vistas, obtener listas, etc.).
  • TaxonomyExtensions: Extensiones para trabajar con Campos de tipo Metadato Administrados (crear campos de tipo Metadato, crear Términos, Crear Grupos, etc).

Provisioning Framework

Probablemente sea la estrella del PnP. Este framework pretende sustituir el antiguo modelo de despliegue de soluciones SharePoint basadas en soluciones WSP y hacerlo basado en un modelo remoto, usando CSOM, y un esquema XML propio para la definición de Columnas, Listas, Paginas, etc.

Como hemos mencionado anteriormente, el esquema XML está definido en el proyecto PnP-Provisioning-Schema y estos son los nodos principales:

 

Y la definición de una Plantilla se compone de:

 

La definición completa del esquema la podéis encontrar en:

https://github.com/OfficeDev/PnP-Provisioning-Schema/blob/master/ProvisioningSchema-2015-12.md

Nota: Es importante saber que no todos los nodos del Esquema son posteriormente soportados por el framework de provisioning. Por ejemplo, el Nodo Sequence permite definir SiteCollections (Colecciones de Sitios) y Sites (Sitios) dentro de él, por lo que sería lógico pensar que el framework permite crear Colecciones de Sitio y Sitios, sin embargo, por desgracia, esto es algo que (todavía) no está soportado por el framework.

Un sencillo, pero completo ejemplo de XML lo tenemos en:

https://github.com/OfficeDev/PnP-Provisioning-Schema/blob/master/Samples/ProvisioningSchema-2015-12-ReferenceSample-01.xml

Y el siguiente código C# provisionaría el XML sobre un sitio existente:

XMLFileSystemTemplateProvider provider =
                new XMLFileSystemTemplateProvider(@"c:\temp\pnpprovisioningdemo", "");
string templateName = "template.xml";
ctx.Web.ApplyProvisioningTemplate(template);

Lo bueno es que el framework también permite crear el XML desde un sitio ya existente (no se exporta absolutamente todo, por ejemplo, no se exportan todas las paginas existentes). Para exportar un sitio y guardar el XML generado, podemos utilizar el siguiente código:

XMLFileSystemTemplateProvider provider = new    XMLFileSystemTemplateProvider(@"c:\temp\pnpprovisioningdemo", "");
string templateName = "template.xml";
provider.SaveAs(template, templateName);

También podemos exportar un sitio como Template, o aplicar una plantilla XML desde PowerShell, con los comandos:

Seguimiento del programa PnP

Además de los proyectos de GitHub, el equipo de PnP sigue liberando continuamente material muy interesante sobre el desarrollo para Office 365:

 

Luis Mañez

SharePoint / Cloud Solutions Architect en ClearPeople LTD
@luismanez
http://geeks.ms/lmanez/

***