Tipos de géneros de libros - Repositorio

Hola a todo@s, en la siguiente entrada y continuando con la serie de entradas en el blog La librería, se va a definir el repositorio de almacenamiento que contendrá los diferentes tipos de géneros de libros.

Los objetos que persigue la entrada son los siguientes:

  • Definir el repositorio de almacenamiento del contenido.

  • Crear la plantilla de aprovisionamiento.

  • Importar la plantilla de aprovisionamiento.

  • Aprovisionar con datos en una lista.

Definir el repositorio de almacenamiento del contenido

Para este ejercicio se va a necesitar definir un repositorio donde almacenar los diferentes tipos de géneros de libros. Este tipo de información que se almacena, se les conoce con el nombre de Tablas maestras. El propósito de este tipo de repositorios es el de suministrar información a otros contenidos del portal web.

Este tipo de contenido se caracteriza principalmente por la definición de una característica del contenido principal, aunque a veces puede disponer de una descripción para una mejor comprensión final.

Para este ejercicio, solo se va a necesitar únicamente la definición y por este motivo, de los tipos de repositorios que ofrece SharePoint, se va a utilizar la lista personalizada, por las siguientes características, aunque no se utilicen todas:

  • La versatilidad que ofrece para procesos de alta baja y modificaciones de elementos, como en la visualización del contenido.

  • Posibilidad de indexar el contenido para los buscadores.

  • Frente a las futuras evolución, ofrece una mejor gestión del cambio.

A la hora de definir una lista personalizada, hay que tener en cuenta los siguientes aspectos:

  • Columnas de sitio: Hay que saber las columnas que va a usar en la lista para guardar la información.

  • Tipo de contenido: Toda lista en SharePoint, debe contener al menos un tipo de contenido asociado. En este ejercicio, se va a crear un tipo de contenido nuevo.

  • Ubicación de la lista: Es importante definir la ubicación de la lista dentro de la colección se sitio. En este ejercicio, se va a colocar en la raíz de la colección para poder ser accedido de forma más cómoda desde otros sitios web de la colección de sitios.

  • Definición de la lista: Es muy importante plantear desde el principio una correcta definición de la lista, según las características que se requieran para el propósito establecido, evitando posibles problemas futuros sobre los desarrollos implementados.

Columnas de sitio

En este ejercicio, solo es necesario la definición y se va a aprovechar de la columna Titulo que proporciona la lista personalizada. Por este motivo no se van a crear columnas personalizadas.

Tipo de contenido

En este ejercicio, se va a crear un tipo de contenido nuevo con las siguientes características:

  • En la sección Nombre y descripción se van a define el nombre, descripción y el tipo de contenido padre del que se va a heredar. En este ejercicio, el tipo de contenido nuevo va a heredar las características del tipo de contenido Elemento.

    Aclaración: Existe un error muy extendido entre los desarrolladores en SharePoint, que consiste en que el nombre que se establece al tipo de contenido personalizado es el identificador del tipo de contenido. El identificador de un tipo de contenido se puede obtener de la url del detalle del tipo de contenido, mientras que el nombre se usa para la creación de un nuevo elemento en la lista.

  • En la sección Grupo, se va a definir donde agrupar el tipo de contenido. Se recomienda agrupar los tipos de contenidos personalizados en un grupo nueva para una mejor gestión dentro del portal web, como se demostrará más adelante. En este ejercicio el grupo nuevo se llama Book management.

Ejemplo de cómo obtener el identificador del tipo de contenido

Ejemplo de donde se visualiza el nombre y descripción del tipo de contenido (En vista clásica)

Una vez definido el tipo de contenido, se agregarán columnas de sitio. En este ejercicio, como no ha sido necesario crear columnas personalizadas, no se han agregado más columnas al tipo de contenido.

Definición de la lista

Las características de la lista personalizada, que contendrá los diferentes géneros de libros son las siguientes:

  • Al crear la lista, se recomienda dar un nombre de lista sin espacios ni caracteres especiales. El motivo es que así se generará la lista con una url relativa más amigable a la hora de desarrollar componentes en SharePoint. Mas adelante se puede cambiar el título de la lista a un nombre con los espacios y caracteres especiales.

  • La lista solo contendrá el tipo de contenido personalizado que se ha creado previamente, en este ejercicio el nombre del tipo de contenido es New genre. El tipo de contenido por defecto de la lista será eliminado.

  • En la lista, dejar la opción Permitir la administración de tipos de contenido desactivada, para evitar tener más campos innecesarios al crear o editar elementos en la lista.

    Ejemplo del selector de tipo de contenido innecesario

  • En la lista, dejar la opción Permitir que esta lista aparezca en los resultados de búsqueda desactivada. Ya que por ahora no es necesario que los datos sean indexados por el buscador de SharePoint.

  • En la lista, dejar la opción Los datos adjuntos a los elementos de lista desactivada, para no insertar adjuntos en los elementos de la lista, por ser innecesarios.

    Ejemplo de adjuntar ficheros en el elemento de la lista innecesarios

  • Se ha configurado la vista por defecto de la lista, para devolver los elementos ordenados alfabéticamente por el campo Titulo, para una mejor visualización.

Crear la plantilla de aprovisionamiento

La creación de una plantilla de aprovisionamientos requiere la utilización de la herramienta SharePoint PnP para SharePoint Online. En este ejercicio se va a usar la versión de PowerShell, pero se puede usar la versión de Visual Studio si se prefiere.

La creación de la plantilla para aprovisionar otras colecciones de sitios es muy sencilla a través del comando Get-PnPProvisioningTemplate que ofrece SharePoint PnP. Dependiendo de cómo se implemente el comando y de las dimensiones del portal web, el proceso de la creación de una plantilla puede ser tedioso de manejar, por lo que recomiendo las siguientes pautas a la hora de crear las plantillas:

  • Modular las plantillas: Si el portal web contiene muchas áreas de trabajos, como puede ser la zona de productos, los clientes, las documentaciones internas, el área de Recursos Humanos, etc.… Es mejor disponer de plantillas para cada área de trabajo, mejorado los desarrollos y la gestión del cambio en un futuro.

  • Filtrar el contenido de las plantillas: A la hora de generar las plantillas no es necesario traerse todo, ya que hay mucha información en la plantilla que no se va a usar. Por ello hay que internar crear la plantilla con la información más precisa posible. Puede ser necesario eliminar componentes manualmente, que se sabe que no son necesarios, debido a que no podemos filtrar mejor el contenido de la plantilla.

  • Control de versiones: Siempre viene bien disponer de una versión anterior, para comparar en caso de generar una plantilla nueva con información o configuración no deseada. De esta forma se facilitará aún más el trabajo.

    Aviso: Los cambios de una plantilla, no solo viene por nuestros propios cambios, sino que Microsoft realiza actualizaciones en SharePoint Online para una mejor optimización de los procesos y eso puede afectar a la plantilla de aprovisionamiento.

Ejemplo de cambios en plantilla de aprovisionamiento por actualización de SharePoint Online

La creación de la plantilla de aprovisionamiento de Sharepoint PnP, se realiza a través de un script PowerShell, que contiene los comandos y las configuraciones necesarias para generar la plantilla de forma rápida y personalizada. A continuación, se describe las características del script PnP-GetTemplateBookManagement.ps1:

  • El script tiene dos parámetros obligatorios para su ejecución.

    • SiteUrl: Url de la colección de sitios de donde se extrae la plantilla PnP.

    • UserName: Usuario con el que se va a conectar a la colección de sitios.

  • El script usar el script PnP-Utilities.ps1, que dispone de una serie de utilidades para trabajar con SharePoint PnP.

  • La plantilla de aprovisionamiento se genera con las siguientes características:

    • -Force: Sobrescribe el fichero si ya existe.

    • -ContentTypeGroups "Book management": Filtra los tipos de contenidos por el grupo ‘Book management’.

    • -Handlers ContentTypes, Lists, Fields: De todo lo que puede contener la plantilla, solo me interesa, tipos de contenido, listas y columnas de sitio.

