Búsqueda de sitios web

Presentamos el nuevo marco de transformación PnP de Microsoft 365


La comunidad Microsoft 365 presenta una vista previa pública de un nuevo proyecto llamado "Marco de transformación Microsoft 365 PnP". El objetivo de este nuevo proyecto es ayudar a los clientes y socios a transformar los portales existentes en portales modernos de Microsoft SharePoint Online.

El proyecto es la evolución de un proyecto ya existente llamado "PnP Modernization Framework", introducido hace un par de años y que apunta a la modernización de páginas individuales desde SharePoint Online y SharePoint local (2010, 2013, 2016, 2019) hacia lo "moderno". Sitios de SharePoint Online. Sin embargo, el nuevo marco de transformación se basa en un modelo genérico que se puede utilizar para transformar cualquier solución basada en web/contenido en un portal moderno de SharePoint Online.

De hecho, el nuevo marco está construido con una arquitectura abierta y abstracta, que admite técnicas de desarrollo modernas como la inyección de dependencia y el desarrollo asincrónico. Internamente, el nuevo marco está construido sobre PnP Core SDK, lo que significa que está dirigido a .NET Standard 2.0 y .NET 5.0, y puede usarlo en cualquier plataforma (Windows, Linux, macOS) y en cualquier servicio basado en la nube. . Por ejemplo, será realmente fácil crear una función de Azure para transformar “sobre la marcha” una página de contenido en una página moderna de SharePoint Online:

Como puede ver en la Figura 1, el marco se basa en algunos pilares. Primero, está el concepto de fuente de datos, que es "algo" que puedes usar para leer contenido que deseas transformar en páginas modernas. Las fuentes de datos son conectables y se basan en bibliotecas externas que cualquier miembro de la comunidad puede crear.

Luego, existe un "motor de transformación", que es el motor real que se encarga de transformar el contenido recuperado de cualquier fuente de datos externa. En un nivel alto, Transformation Engine se basa en un conjunto de asignadores conectables, que se pueden configurar y personalizar fácilmente mediante la inyección de dependencia en .NET Core/.NET 5.0. Por último, pero no menos importante, una página transformada se guardará en un sitio moderno de SharePoint Online, que es el único resultado admitido por el marco.

Inicialmente, el marco admite SharePoint Online y SharePoint local (2013, 2016 y 2019) como fuentes de datos disponibles. Sin embargo, en el futuro, esperamos ver muchas más fuentes de datos publicadas por socios o proyectos comunitarios. Por ejemplo, podría haber una fuente de datos para WordPress o cualquier otro sistema de gestión de contenidos disponible en el mercado.

Desde un punto de vista funcional, puede simplemente transformar una sola página con un modelo en proceso, o puede transformar sitios o lotes de páginas con una arquitectura distribuida alojada, por ejemplo, en Microsoft Azure. PnP Transformation Framework proporciona de forma nativa todos los componentes arquitectónicos y puntos finales de personalización para permitir que un desarrollador cree una arquitectura distribuida.

Por ejemplo, existen componentes útiles para desacoplar y escalar el procesamiento de transformaciones mediante una función de back-end de Azure y una cola de Azure Blob Storage para procesar las transformaciones de forma asincrónica. Podrá utilizar el marco como referencia en su propia solución personalizada, o simplemente lo utilizará a través de PnP PowerShell para activar la transformación de páginas individuales a través de un script de PowerShell. Independientemente de cuál sea su objetivo, el nuevo PnP Transformation Framework le proporciona las herramientas adecuadas para trabajar.

En la Figura 2 puede ver la arquitectura de alto nivel del Transformation Engine:

Como puede ver, existe un componente Ejecutor de Transformación que gestiona un Proceso de Transformación. El proceso de transformación está compuesto por tareas de transformación, que se pueden ejecutar en vivo y en proceso, o que se pueden transferir a un sistema back-end a través de un administrador de estado de transformación, como una cola de Azure Blob Storage o una cola de Azure Service Bus, solo para Haga algunos ejemplos.

