我认为一种模式将在2019年及以后使用,它将使用站点设计和PnP模板为SharePoint网站或Microsoft团队创建自定义模板。它’我和许多其他人已经以某种方式涵盖了这个主题,但目前大多数示例(包括 官方Microsoft文档)显示在Azure函数中使用PowerShell–但自从发布Azure Functions V2以来,这现在感觉很奇怪,并且不支持PowerShell。您可能知道,只有“experimental”在v1中,微软是否会解决他们的阻止问题还有待观察’引用(与V2函数绑定和PowerShell语言有关)。所以在这个迷你系列中’逐步介绍了使用C#编写的Azure函数实现的外观:
- Part 1 - Azure 队列, app 注册, Flow, Site Design and Site Script [this article]
- Part 2 - the Azure Function, Key Vault, enabling Managed Service 身分识别, and the PnP template
注意:我要引用的所有文件和代码都可以从此Github存储库中下载: //github.com/chrisobriensp/SiteDesignsAndPnPTemplating
食谱
总体而言,解决方案元素为:
- SharePoint网站设计(和相应的网站脚本)
- 将项目添加到Azure队列的流
- A SharePoint app 注册 which allows the code to authenticate to SharePoint and modify the site
- An Azure Function (queue-triggered) which authenticates to SharePoint (using the app 注册) and applies a PnP template to the site
此序列的简化表示可能是:
实施
阶段1– Azure things and SharePoint app 注册
我们需要先设置一些先决条件– the Azure 功能应用, 队列 and the SharePoint app 注册. I recommend creating these first as you’将需要这些东西的引用以用于后续步骤(例如,您的Flow需要队列的详细信息)。
所以让’s start there..
Creating the 队列 in Azure
- 为此,请导航到Azure门户,然后进入一个合适的存储帐户。如果你不这样做’已经有一个,只需创建一个(它’是一个用于存储Azure存储内容的容器,例如队列,表和BLOB)。
- 到达那里后,进入“Queues”区域并创建一个新区域:
- 此时,还要抓住存储密钥。进入一般存储帐户的区域(而不是我们刚刚创建的特定队列),然后进入“Access keys” area:
您’ll need both the 队列 name and access key later when we come to configure the flow, so keep these details somewhere handy but secure. 您r Flow will need to know them so it 能够 put a message on the 队列 :)
Creating the Azure 功能应用
我赢了’我不会详细介绍这一步骤’ve覆盖了其他地方(例如
创建和调试Azure函数的3种方法) –但从根本上讲,我们希望预先创建功能应用程序以在Azure中保留URL。我们不’在此阶段不必执行任何其他操作。但它’尽早执行此操作是一个好主意,因为在其中一个步骤(例如注册SharePoint应用程序)中指定URL只会发现其他人已经采用了该URL,并且您需要重新做很多操作,这很烦人。配置。
当然,在Azure门户中创建功能应用程序可能是最简单的方法。我倾向于只点击大“Create”按钮并搜索“function app”:
请点击the “Create” button when you’ve found the item.
然后,您将到达可以提供详细信息的地方。重要的是:
- 使用对您有意义的网址’re doing
- 确保你’关于消费计划
- Associate the 功能应用 with a storage account related to this solution
例如:
您’我需要决定你是否’为此材料重新创建一个新的资源组,或者是否适合您已有的资源组。同样,这只是标准的Azure应用服务内容,并且有大量文档和文章可根据需要帮助做出这些决定。
请点击“Create” when you’重新准备。确保功能应用成功创建,并记下您使用的URL–您可以通过列出所需的Azure中的应用程序服务来找回它。
Remember! 您r Function App should use Azure Functions V1 for now!
从2019年初开始,您需要暂时将Function App切换为使用功能运行时的V1(由于SharePoint CSOM和PnP的.NET依赖问题)。您需要先执行此操作,然后应用程序中才会存在任何实际功能。要进行切换,请进入“功能”应用设置,然后找到"Runtime version"设置。更改为"v1"并保存配置。
Creating the SharePoint app 注册
为此,我们使用SharePoint’的AppRegNew.aspx页面以注册我们的应用程序。请记住,这种身份验证方法会产生只能用于SharePoint的令牌(与Graph或Office 365的其他区域相对),但是’在模板SharePoint网站时我们需要的一切–即使恰好是属于Microsoft团队的网站。
- 导航到租户根网站集中的AppRegNew.aspx页面– so //YOUR_TENANT_HERE.sharepoint.com/_layouts/15/appregnew.aspx
- 填写应用程序的详细信息:
- 客户ID和客户机密可以是“Generate” button.
- 标题应该是你的东西’将识别为属于该解决方案,例如“网站设计配置” 要么 similar.
- 应用程序域和重定向URI应该反映您先前为功能应用程序使用的URL–前者具有领域,后者具有“//” 在 the beginning:

- 确保你 see the 确认 message –执行此操作时,请确保以下详细信息的安全:

SharePoint加载项身份验证的替代方法是使用 AAD app 注册 and AAD auth。但是,对于仅应用程序身份验证,此方法会涉及更多,因为它要求您创建和上传证书(可能是自签名的)并选择适当的AAD范围等。如果您的代码仅需要与SharePoint对话(例如,应用网站模板) ),而不是通过Graph与其他Office 365服务进行通信,则SharePoint加载项身份验证更加简单。请理解,如果您还想配置Microsoft Team或采取其他措施,则可能需要使用其他方法。
授予该应用的管理员同意
无论如何,假设我们坚持使用SharePoint应用程序身份验证,那么下一步就是信任该应用程序,以便它可以适当地访问您的租户:
- 去
http:// _[yourtenant]-admin.sharepoint.com/_layouts/appinv.aspx
(notice the -admin
in the URL).
- 在里面 应用程式编号 字段,粘贴 客户编号 复制的内容,然后选择 抬头.
- 在里面 权限请求XML 字段,粘贴以下XML:
<AppPermissionRequests AllowAppOnlyPolicy="true" >
<AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
</AppPermissionRequests>
- 请点击创造:
- 要确认您要信任此应用,请选择 相信它:

We’现在已完成前提条件– so we’为Azure功能的网站设计,流程和代码做好准备。
流
Flow本身非常简单。所有你需要的是:
- HTTP触发器
- A “put a message on a 队列” action
这些步骤是:
- 转到Office 365中的Flow门户,然后在“My Flows" are click New > 创造 from blank:

- 添加一个“收到HTTP请求时”触发。为此,请搜索“http”使用搜索框:

- 找出“收到HTTP请求时”触发并选择它以将其添加到流中:

- 输入以下内容作为请求正文:
- 请点击“New step”, and type “queue”进入搜索框。找到并选择“Azure s列” item:

- 从那里选择“Put a message on a 队列” item:
- 假设你不 ’如果您已经定义了到Azure存储帐户的连接,请单击省略号(…)在流程中的操作上,找到“Add new connection” item:
- 在显示的框中输入存储帐户名称的详细信息并输入密钥(我们’请在一秒钟内选择该存储帐户中的实际队列)。请注意,连接名称可以是任何有意义的名称–但是连接本身是到整个存储帐户的,所以它’最好在名称中包含以下内容:

- 请点击“Create”.
- 现在,“流”操作应让您选择特定的队列,以及要放入的详细信息。 选择 the 队列 you created from the dropdown,对于"Message” value, select “webUrl”通过HTTP请求操作:

- 您 should end up looking something like this:

- 请点击in the Flow name near the top left of the screen, and rename your Flow to something sensible:

- 最后,点击“Save” to save the Flow:

获取流程的URL
您’需要将Flow的URL放入站点脚本中。要获取它,请按照下列步骤操作:
- 返回以编辑您的流程。
- 编辑“收到HTTP请求时”活动,并获取HTTP POST URL’s specified (there’s a ‘copy to clipboard’右边的按钮):

- 将网址存储在安全的地方,以备下一步使用。
网站设计和网站脚本
当你’我会记得,网站设计实际上是“registration”由一个或多个站点脚本(应在站点中提供的内容的JSON定义)组成的一组。因此,如果需要,您可以在许多站点设计中有效地共享站点脚本。这里’一个示例站点脚本,其中:
- 应用名为的主题‘COB purple’ which I’之前在我的租户中定义的– see http://aka.ms/spsitetheming 有关现代SharePoint主题的更多详细信息
- 使用它来呼叫我的流程’s URL – I’编辑了网站脚本,以粘贴到上一步中的“流URL”中
- 设置几个自定义列表(一个带有一个自定义列),并将它们添加到网站导航中
- 在某些列上配置JSON列格式
以便’s a site script. 您’我将需要使用如下所示的某些PowerShell注册网站脚本和网站设计。
第1步–注册站点脚本:
您'll get an output something like this:
Id : be7c02a8-9134-4961-921a-cffc4772e97c
Title : COB project site script
Description :
Content :
Version : 0
复制返回的ID,以备下一步使用。注册网站设计时,我们需要指向一个或多个包含配置步骤的网站脚本-因此,将其粘贴到您需要的下一部分PowerShell中,如下所示:
您'll now get an output something like this:
Id : ef49c695-b5e3-49ef-afba-ef053ca61414
Title : COB project site
WebTemplate : 64
SiteScriptIds : {be7c02a8-9134-4961-921a-cffc4772e97c}
Description : 创造s a COB project site with a theme applied
PreviewImageUrl :
PreviewImageAltText :
IsDefault : False
Version : 1
Success! 您r site design and site script have now been registered, and it's hooked up to the Flow. However, we're not done yet - we still need our C# Azure Function which will actually do the work of applying the PnP template :) We'll do that in the next post..
Part 2 - the Azure Function, Key Vault, enabling Managed Service 身分识别, and the PnP template