#region Parameters
[CmdletBinding()]
Param(
    [Parameter(Mandatory = $True, Position = 1)]
    [ValidateNotNullOrEmpty()]
    [string]$SiteUrl,
    [Parameter(Mandatory = $True, Position = 2)]
    [ValidateNotNullOrEmpty()]
    [string]$UserName
)
#endregion

$location = Get-Location;
. ".\PnP-Utilities.ps1"

Write-Host "Process begins ..." -ForegroundColor DarkMagenta
$Context = Get-Context $SiteUrl $UserName
if ($Context -ne $null){
    Write-Host;
    Write-Host "Creating PnP Template ..." -ForegroundColor Yellow;

    Get-PnPProvisioningTemplate -Out "$location\Templates\Export\TemplateBookManagement.xml" -Force -ContentTypeGroups "Book management" -Handlers ContentTypes, Lists, Fields

    Write-Host "PnP Template Created" -ForegroundColor Yellow;
    Write-Host;
}
Write-Host "Process finished" -ForegroundColor DarkMagenta

Ejecución del script de PowerShell

Procesado el script de PowerShell, se dispondrá de un fichero XML con las siguientes características:

  • Nodo ContentTypes: Contiene las definiciones de los tipos de contenidos cuyo grupo tiene el valor ‘Book management’.

  • Nodo Lists: Contiene las definiciones de todas las listas que están en la raíz de la colección de sitios. De todas las definiciones de listas exportadas en el proceso, solo se necesita la definición de la lista ‘Genre’, las demás las eliminaremos en el proceso de importación.

    Aviso: Cuando descubra como filtrar las listas en el proceso de exportación, actualizaré la entrada, pero hasta entonces, habrá que eliminar las definiciones manualmente.

En este ejercicio, aun no se han generado el nodo de columnas de sitio, ya que no se han creado aún ninguna, pero más adelante se crearán y se pretende usar el mismo script.

Ejemplo de la plantilla creada con SharePoint PnP

Importar la plantilla de aprovisionamiento

La importación de una plantilla de aprovisionamientos requiere utilización de la herramienta SharePoint PnP para SharePoint Online. En este ejercicio se va a usar la versión de PowerShell, pero se puede usar la versión de Visual Studio si se prefiere.

La importación de la plantilla de aprovisionamiento de Sharepoint PnP, se realiza a través de un script PowerShell, que contiene los comandos y las configuraciones necesarias para importar la plantilla de forma rápida sobre la colección de sitios destinado. A continuación, se describe las características del script PnP-ApplyTemplate.ps1:

  • El script tiene tres parámetros obligatorios para su ejecución.

    • SiteUrl: Url de la colección de sitios de donde se importa la plantilla PnP.

    • UserName: Usuario con el que se va a conectar a la colección de sitios.

    • FileTemplate: Indica el nombre del fichero de la plantilla que se va a implantar.

  • El script usar el script PnP-Utilities.ps1, que dispone de una serie de utilidades para trabajar con SharePoint PnP.

La plantilla que se va a aplicar es la siguientes:

Ejemplo de la plantilla de SharePoint PnP que se va a importar en el entorno de producción

#region Parameters
[CmdletBinding()]
Param(
    [Parameter(Mandatory = $True, Position = 1)]
    [ValidateNotNullOrEmpty()]
    [string]$SiteUrl,
    [Parameter(Mandatory = $True, Position = 2)]
    [ValidateNotNullOrEmpty()]
    [string]$UserName,
    [Parameter(Mandatory = $True, Position = 3)]
    [ValidateNotNullOrEmpty()]
    [string]$FileTemplate
)
#endregion