Las Tareas de Transformación son generadas por un Transformation Distiller, que no es más que un objeto que analiza la Fuente de Datos y define una lista de páginas a transformar. En Transformation Executor, que de forma predeterminada se ejecuta en el proceso pero también puede estar en un sistema back-end, ocurre la transformación real, basándose en un conjunto de proveedores de mapeo.

Desde el punto de vista de un desarrollador, puede utilizar fácilmente el marco simplemente conectando a sus proyectos uno o más de los siguientes paquetes NuGet:

  • PnP.Core.Transformation: para simplemente obtener una referencia al motor de transformación y a los tipos e interfaces abstractos. Puede usarlo siempre que desee crear una fuente de datos personalizada y necesite implementar todas las clases e interfaces abstractas en su propia biblioteca personalizada.
  • PnP.Core.Transformation.SharePoint: para hacer referencia al motor de transformación que tiene como destino SharePoint Online y/o SharePoint local como orígenes de datos admitidos.

Para utilizar el nuevo marco de transformación PnP, simplemente necesita configurar un proyecto .NET para admitir la inyección de dependencia y luego podrá configurar fácilmente los servicios que necesita. En el siguiente extracto de código, puede ver cómo desencadenar la transformación de una sola página en una aplicación de consola .NET creada con .NET Core 3.1 y configurada para usar la inyección de dependencia a través de Microsoft.Extensions.Hosting. Paquete NuGet, con autenticación interactiva:

var host = Host.CreateDefaultBuilder()
// Configure services with Dependency Injection
.ConfigureServices((hostingContext, services) =>
{
    // Add the PnP Core SDK library services
    services.AddPnPCore();

    // Add the PnP Core SDK library services configuration from the appsettings.json file
    services.Configure<PnPCoreOptions>(hostingContext
        .Configuration.GetSection("PnPCore"));

    // Add the PnP Core SDK Authentication Providers
    services.AddPnPCoreAuthentication();

    // Add the PnP Core SDK Authentication Providers 
    // configuration from the appsettings.json file
    services.Configure<PnPCoreAuthenticationOptions>(hostingContext
        .Configuration.GetSection("PnPCore"));

    // Add the PnP Transformation Framework services with some custom settings
    services.AddPnPSharePointTransformation(
        pnpOptions => 
        {
            pnpOptions.PersistenceProviderConnectionString = @"c:\temp"
        },
        pageOptions =>
        {
            pageOptions.CopyPageMetadata = true;
            pageOptions.KeepPageSpecificPermissions = true;
            spOptions.TargetPagePrefix = "Migrated_";
        }
        spOptions =>
        {
            spOptions.RemoveEmptySectionsAndColumns = true;
            spOptions.ShouldMapUsers = true;
        }
    );
})

// Let the builder know we're running in a console
.UseConsoleLifetime()
// Add services to the container
.Build();


// Start console host
await host.StartAsync();

// Optionally create a DI scope
using (var scope = host.Services.CreateScope())
{
    // Create a PnP Core SDK Context Factory
    var pnpContextFactory = scope.ServiceProvider
        .GetRequiredService<IPnPContextFactory>();

    // Create a CSOM ClientContext using whatever technique you like, to read the source
    ClientContext sourceContext = ...; // Up to you how to create the ClientContext

    // Create a PnPContext of PnP Core SDK to write the target
    var targetContext = await pnpContextFactory.CreateAsync(TestCommon.TargetTestSite);

    // Define the URI of the source page
    var sourceUri = new
        Uri("https://<tenant>.sharepoint.com/sites/Classic/SitePages/sourcePage.aspx");

    // Transform the page
    var result = await pageTransformator.TransformSharePointAsync(
        sourceContext, targetContext, sourceUri);

}

// Cleanup console host
host.Dispose();

Como puede ver, hay algunas tuberías para configurar el contexto de inyección de dependencia y para crear los contextos de origen y destino, pero al final la transformación en sí es solo una llamada al método: TransformSharePointPageAsync.

Al definir y configurar los servicios para la inyección de dependencias, siempre puede registrar sus propias personalizaciones de los mapeadores y servicios para conectar su propia lógica personalizada. Por ejemplo, si desea proporcionar una lógica de asignación de usuarios personalizada, simplemente puede anular el comportamiento predeterminado configurando su propio servicio.

De forma predeterminada, el método AddPnPSharePointTransformation de PnP.Core.Transformation.SharePoint configura un conjunto de servicios de mapeo predefinidos con funcionalidades básicas.

Otra opción que tiene, si desea utilizar el nuevo marco de transformación PnP a través de PowerShell, es confiar en el nuevo cmdlet Invoke-PnPTransformation, que está disponible en versión preliminar en la biblioteca PnP PowerShell. Aquí puede ver un extracto de muestra del código de PowerShell que invoca el nuevo cmdlet:

# Connect to the target site
$targetConnection = Connect-PnPOnline https://<tenant>.sharepoint.com/sites/Modern -ReturnConnection

# Connect to the source site
Connect-PnPOnline https://<tenant>.sharepoint.com/sites/Classic 

# Trigger transformation
Invoke-PnPTransformation -Identity sourcePage.aspx -TargetConnection $targetConnection

Además de conectarse a los sitios de destino y de origen, simplemente necesita invocar el cmdlet que proporciona el nombre de la página a transformar. Por supuesto, puede proporcionar muchas opciones para personalizar la transformación, pero la sintaxis muy básica es simple, como se ve en el ejemplo anterior.

Internamente, el motor de transformación se basa en un conjunto de mapeadores personalizables. Aquí está la lista:

  • Proveedor de asignación de metadatos: maneja los metadatos de la página y convierte los metadatos del contenido de origen en valores de campo en el elemento de la página de SharePoint Online de destino.
  • Proveedor de mapeo de diseño de página: administra la definición del diseño de página y se usa solo cuando se transforma desde páginas de publicación de SharePoint.
  • Proveedor de mapeo de taxonomías: se encarga de transformar las taxonomías en valores admitidos por el Servicio de metadatos administrados del entorno de SharePoint Online de destino.
  • Proveedor de mapeo de URL: convierte las URL a las que se hace referencia dentro del documento de origen en URL reales en el entorno de destino.
  • Proveedor de asignación de usuarios: asigna usuarios en la plataforma de origen a usuarios de Microsoft 365 en el entorno de SharePoint Online de destino.
  • Proveedor de mapeo de elementos web: este es el núcleo del motor de transformación y convierte widgets de contenido, componentes o elementos web de la fuente de datos en elementos web del lado del cliente del SharePoint Online moderno.

Cuando ejecuta una transformación, el motor pasa por algunos de los asignadores anteriores para crear una definición abstracta de la página de contenido y luego se basa en un generador de páginas para crear la página moderna real en SharePoint Online. Como tal, la fuente de datos puede ser cualquier plataforma, siempre que los mapeadores especializados puedan generar la definición abstracta del contenido que necesita el generador de páginas.

El plan actual es lanzar la versión GA de la biblioteca para finales de 2021. Ahora mismo, puedes jugar con la vista previa pública. Échale un ojo, juega con él, pruébalo y cuéntanos qué te parece este nuevo proyecto. Por último, pero no menos importante, recuerda que todos los proyectos y bibliotecas descritos en este artículo son de código abierto.

Como tal, puedes contribuir de muchas maneras diferentes. Por ejemplo, puede simplemente proporcionar comentarios utilizando la lista de problemas de los repositorios correspondientes. Pero también puedes enviar propuestas de cambios de código, creando Pull Requests en GitHub.

Además, puedes contribuir activamente a la vida comunitaria asistiendo a las llamadas comunitarias semanales. Si no sabe cómo empezar, abra su navegador, navegue hasta http://aka.ms/m365pnp y busque la iniciativa "Compartir es cuidar". ¡Allí encontrará otros miembros de la comunidad dispuestos a ayudarlo a comenzar su viaje en la increíble comunidad de Microsoft 365! ¡Nos vemos allí entonces!

Artículos relacionados