2017年9月11日,星期一

管理跨SharePoint网站的租户范围的SPFx扩展

正如我在 使用SPFx应用程序自定义程序将JavaScript(例如标头)添加到网站中的每个页面,’现在可以*在全球范围内*部署SPFx扩展名(例如页面页眉,页脚或其他随机的JavaScript片段),或在*许多* SharePoint网站上进行受控部署-无需将应用程序安装到每个单独的网站。这是个好消息,到目前为止,这对于现代网页来说还是一个空白。 SPFx 网页部分 在SPFx中,部署在租户范围的部署将出现在选择器中的所有位置 扩展名 您仍然需要在本地做一些事情,’s “associate”您的扩展程序包含网站/网站/列表/字段。对于应用程序定制程序,它’此步骤可让您精确控制使用扩展程序的站点。为此,您需要在网站或网站上添加CustomAction,并在ClientSideComponentId属性(SPFx的新增功能)中指定扩展的GUID。虽然我’在本文中,我们将重点放在网站级别的自定义(应用程序自定义程序)上,’类似的故事 SPFx字段定制器 也(在字段上指定了ClientSideComponentId)并且 SPFx命令集定制器 (在列表上指定了带有ClientSideComponentId的CustomAction)。所有这些可以通过以下两种方式完成:

  • 使用CSOM或REST–也许用PowerShell或C#代码
  • 作为PnP XML的一部分,如果您要将自定义模板应用于网站–XML模式和PnP Core设置库现在支持此功能(自2017年9月版起)

在这篇文章中,我’将提供一些PowerShell和C#代码,以帮助您在站点中应用应用程序定制程序–您可以为其他类型的定制器进行修改而不会带来太多麻烦。但是,在所有情况下都有一些先决条件-在某些方面,关联步骤是您要做的最后一件事。因此,让我们快速介绍一下:

租户范围的SPFx扩展-概述/先决条件

从SPFx v1.2起可以使用SPFx扩展和Webpart。大致来说,使用本文中的脚本/代码所需的先决条件是:-

  • 您指定了 "skipFeatureDeployment": true 在里面 package-solution.json 文件
  • 打包该应用程序,然后将其安装到应用程序目录中,管理员选中了“使该解决方案可用于组织中的所有站点”框(如下图所示)。
  • SPFx应用程序的JavaScript软件包已部署到CDN或其他Web托管位置

这是管理员在安装到App Catalog时将看到的内容,以及在安装时出现的复选框(他们需要检查) "skipFeatureDeployment": true:

SNAGHTMLf7281c2

PnP XML选项

在本文中,我将重点介绍C#/ PowerShell选项,但是’一个PnP XML选项,它也非常有用。这使您可以将关联作为自定义网站模板的一部分包括在内,因此对于从此类模板新创建的任何网站都非常有用。实际上,您也可以使用它来应用‘partial’模板添加到现有站点,但是我认为大多数人可能会选择PowerShell或C#代码。我想在这里传达的主要信息是可以从 版本2.18.1709 从...开始 即插即用核心 (2017年9月版)。 2017-05模式有地方指定 ClientSideComponentId 属性在CustomAction和字段上,因为’关联由什么组成。在Web级别提供应用程序定制程序的XML摘录为:

在下一节中,我’首先介绍PowerShell,然后介绍C#。

使用PowerShell代码和PnP PowerShell

以下是一些PowerShell函数,可通过在根网站级别添加自定义操作来在整个站点中添加,删除和列出SPFx全局扩展–调整是否需要其他东西。我在这里使用一个简单的站点URL数组,但是您可以随意填充该数组。其他说明:

  • 我正在使用 PnP PowerShell cmdlet 在这里-如果您还没有安装它们,则需要安装它们,然后通过 连接即插即用 等等
  • 在撰写本文时,我对它们提供的PnP cmdlet有一个问题(Add-PnPCustomAction),所以我在'add'方法中使用了直接CSOM。 我提出了GitHub问题 关于此问题(也在下面脚本的注释中指出),我敢肯定,这些人很快就会解决(或告诉我我做错了;),但是直接CSOM方法也可以工作)
输出:

在以下位置注册全球部署的扩展 addSpfxExtensionCustomAction(ctx) 会给:

SNAGHTMLf6529dd

在网站上列出扩展程序:

Get-PnPCustomAction -Web $ ctx.Web |哪里对象{$ _。Location -eq"ClientSideExtension.ApplicationCustomizer" }

会给:

SNAGHTMLf67a240

删除扩展

Remove-CustomActionForSPFxExt $ spfxExtName $ site $ ctx

会给:

SNAGHTMLf69e124

使用C#代码和PnP内核

但是,也许您想使用C#代码而不是PowerShell。一些注意事项:-

  • 我在这里使用PnP Core库-您需要将NuGet软件包安装到解决方案/ Azure Function /如果没有的话,无论如何。从这里得到 //www.nuget.org/packages/SharePointPnPCoreOnline
  • 与上面的PowerShell相比,我在这里只处理一个站点,但是将代码扩展为可以在所需的任何站点上运行将是微不足道的

样例代码:

输出:

当你’d期望,在以下位置注册全球部署的扩展程序 addSpfxExtensionCustomAction(ctx) 会给:

SNAGHTMLf59848b

在网站上列出扩展 getCustomActions(ctx) 会给:

SNAGHTMLf55b850

删除扩展 removeSpfxExtensionCustomAction() 会给:

SNAGHTMLf5790d9

另外的选择– CLI scripts

另一种选择是,请注意我尊敬的同事 瓦尔达曼·德什潘德 它还具有超酷的CLI工具,可帮助您管理SPFx扩展。他’如此时髦;)他的脚本也提供了管理SPFx命令集定制器的功能。看到 //github.com/vman/spfx-extensions-cli 更多细节。

概要

对于租户范围内的SPFx应用程序定制程序,您需要确保应使用该站点的网站或Web站点具有带有扩展程序的ClientSideComponentId的CustomAction(除了处理其他先决步骤,即获取应用程序包和相应的JavaScript捆绑包) 。尽管此代码未解决,但它’对于SPFx字段自定义程序和命令集自定义程序也采用类似的方法。希望本文介绍的选项(以及潜在的PnP令人敬畏)是有用的。

没意见: