当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 推出新的 Microsoft 365 PnP 转换框架

作者:精品下载站 日期:2024-12-14 04:04:06 浏览:15 分类:玩电脑

推出新的 Microsoft 365 PnP 转换框架


Microsoft 365 社区正在推出一个名为“Microsoft 365 PnP 转换框架”的新项目的公共预览版。这个新项目的目标是帮助客户和合作伙伴将现有门户转变为 Microsoft SharePoint Online 现代门户。

该项目是几年前推出的一个名为“PnP 现代化框架”的现有项目的演变,该项目的目标是将 SharePoint Online 和 SharePoint 本地(2010、2013、2016、2019)的单页面现代化为“现代” SharePoint Online 网站。但是,新的转换框架基于通用模型,可用于将任何基于 Web/基于内容的解决方案转换为现代 SharePoint Online 门户。

事实上,新框架是采用开放和抽象的架构构建的,支持依赖注入和异步开发等现代开发技术。在内部,新框架构建在 PnP Core SDK 之上,这意味着它面向 .NET Standard 2.0 和 .NET 5.0,您可以在任何平台(Windows、Linux、macOS)和任何基于云的服务中使用它。例如,创建一个 Azure 函数来将“动态”内容页面转换为 SharePoint Online 的现代页面将非常容易:

[玩转系统] 推出新的 Microsoft 365 PnP 转换框架

如图 1 所示,该框架基于一些支柱。首先,有数据源的概念,它是您可以用来读取要转换为现代页面的内容的“东西”。数据源是可插入的,并且基于社区中任何人都可以创建的外部库。

然后,有一个“转换引擎”,它是负责转换从任何外部数据源检索的内容的实际引擎。在较高级别上,转换引擎依赖于一组可插入映射器,可以使用 .NET Core/.NET 5.0 中的依赖项注入轻松配置和自定义这些映射器。最后但并非最不重要的一点是,转换后的页面将保存到 SharePoint Online 的现代网站中,这是该框架支持的唯一且独特的输出。

最初,该框架支持 SharePoint Online 和 SharePoint 本地(2013、2016 和 2019)作为可用数据源。然而,在未来,我们预计会看到合作伙伴或社区项目发布更多的数据源。例如,可能有 WordPress 的数据源,或市场上可用的任何其他内容管理系统。

从功能角度来看,您可以使用进程内模型简单地转换单个页面,也可以使用托管在 Microsoft Azure 上的分布式架构来转换站点或批量页面。 PnP 转换框架本身提供了所有架构组件和自定义端点,以允许开发人员创建分布式架构。

例如,有一些组件可用于使用后端 Azure Function 和 Azure Blob 存储队列异步处理转换来解耦和扩展转换处理。您将能够使用该框架作为您自己的自定义解决方案中的参考,或者您只需通过 PnP PowerShell 使用它来通过 PowerShell 脚本触发单个页面的转换。无论您的目标是什么,新的 PnP 转换框架都为您提供了合适的工具。

在图 2 中,您可以看到转换引擎的高级架构:

[玩转系统] 推出新的 Microsoft 365 PnP 转换框架

正如您所看到的,有一个转换执行器组件来管理转换过程。转换过程由转换任务组成,可以实时在进程中执行,也可以通过转换状态管理器(例如 Azure Blob 存储队列或 Azure 服务总线队列)传输到后端系统,只是为了举几个例子。

转换任务由转换蒸馏器生成,它只不过是一个分析数据源并定义要转换的页面列表的对象。默认情况下,转换执行器在进程内运行,但也可以在后端系统中运行,在转换执行器中,依赖于一组映射提供程序进行实际转换。

从开发人员的角度来看,您只需将以下一个或多个 NuGet 包插入项目即可轻松使用该框架:

  • PnP.Core.Transformation:简单地获取对转换引擎以及抽象类型和接口的引用。每当您想要创建自定义数据源并且需要在您自己的自定义库中实现所有抽象类和接口时,您都可以使用它。
  • PnP.Core.Transformation.SharePoint:引用将 SharePoint Online 和/或 SharePoint 本地部署作为受支持数据源的转换引擎。

要使用新的 PnP 转换框架,您只需配置 .NET 项目以支持依赖项注入,然后就可以轻松设置所需的服务。在以下代码摘录中,您可以了解如何在使用 .NET Core 3.1 创建并配置为通过 Microsoft.Extensions.Hosting 使用依赖项注入的 .NET 控制台应用程序中触发单个页面的转换NuGet 包,具有交互式身份验证:

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();

正如您所看到的,有一些管道来配置依赖项注入上下文以及创建源和目标上下文,但最终转换本身只是一个方法调用:TransformSharePointPageAsync。

在定义和配置依赖注入的服务时,您始终可以注册您自己的映射器和服务的自定义,以便插入您自己的自定义逻辑。例如,如果您想提供自定义用户映射逻辑,您可以简单地覆盖配置您自己的服务的默认行为。

默认情况下,PnP.Core.Transformation.SharePoint 的 AddPnPSharePointTransformation 方法配置一组具有基本功能的预定义映射服务。

如果您想通过 PowerShell 使用新的 PnP 转换框架,您的另一个选择是依赖新的 Invoke-PnPTransformation cmdlet,该 cmdlet 可在 PnP PowerShell 库中预览。您可以在此处查看调用新 cmdlet 的 PowerShell 代码的示例摘录:

# 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

除了连接到目标站点和源站点之外,您只需调用提供要转换的页面名称的 cmdlet。当然,您可以提供大量选项来自定义转换,但非常基本的语法很简单,就像您在上面的示例中看到的那样。

在内部,转换引擎依赖于一组可定制的映射器。这是列表:

  • 元数据映射提供程序:处理页面元数据并将源内容的元数据转换为目标 SharePoint Online 页面项目中的字段值。
  • 页面布局映射提供程序:管理页面布局的定义,仅在从 SharePoint 发布页面转换时使用。
  • 分类映射提供程序:负责将分类转换为目标 SharePoint Online 环境的托管元数据服务支持的值。
  • Url Mapping Provider:将源文档中引用的 URL 转换为目标环境中的实际 URL。
  • 用户映射提供程序:将源平台中的用户映射到目标 SharePoint Online 环境中的 Microsoft 365 用户。
  • Web 部件映射提供程序:这是转换引擎的核心,它将数据源的内容小部件、组件或 Web 部件转换为现代 SharePoint Online 的客户端 Web 部件。

当您执行转换时,引擎将通过上述一些映射器来创建内容页面的抽象定义,然后依赖页面生成器在 SharePoint Online 中创建实际的新式页面。因此,数据源可以是任何平台,只要专门的映射器能够生成页面生成器所需内容的抽象定义即可。

目前的计划是在 2021 年底之前发布该库的 GA 版本。现在,您可以使用公共预览版。仔细观察、试用、测试它,然后让我们知道您对这个新项目的看法。最后但并非最不重要的一点是,请记住本文中描述的所有项目和库都是开源的。

因此,您可以通过多种不同的方式做出贡献。例如,您可以简单地使用相应存储库的问题列表来提供反馈。但您也可以提交代码更改提案,在 GitHub 上创建拉取请求。

此外,您可以通过参加每周的社区电话会议积极为社区生活做出贡献。如果您不知道如何开始,请打开浏览器,导航至 http://aka.ms/m365pnp 并查找“共享即关怀”倡议。在那里,您会发现其他社区成员愿意帮助您在令人惊叹的 Microsoft 365 社区中开始您的旅程!那么到时见!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