$location = Get-Location;
. ".\PnP-Utilities.ps1"

Write-Host "Process begins ..." -ForegroundColor DarkMagenta

$Context = Get-Context $SiteUrl $UserName
if ($Context -ne $null){
    Write-Host;
    Write-Host "Applying PnP Template ..." -ForegroundColor Yellow;

    $pathTemplate = -join($location, "\Templates\Import\",$FileTemplate);
    Apply-PnPProvisioningTemplate -Path $pathTemplate

    Write-Host "PnP Template Applied" -ForegroundColor Yellow;
    Write-Host;
}

Write-Host "Process finished" -ForegroundColor DarkMagenta

Ejecución del script de PowerShell

Aprovisionar con datos en una lista

Al usar tablas maestras, muchas veces es necesario tener que cargar los datos una vez creado el repositorio. Este proceso se puede realizar de una forma fácil y sencilla con el servicio de aprovisionamiento que ofrece SharePoint PnP.

Para aprovisionar de datos una lista se puede usar la misma plantilla que se ha usado para aprovisionar el entorno de producción. Solo hay que seguir los siguientes pasos:

  1. Elimina todos los nodos de la plantilla menos el nodo de las listas.

  2. Eliminar todos los nodos internos de cada nodo de definición de la lista.

  3. Agregar el nodo pnp:DataRows, dentro de la definición de la lista, que es el responsable de agregar elementos en la lista a través de SharePoint Pnp, con las siguientes características:

    • La propiedad KeyColumn, determina la columna clave del elemento.

    • La propiedad UpdateBehavior, determina si el elemento ya existente, es actualizado (Overwrite) o lo deja con los valores establecidos previamente (Skip).

    • El nodo pnp:DataRow, determina cada elemento que se quiere cargar.

    • El nodo pnp:DataValue, determina el valor de una columna para ese elemento a cargar.

<pnp:ListInstance Title="Genres" Description="" DocumentTemplate="" TemplateType="100" Url="Lists/Genres" MinorVersionLimit="0" MaxVersionLimit="0" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableAttachments="false" EnableFolderCreation="false" NoCrawl="true" DefaultDisplayFormUrl="{site}/Lists/Genres/DispForm.aspx" DefaultEditFormUrl="{site}/Lists/Genres/EditForm.aspx" DefaultNewFormUrl="{site}/Lists/Genres/NewForm.aspx" ImageUrl="/_layouts/15/images/itgen.png?rev=45" IrmExpire="false" IrmReject="false" IsApplicationList="false" ValidationFormula="" ValidationMessage="">
    <pnp:DataRows KeyColumn="Title" UpdateBehavior="Skip">
        <pnp:DataRow>
            <pnp:DataValue FieldName="Title">Terror</pnp:DataValue>
        </pnp:DataRow>
        <pnp:DataRow>
            <pnp:DataValue FieldName="Title">Romantics</pnp:DataValue>
        </pnp:DataRow>
        <pnp:DataRow>
            <pnp:DataValue FieldName="Title">Adventure</pnp:DataValue>
        </pnp:DataRow>
        <pnp:DataRow>
            <pnp:DataValue FieldName="Title">Futurists</pnp:DataValue>
        </pnp:DataRow>
    </pnp:DataRows>
</pnp:ListInstance>

La carga de los elementos en la lista se puede realizar con el mismo script del apartado Importar la plantilla de aprovisionamiento pero indicando el fichero de aprovisionamiento de datos.

Ejecución del script de PowerShell

Ejemplo de cómo quedaría la lista creada y cargada de datos iniciales

Entradas populares de este blog

Cargar archivos desde PowerApps a bibliotecas de SharePoint

Menús desplegables relacionados en SharePoint Online

Generar contenido para páginas modernas con JSON