PnP 预配引擎和核心库
PnP 预配引擎是预配框架的核心,基于 OfficeDevPnP.Core 库。 预配引擎属于核心库的一部分,利用核心库扩展来实现预配任务。
核心库包含 SharePoint CSOM/REST 对象模型上的扩展方法,可以启用预配任务,例如枚举和获取预配模板,以及存储模板并将模板应用到新网站和现有网站。 使用它,还可以自动执行预配任务,并将编码的逻辑引入预配例程。
注意
若要观看有关创建、暂留和应用预配模板的视频演练,请转到 PnP 预配引擎入门。
PnP 预配引擎
PnP 预配引擎是核心库中用于执行和自动化远程预配任务的类的结构化实现。 在具有 SharePoint 外接程序模型的新 Microsoft 环境中,适用于 SharePoint Online、SharePoint 和 Office 365 的预配解决方案现在使用客户端对象模型 (CSOM) 和预配框架来预配网站项目。
PnP 预配引擎允许对站点列、内容类型、列表定义、组合外观和页面的设计进行建模。 你可以通过指向现有网站设计功能,或通过手工制作设计,或者结合使用两种方法来设计这些功能及更多功能。 然后,你可以选择将该设计作为预配模板保存并重复使用。
可以使用下列两种方法之一,将网站设计作为预配模板提取。 使用 Windows PowerShell 脚本 (PnP.PowerShell),或使用实施核心库 (OfficeDevPnP.Core) 提供的扩展方法的 CSOM/REST 代码。
使用 Windows PowerShell 脚本提取预配模板
若要结合使用 Windows PowerShell 脚本与预配引擎,必须先下载并安装 PnP PowerShell cmdlet。 GitHub 上的 PnP PowerShell 命令存储库包含运行 Windows PowerShell 所需的一切,包括下载和安装说明以及 Windows PowerShell 命令文档。
注意
PnP PowerShell 命令存储库包含四个版本:一个用于 SharePoint 2013,一个用于 SharePoint 2016,一个用于 SharePoint 2019,一个用于 SharePoint Online。
注意
PnP PowerShell 是一种开放源代码解决方案,其中包含为其提供支持的活动社区。 没有用于 Microsoft 开放源代码工具支持的 SLA。
安装 cmdlet 的推荐方法是使用 PowerShell 库:
Install-Module -Name PnP.PowerShell
如果你想要安装本地 SharePoint 版本,请将名称中的“online”替换为相应版本的 SharePoint。
以下是最新版本的链接:
使用 CSOM 代码提取预配模板
若要使用 CSOM/REST 代码来提取设置模板,您只需使用 Visual Studio 或其他开发环境来创建开发项目。 例如,创建控制台、Windows 应用程序或 SharePoint 外接程序等任何类型的项目。 创建开发项目后,必须安装核心库(可用作 NuGet 程序包)。
注意
预配控制台应用示例介绍了如何查找和安装核心库 NuGet 包,并提供了有关远程预配示例控制台应用的演练。 请注意,核心库有两个版本:一个版本面向 SharePoint Online,另一个版本面向本地 SharePoint。
若要详细了解如何使用 CSOM,请参阅预配控制台应用示例;而一般概述如下:
创建与 SharePoint Online 的连接。
创建 ClientContext 实例并检索对 Web 对象的引用。
使用核心库扩展方法 GetProvisioningTemplate 提取 ProvisioningTemplate 对象。
使用模板提供程序和序列化格式化程序将预配模板实例保存到选定的文件位置。
注意
由于可以自定义模板提供程序和序列化格式化程序对象,因此能够实现所需的任何暂留存储和序列化格式。 现有的 PnP 预配引擎为文件系统、SharePoint 和 Azure Blob 存储模板提供程序提供支持。 它还支持 XML 和 JSON 序列化格式化程序。
若要详细了解 XML 序列化输出示例和 XML 序列化架构,请参阅 PnP 预配架构一文。 还可以在 GitHub (SharePoint/PnP-Provisioning-Schema) 上获取架构及其文档。 Channel 9 视频深入探究 PnP 预配引擎架构介绍并讨论了该架构。
但务必请注意,预配引擎支持独立于序列化格式的域模型。 实际上,预配引擎与任何序列化格式完全分离。 应由你手动定义 ProvisioningTemplate 实例。
指向模型站点或撰写根据 PnP 预配架构进行验证的 XML 文档,或编写 .NET 代码并构造对象的层次结构。 你甚至可以混合使用这些方法。 你可以使用模型站点设计预配模板,然后将其保存到 XML 文件并进行一些内存自定义,同时处理代码中的 ProvisioningTemplate 实例。
使用 GetProvisioningTemplate 提取模板的示例代码
预配控制台应用程序示例阐释了如何使用 GetProvisioningTemplate 方法。 在示例中,导出预配模板的过程发生在以下代码块中。
ProvisioningTemplateCreationInformation ptci = new ProvisioningTemplateCreationInformation(ctx.Web);
// Create FileSystemConnector, so that we can store composed files somewhere temporarily
ptci.FileConnector = new FileSystemConnector(@"c:\temp\pnpprovisioningdemo", "");
ptci.PersistComposedLookFiles = true;
ptci.ProgressDelegate = delegate (String message, Int32 progress, Int32 total)
{
// Use this to simply output progress to the console application UI
Console.WriteLine("{0:00}/{1:00} - {2}", progress, total, message);
};
// Execute actual extraction of the tepmplate
ProvisioningTemplate template = ctx.Web.GetProvisioningTemplate(ptci);
应用预配模板
如果通过核心库的扩展方法应用预配模板,则有一个类似示例中的代码块。 在示例中,将通过使用 Web 类型的 ApplyProvisioningTemplate 扩展方法将模板应用到目标站点。
using (var context = new ClientContext(destinationUrl))
{
context.Credentials = new SharePointOnlineCredentials(userName, password);
Web web = context.Web;
context.Load(web, w => w.Title);
context.ExecuteQueryRetry();
// Configure the XML file system provider
XMLTemplateProvider provider =
new XMLFileSystemTemplateProvider(
String.Format(@"{0}\..\..\",
AppDomain.CurrentDomain.BaseDirectory),
"");
// Load the template from the XML stored copy
ProvisioningTemplate template = provider.GetTemplate(
"<template name>.xml");
// Apply the template to another site
Console.WriteLine("Start: {0:hh.mm.ss}", DateTime.Now);
// We can also use Apply-PnPProvisioningTemplate
web.ApplyProvisioningTemplate(template);
Console.WriteLine("End: {0:hh.mm.ss}", DateTime.Now);
}
PnP 核心库
核心库 (OfficeDevPnP.Core) 是一个 CSOM/REST 对象模型,它支持 PnP 设置框架并启用 PnP 设置引擎。 它包含多个命名空间,其中包括一组 扩展方法。 这些方法将扩展 SharePoint 对象模型,以支持远程设置,并支持用于处理实体、计时器作业、设置模板的对象以及整个设置框架。 表 1 列出了核心库中的命名空间。
表 1. OfficeDevPnP.Core 库中的命名空间
命名空间 | 说明 |
---|---|
OfficeDevPnP.Core | |
OfficeDevPnP.Core.AppModelExtensions | 使用其他方法扩展现有类型的 .NET 类。 |
OfficeDevPnP.Core.Entities | 用于提供和从 AppModelExtensions 中的扩展方法检索更加复杂的对象的类。 |
OfficeDevPnP.Core.Enums | 一组支持设置操作的枚举。 |
OfficeDevPnP.Core.Extensions | 不与 SharePoint 关联的扩展方法,如帮助执行字符串操作的方法。 |
OfficeDevPnP.Core.Framework.ObjectHandlers.TokenDefinitions | 用于替换模板对象中特定于网站的内容的标记。 |
OfficeDevPnP.Core.Framework.Provisioning.Connectors | 用于连接存储了模板和资产的不同数据源的连接器。 |
OfficeDevPnP.Core.Framework.Provisioning.Extensibility | 扩展性提供程序代码。 扩展性提供程序可用于添加引擎本身不支持的功能。 |
OfficeDevPnP.Core.Framework.Provisioning.Model | 模板数据模型对象。 可对模板执行提取操作或将其反序列化为实际 C# 代码。 此命名空间包含用于此结构的类。 |
OfficeDevPnP.Core.Framework.Provisioning.ObjectHandlers | 支持模板提取和创建的不同 SharePoint 元素的处理程序。 |
OfficeDevPnP.Core.Framework.Provisioning.Providers | 基本模板提供程序的命名空间。 模板提供程序用于将基于代码的模型序列化或反序列化为特定的格式。 |
OfficeDevPnP.Core.Framework.Provisioning.Providers.Json | 用于将基于代码的模板序列化为 JSON 格式或从 JSON 格式进行反序列化的 JSON 模板提供程序。 |
OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml | 用于将基于代码的模板序列化为 XML 格式或从 XML 格式进行反序列化的 XML 模板提供程序。 |
OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.V201503 | v201503 版本的架构自动生成的架构文件。 |
OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.V201505 | v201505 版本的架构自动生成的架构文件。 |
OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.V201508 | v201508 版本的架构自动生成的架构文件。 |