2019年十一月26日星期二

我在ESPC19上的会议

2019年版 欧洲SharePoint,Office 365和Azure Conference将于下周在布拉格举行,我期待在那里进行演讲。与往常一样,该活动很可能是世界这一端Microsoft云空间中最重要的活动,Microsoft将会有很多代表,从Jeff Teper,Dan Holme,Scott Hanselman,Alex Simons,Vesa Juvonen和其他。此外,其他Microsoft负责人和项目经理还将在Project Cortex,Microsoft Graph,内容服务,团队,Yammer和 许多 more - 的微软在ESPC19 页面上有许多著名的演讲嘉宾,他们正从雷德蒙德出发!预计将有2500多人参加,会议应该是Microsoft云空间中许多专家,合作伙伴和供应商的会议和网络的很好的结合。

我的会议

我将发表以下两个演讲:

将Azure Dev Ops用于开发或支持团队(12月5日,星期四,14:00)

在许多组织中,仍在SharePoint列表,Excel,Planner或Microsoft Project中管理技术团队的工作量。但是,Azure Dev Ops董事会为许多小组提供了一种更好,更直观的方式– and it isn’仅适用于敏捷项目的高科技开发团队。存在各种类型的积压和委员会–其中包括看板委员会(Kanban board)以适合处理常规请求流程的团队(例如支持或服务台团队)和Scrum委员会以支持敏捷开发项目(例如使用sprint和sprint计划) process). There’适用于大多数类型的团队和工作。

本次会议将从显示不同类型的董事会和积压工作开始,然后继续进行定制以真正适合您团队的工作方式。在几个演示过程中,我们’将介绍各种提示和技巧,并考虑如何将自动构建(使用DevOps Pipelines)与工作项目跟踪结合起来,将事情提升到一个新的水平。


掌握的顶尖Office 365开发技术-命中列表(12月03日,星期二,11:45)

在Office 365开发中,事情发展很快,并且随着Microsoft平台和API的发展,新技术和方法始终可用。作为一个才华横溢的开发团队的负责人,Chris定期更新他认为对拥有良好能力来构建Office 365解决方案至关重要的技术清单。在SPFx,Graph,团队开发,Azure Functions中的编码以及PowerApps和Flow中的构建解决方案之间,让’在每位经验丰富的编码人员中了解2019年底的高价值方案’的工具箱,每个工具箱都有一个演示和双色球推荐一注示例。本次会议将帮助您消除任何技能差距,并且应该与房间里一些聪明的人进行一次很好的交谈。

还有时间注册!

这次会议将是一个很好的机会,可以从该领域获取有关Microsoft云战略,路线图和技巧的最新信息。如果您在那里,请过来打个招呼,否则,您仍然可以在下面的链接中注册!

//www.sharepointeurope.com/pricing/

2019年十一月17日星期日

我的Ignite 2019公告幻灯片(以及精选的路线图)

我最近创建了微软最近的Ignite 2019大会重要声明的一些“一页摘要”幻灯片,并将它们发布到Twitter上-但是我认为将它们汇总为一篇文章也很有用。如果它们对您有用,请随意使用它们-当然,它们是我个人认为重要的事情,您可能有不同的优先级,但是鉴于公告的重点,我始终认为合并摘要可以提供帮助。当然,我发现解析公告以创建幻灯片的过程有助于我确定Microsoft的总体定位和进度。

在这篇文章中,我提供了三件事:
  • 我的一页摘要图片
  • 我收集的一些Microsoft路线图幻灯片(图片)
  • 包含以上所有内容的PowerPoint平台(托管在SlideShare上)

我的点燃总结  


我整理了有关团队,Power Platform,SharePoint和Azure的公告:






路线图幻灯片

这些是我为与我相关的主题收集的一些精选路线图幻灯片:







SlideShare甲板

您可以在下面的一个PowerPoint面板中下载以上所有内容的原始幻灯片:

2019年十月15日星期二

快速提示-在SharePoint集线器网站下的网站之间进行搜索

SharePoint Hub网站是在Office 365上构建现代数字工作场所的重要方面。它们提供了一种将网站彼此关联的方法,并且由于现代SharePoint Intranet是从同级网站集(即同级网站)的平面列表中构建的,因此这种机制有助于强加逻辑结构和连贯的用户体验。当然,这种模式的想法非常适合组织变更,因为可以轻松地更新站点和中心之间的关联-如果有必要进行重组,那么将站点更新为一个新的中心就很简单了(不能说早期SharePoint模型中大量使用的子网站模型)。

提醒一下,中心站点提供以下内容:

  • 共享导航
  • 共享品牌 
  • 范围搜索(即能够搜索与中心相关联的所有网站的功能)
  • 集线器的“树顶”目的地

搜索和中心站点

在搜索和中心站点方面,您可能会对几种情况感兴趣。每个人最喜欢的SharePoint技术搜索人员 米卡尔·斯文森(Mikael Svenson) (现在是Microsoft搜索团队的一部分)在以下位置提供了一些有用的示例 使用中心站点和搜索API,包括如何使用搜索列出您所有的中心站点,包括如何过滤以仅返回那些至少具有一个关联站点的站点。

但是,没有提到的一件事是您可以对 与中心相关的所有网站中的项目。例如,如果我有一组位于项目中心下的项目站点,则可能要显示搜索结果(或提供自定义搜索页面),以将结果限制为该项目站点“结构”内的页面和文档。

之所以可行,是因为Office 365在这里做了一些有用的事情,因为被索引的每段内容都选择一个标签来指示与之相关的集线器-换句话说,这将传播到SharePoint中的项目级别。为此,使用了托管属性'DepartmentId'-它包含父中心站点的ID。

这显示在下面的搜索查询工具中:

考虑到这一点很有意义,因为当您使用集线器中的搜索栏时,Microsoft会提供跨集线器所有站点的搜索:


...而DepartmentId托管属性是此处使用的机制。

样本搜索查询

下面是一些有关如何使用它的示例(一旦您知道要对范围进行搜索的中心的ID)。注意:在这些示例中,指定的GUID是我要使用的租户中的集线器站点的站点ID。您需要在此处为​​您的方案添加适当的值:

Show me all pages 要么 documents 从 任何 site under 这个 hub:

IsDocument:True 和(部门编号:{545621ea-2334-45c2-903b-3b9b93be38ee}或部门编号:545621ea-2334-45c2-903b-3b9b93be38ee)

 Show me news 从 任何 site under 这个 hub:

IsDocument:True 和 升级状态:2 和(部门编号:{545621ea-2334-45c2-903b-3b9b93be38ee} 或DepartmentId:545621ea-2334-45c2-903b-3b9b93be38ee)

似乎该值有时可以包含花括号,有时可能不包含括号(考虑到Microsoft本身如何使用此属性进行搜索)-因此,提供上述查询中所示的两种格式可能更安全。

Search queries 用过的 by Microsoft in hub searches

让我们仔细看看Microsoft在其用于跨中心搜索的本机功能中使用的搜索词/条款。浏览浏览器的开发工具可以看到如下所示的查询(此处显示了我的开发环境中的URL和ID)。

完整查询(“全部”标签):

QueryModification:“(营销) (-ContentClass:ExternalLink 和 -FileExtension:vtt 和 -标题:OneNote_DeletedPages和-标题:OneNote_RecycleBin和 -SecondaryFileExtension:onetoc2 和 -ContentClass:STS_List_544 和 -ContentClass:STS_ListItem_544 和 -WebTemplate:SPSPERS 并不是 (ContentClass:STS_Site 和 SiteTemplateId:21)而不是 (ContentClass:STS_Site 和 SiteTemplateId:22)而不是 (ContentClass:STS_List_DocumentLibrary和SiteTemplateId:21)并且不是 (ContentClass:STS_List_DocumentLibrary 和作者:“系统帐户”) 并不是 IndexDocId = 17592721738413)AND NOT Path:"//chrisobriensp-my.sharepoint.com/personal/cob_chrisobrien_com/" 并不是 Path:"//chrisobriensp-my.sharepoint-df.com/personal/cob_chrisobrien_com/" 和(部门编号:{545621ea-2334-45c2-903b-3b9b93be38ee} 或DepartmentId:545621ea-2334-45c2-903b-3b9b93be38ee) -ContentClass = urn:content-class:SPSPeople“

 完整查询(“文件”标签):

QueryModification: "(marketing) (部门编号:{545621ea-2334-45c2-903b-3b9b93be38ee}或 部门编号:545621ea-2334-45c2-903b-3b9b93be38ee)和(不 (标题:OneNote_DeletedPages或标题:OneNote_RecycleBin)且不是 SecondaryFileExtension:onetoc2,而不是FileExtension:vtt,而不是 ContentClass:ExternalLink 并不是(ContentClass:STS_List_DocumentLibrary 和 SiteTemplateId:21)AND NOT(((filetype:aspx或filetype:htm或 filetype:html OR filetype:mhtml))和isDocument:1 OR ((ContentTypeId:0x010100F3754F12A9B6490D9622A01FE9D8F012或 ContentTypeId:0x0120D520A808 *)或(SecondaryFileExtension:wmv或 SecondaryFileExtension:avi或SecondaryFileExtension:mpg或 SecondaryFileExtension:asf或SecondaryFileExtension:mp4或 SecondaryFileExtension:ogg或SecondaryFileExtension:ogv或SecondaryFileExtension:webm 或SecondaryFileExtension:mov))或(FileType:ai或FileType:bmp或 FileType:dib或FileType:eps或FileType:gif或FileType:ico或 FileType:jpeg或FileType:jpg或FileType:odg或FileType:png或 FileType:rle或FileType:svg或FileType:tiff或FileType:webp或 FileType:wmf或FileType:wpd)或(ContentTypeId:0x012000 *))和非 (ContentTypeId:0x0101009D1CB255DA76424F860D91F20E6C4118 *和 PromotedState:2)且不 Path:"//chrisobriensp-my.sharepoint.com/personal/cob_chrisobrien_com/" 并不是 Path:"//chrisobriensp-my.sharepoint-df.com/personal/cob_chrisobrien_com/" -ContentClass = urn:content-class:SPSPeople“

如您所见,要将结果过滤为有用的结果,需要进行大量排除!

概要

集线器网站在Office 365 / SharePoint Online中提供了一种有用的结构,并且在构建解决方案时,了解如何在集线器中的所有网站之间进行搜索可能是一种有价值的技术。关键是要利用Office 365将父中心站点ID放入搜索索引中每个项目的“ DepartmentId”托管属性中这一事实。知道了这一点,您可以围绕中心站点构建各种定制解决方案!

2019年九月10日星期二

它对我的房客有何影响?有关Office 365 / SharePoint解决方案的问题

I’目前正在做一些Office 365架构工作,以确保我们的客户对我们的解决方案及其工作方式有清晰的了解。任何与合作伙伴合作或基于Office 365部署产品的组织都需要询问“对我的房客有什么影响?” – but of course, that’只是高层次的问题。下面是一整套安全性,合规性,运营,成本和其他管理方面的注意事项,应该对它们进行可靠的长期成功的成功使用。但是,我发现许多组织都没有这样做’还不知道如何提出正确的问题或挖掘正确的领域–这可能会导致合规性问题,数据泄漏,对组织生产力的影响或一系列其他问题。

因此,我认为最好与有关以某种方式扩展Office 365的解决方案相关的主题和问题的入门清单共享。 重点是基于SharePoint的自定义,它’不是一个完整的清单–您当然可以扩大范围,或通过提出更多问题来在特定领域更进一步。但是希望我的清单可以帮助您理解在接受环境解决方案之前应该提出的问题类型,或者另一方面,应该作为文档中值得信赖的供应商/合作伙伴/内部开发团队提供的东西。

对于大型企业,我的工作通常涉及的不仅仅是文档。通常,我’带领各个技术团队和服务所有者深入了解我们解决方案的底层细节,并且每个人都需要获得批准,然后我们的解决方案才能通过。一世’m目前正在与世界之一合作’最大的公司,我们需要大约10至12个团队来批准各自的职责,然后再通过“unity review”考虑整体情况。一世’m在与各个团队进行的电话会议中结合使用PowerPoint和实时演示,’关于使概念社会化并确保覆盖低级细节并回答所有问题的所有内容。我确实认为,实施团队有责任主动“push” 的information –如前所述,内部团队不会’总是知道正确的问题要问。如果您有客户’心中最大的利益’我希望他们能充分了解情况。

我建议的清单

整体架构是什么样的?

  • 使用了哪些Office 365服务?
  • 您的解决方案的架构图是什么样的?

用户数据/用户配置文件

  • Are 任何 custom fields added to AAD profiles?
  • Are 任何 custom fields added to SPO profiles?
  • 数据如何进入这些领域?是否存在同步解决方案,或者用户是否通过本机Office 365或自定义界面编辑其值?

安全

  • Are 任何 changes to 的“Custom script” settings proposed (i.e. is there 任何 ad-hoc JavaScript running outside of modern pages and 的SPFx security model)? HINT –你真的想把这两个都设置为“prevent” if possible:



  • 需要什么SPFx权限? (如Web API权限页面上所示)?



  • Are 任何 AAD app registrations created (related to use of 的Microsoft Graph API)?





  • 解决方案使用了哪些第三方库?您能告诉我们最新的npm审核报告吗?
  • What certificates are 用过的 by 的solution?
    • 如何管理它们以及将它们部署到何处?
    • What is 的expiry date of 任何 certificates and 怎么样 is rollover handled?
  • 如果部署了远程双色球推荐一注元素(功能或其他Web API),则使用哪种身份验证模型?
  • Are 任何 code elements 要么 artifacts *not* hosted in our tenants/subscriptions? If so, what purpose do they serve? How can we be sure our data isn’t passed to them?

分类

  • 提供了哪些术语组和术语集?
  • 它们如何使用/它们的目的是什么?
  • 它们是开放式还是封闭式术语集?
  • How are they identified? Will my 用户s confuse them for something else?
  • 他们是已经存在的东西的副本吗?

搜索配置

  • 设置了哪些新的托管属性?
  • More importantly, are 任何 mappings of existing out-of-the-box properties provisioned?
    • How can I be sure 任何 use of RefinableStringXX, RefinableDateXX, RefinableIntXX and so on don’与租户中使用的现有映射冲突?
  • 提供了哪些结果源?
  • 还提供了哪些其他搜索配置?

队伍

  • 使用了Teams开发平台的哪些方面(例如标签,连接器,漫游器,消息传递扩展)?
  • 使用哪些权限/设备权限?
  • 使用哪些远程域?做什么的?

Office加载项

  • 如果使用Office加载项,它们的许可要求是什么(例如“ReadWriteMailbox”)?
  • 是否使用集中式部署来部署外接程序?如果没有,为什么不呢?
  • 外接程序在哪些Office应用程序中显示?

蔚蓝

  • What is deployed to 蔚蓝? Is it just PAAS elements 要么 are there 任何 IAAS elements?
  • 如果使用Azure功能,它们是否在消费计划或应用程序服务计划中?
  • 预测费用是多少?这有什么不同?

SharePoint内容(请参阅下面的注释)

  • 使用哪种网站类型(例如,交流网站,中心网站,团队网站等)?
  • Are 任何 classic SharePoint elements 用过的 (e.g. classic publishing sites)

SPFx

  • 使用什么SPFx软件包?
  • 哪些是在整个租户范围内部署的,哪些是每个网站集的?
  • [有关SPFx安全性的注意事项,另请参阅安全性部分]

请注意,该列表并没有过多地关注SharePoint内容。如果将解决方案部署到现有的SharePoint网站集中(或多个SharePoint网站集中),则您可能会询问有关内容类型和网站列以及已配置的内容的问题。但是,在大多数情况下,单个SharePoint网站中发生的事情是一个较低级别的问题,风险较低(至少在SharePoint Online中)。

概要

在企业中成功使用Office 365取决于在生产力和敏捷性与安全性和治理之间取得平衡,其中部分涉及确切了解’以及您的租户的工作方式。

仅仅因为您不再拥有和管理物理服务器就可以了’并不意味着违反’否则可能无法窃取您的数据。 Office 365的设计考虑了自定义(至少现在是这样),并且有许多安全功能旨在确保可以以安全,可管理的方式扩展平台。但是,您确实需要确保使用它们-我认为’可以公平地说,一些较早的供应商/产品Office 365解决方案还没有’没有被更新。

毫无疑问,有一些有用的产品可以通过这种方式帮助解决方案,但是我’m 不 sure 任何 of them cover all of 的aspects listed here. Hopefully 这个 checklist can help!

2019年七月18日星期四

Office 365开发人员-构建自定义SPFx表单的提示

我最近从事的一个项目涉及构建自定义表单作为SPFx Web部件。–总的来说,我认为这是一个不错的选择“high-end”需要具有特定行为和/或外观的表格。同样,将页面指定为SPFx应用程序页面的功能意味着可以删除一些不必要的页面家具,这很有帮助。在考虑Office 365中的表单时,我看到了一系列的选项,看起来像(按复杂程度/工作量的顺序排列):

  1. 即用型SharePoint列表表单 
  2. PowerAppscustomised SharePoint list form 
  3. Canvas PowerApp,通过PowerApps Web部件嵌入到SharePoint页面中 
  4. 使用SPFx和React定制开发的表单 
所以,我们’在这里谈论最后一个选择。

好消息是,对于具有足够技能的SPFx开发人员,可以很快速地构建其中一种形式-有一些非常强大的构建块可以提供帮助。我认为总体配方如下所示:
通过将这些成分的使用与一些额外的步骤结合起来以帮助用户进入您的表单(请参阅本章后面的部分),您可以以比您想象的更少的精力来获得丰富的解决方案。

Form controls 用过的 with SPFx, and dealing with data

考虑上面的成分列表,您会发现通过引入这些控件并将其与数据集成可以走很长一段路。我认为以下安排可能很常见:

需求

资源

标准文本框,按钮等 Office UI Fabric反应
下拉菜单,包括高级格式/行为 Office UI Fabric反应
分类选择器 PnP React分类选择器
人选器 PnP React人员选择器
文件上载控件(存储为列表项附件) PnP React文件上传控件
文件上传控件(以其他方式存储) 其他第三方控制(您可以处理到SharePoint的上载)

您最有可能需要允许使用表单编辑现有项目以及创建新项目。 PnPJS非常适合简化操作以获取现有项目(通常是从传递到页面的项目ID),并还可以保存回SharePoint。在SPFx Web部件中,您将使用React状态作为前端控件中间与数据层服务双色球推荐一注之间的过渡。

最后,我的表单看起来像这样(此处显示为缩小)。您可能会注意到顶部的一系列按钮-这些表面功能,例如“另存为草稿”,尽管我认为使用的是Office UI Fabric 命令栏 要么 上下文菜单 很好,在这种情况下,客户端会选择简单明了的按钮。否则,仅使用上述控件:


提供编辑项目的经验


假设您的自定义表单将项目存储在SharePoint列表中,则您可能需要采取一些步骤将默认列表体验与表单集成在一起。一个很好的例子是确保用户编辑项目时,将其带到您的表单而不是即用的SharePoint列表编辑表单。这可以通过在您的列表中添加一列并定义一些JSON格式来提供链接来完成。只需获取页面(即您创建并添加了Web部件的页面)的URL,然后在JSON中使用该URL作为链接。您应该以如下形式结束:

I 用过的 JSON like 这个:

请注意,我正在将当前列表项ID传递给表单。在我的SPFx Web部件中,我有一些双色球推荐一注正在寻找在'itemId'URL参数中传递的值-如果找到了,如上所述,我使用PnPJS来:
  • 提取此项目的数据
  • 使用这些值设置React状态,以便将表单控件设置为这些值
这样可以照顾到编辑经验。

提供“新项目”体验或自定义现代列表中的新/编辑/显示表格


就我而言,可以通过主页上的大型视觉表示来简单地提供新的项目体验。普通最终用户不会使用该列表,也不会按下“新建”按钮。在这种情况下,事情很简单。 与同事聊天(感谢 狮子座!), it *is* possible to override 的new/edit/disp forms of a modern list, but currently there are issues if a modern page is 的target and you want to pass 任何 parameters in 的URL (e.g. 的item ID for 的edit experience) - apparently something breaks completely and your form is unlikely to load. One approach which can work is to create a classic page, set 的new/edit/disp form URLs of your list accordingly, and add JavaScript on 的classic page to redirect on to 的modern page hosting your SPFx form. You may need to hash/further encode 任何 ID you're passing, and consider adding CSS to hide some page elements in case 的用户 briefly sees them during 的redirect process. 这显然与2019年夏季的情况差不多,并且有一个UserVoice条目 允许我们开发具有定制编辑经验的定制现代表单 要求更好的集成-好消息是这种情况的状态最近已更改为“思考”。因此,希望对于那些需要在您的自定义表单和现成的列表UI之间进行紧密集成的用户,这个故事会很快得到改善。

将页面设置为SPFx应用页面


开发完Web部件后,您将要确保它在页面上正常工作-通常,您将希望删除一些“页面家具”,以便您的表单成为焦点,并且更少分心。在现代页面上,您可以执行某些操作,例如将标题区域设置为“ Plain”布局-这样会减少标题区域,但是如果您的表单具有某种标题/标题,您仍然会在此标题和页面标题。

页面作者可能会意外地编辑页面并删除Web部件,该怎么办?

通过将页面转换为SPFx应用程序页面,可以解决这两个问题。在其中之一上,只能使用单个Web部件,无法编辑其Web部件的属性并删除标题区域。下面的两张图片比较了我的表单,然后将其转换为应用程序页面(左),然后转换为应用程序页面(右):

如您所见,标题区域已删除。另外,如果我将页面切换到编辑模式,则无法删除Web部件,并且我看到的唯一选项与页面标题有关:

因此,现在您的表单中发生“意外”创作的可能性较小。如果该页面最初不是作为应用程序页面创建的,则可以一次性使用PowerShell或什至通过浏览器控制台中的一些快速JavaScript进行转换。查看更多详细信息- //docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/single-part-app-pages。当然,您也可以根据需要删除左侧导航栏。

以这种形式使用PnP分类法选择器控件


我想在这里讨论的一个方面是PnP分类法选择器控件(这些表格的常见控件)中的一个怪癖。与该工具包中的许多其他工具一样,控件本身也非常出色,并且将是一项重大任务’自己写,如果你必须写的话。让’s all buy 埃里奥 下次我们再见他(另一种)啤酒时

分类选择器很容易添加到您的Web部件中,并使用您提供的术语集(按名称或ID)填充术语。典型的声明如下所示:

<TaxonomyPicker allowMultipleSelections = {false} termetNameOrID =“ b2a79b4b-9d64-46d9-8a94-38f8809f8d12”
 panelTitle =“选择地区”
  label=""
 initialValues = {this.state.selectedRegion}
 context = {this.props.context}
 onChange = {this._onRegionTaxPickerChange}
 isTermSetSelectable = {false} />

这样可以在您的页面上提供如下内容:

其他一些注意事项是:
  • 初始值–使用此属性来设置控件的值。因此,如果您的表单用于编辑现有列表项,请从数据中获取值并设置此属性– since I’m使用React,这完全来自我的Web部件状态中的值
  • onChange–选择术语时会发生什么。在React中,您’d通常此时将值存储在状态中,以备日后插入/更新到SharePoint
到目前为止,如此简单。但是,需要注意的是,onChange()方法以IPickerTerm对象的形式提供了该项–PnP双色球推荐一注提供的内容。但是,由于REST API要求使用其他格式,因此无法使用PnPJS或REST将此类对象传递给SharePoint。 IPickerTerm具有以下属性:
  • 名称
  • 路径
  • termSet
  • termSetName
但是,PnPJS或SharePoint REST API期望具有以下属性的对象(这是针对单值分类法字段):
  • TermGuid
  • 标签
  • WssId
旁注-如果您的字段存储多个值,则情况会有些复杂。 Alex Terentiev对此发表了一篇文章 可能会帮助您。

那么你’如果您需要在两个对象类型之间进行一些映射’从PnP分类控件中将数据重新读/写到SharePoint(包括将控件的选定值设置为存储在SharePoint列表项中的当前值)。

这里要知道一些重要的事情:
  • 值-1可以用于WssId值– you don’t need to do 任何thing more, SharePoint will sort 这个 out
  • TermGuid属性映射到IPickerTerm.key属性
  • 标签属性映射到IPickerTerm.name属性
考虑到这一点,我们只需要一些双色球推荐一注即可在两种对象类型之间进行映射-我发现需要使用以下两种方法(在每个方向上进行转换):

概要


希望这篇文章对构建自定义SPFx表单时的注意事项有所帮助。我认为这种方法对于更复杂的表单非常有用,这里列出的构建基块确实有助于减少所需的双色球推荐一注量。将页面设置为应用程序页面可以消除不必要的页面修饰,这与与SharePoint列表UI集成以获得新的/编辑/显示体验一样有帮助。除了Office UI Fabric,PnP React控件在SPFx表单中都非常有用,TaxonomyPicker也不例外。如果使用该格式,可能会发现需要像上面的示例一样的双色球推荐一注,以帮助您在控件使用的格式与SharePoint REST API或PnPJS使用的格式之间进行映射,但这并不复杂。祝您编码愉快!

2019年六月19日星期三

Office 365开发人员提示–与Microsoft Graph和其他API一起有效地工作

I’最近在各种会议上发表有关扩展Office 365的关键技能的演讲 –如今,有效的架构师或开发人员需要在工具箱中拥有的东西。显然,考虑到毕竟,使用Microsoft Graph的能力必须在此列表中处于较高位置,“Office 365的API”. It’拥有一种(主要是!)一致的方式来与Teams,SharePoint,邮件,日历,Planner,OneDrive文件和许多其他功能一起工作非常好,但是在各种身份验证选项和编码样式之间,’有很多要知道的。

我发现的一件事是,开发人员可能对Graph还不够有效–部分原因是最近发生了一些变化,部分原因是某些开发人员仅使用SharePoint REST / CSOM API和其他特定于服务的API才进入Graph。

所以我在这里的关键信息是:

  • Microsoft提供的Postman集合可以帮助您回答有关Graph的问题,并将调用集成到您的双色球推荐一注中
  • SDK比您有更多帮助’d在您的双色球推荐一注中期望–以TypeScript中的类型为例
为什么这些事情很重要?

提示1-使用Postman集合代替Graph Explorer


Graph Explorer (GE) is 大 for developers to start seeing some calls that can be made to 的Graph and what kind of data comes back. If you’re new to 的Graph, check it out 在 //developer.microsoft.com/en-us/graph/graph-explorer. However, for intermediate and advanced developers, I recommend using Postman over Graph Explorer. 这里’s why:

图资源管理器的缺点
GE的一个缺点是,即使您可以登录帐户并因此与自己的Office 365租户一起使用, 这仍然不是您的双色球推荐一注将要做的事情。调用双色球推荐一注总是需要Azure AD应用程序注册,GE不会使用您的应用程序注册–表示使用了不同的权限。所以’从Graph Explorer移到双色球推荐一注时,通常会遇到问题,通常与在应用程序注册中没有允许的正确权限范围有关。使用Postman可以使用您的应用程序注册表,因此’与您的双色球推荐一注完全相同。

使Postman具备Graph强大功能的原因是,Microsoft已针对所有当前Graph方法发布了Postman集合。–包括Beta版。您可以将它们导入Postman,然后’然后,将看到每种方法的项目,分为两个文件夹,分别用于仅应用程序调用和代表用户的调用:

这是 为了发现!现在,每当我想知道图表是否允许我获取某些东西时,我无需点击浏览文档页面,而是来到这里开始扩展文件夹:
我看到了所有Graph工作负载以及可以检索哪些数据 非常 确实很快。 Postman和Graph集合的入门过程涉及一点点-概述于 Github存储库,您可以在其中获得Microsoft的Postman Graph集合,但我认为观看某人的整个流程会有所帮助,因此我制作了一段带字幕的视频:


该过程首先获取我将使用的AAD应用程序注册的详细信息,因此,如果您还没有一个注册,则应创建一个(定义了适当的权限范围)。总体而言,该过程是:
  • 导入收藏集
  • 配置各种邮递员变量
  • 获取仅应用程序调用和“代表用户”调用的访问令牌,并将其存储在其他Postman变量中
  • 享受您对Graph的新快速访问!您可以开始执行调用,然后看到数据返回

It's fairly straightforward to integrate 的call into your code, and you won't have 任何 security/permission issues because you've already tested 的same thing your code will do.

更新-实际上,我现在知道杰里米也有一个视频。看到 //www.youtube.com/watch?v=4tg-OBdv_8o 为了那个。

太好了-我们现在可以在Graph中查看所有URL端点,它们期望的数据以及返回的数据。但是,一旦编写双色球推荐一注,我们如何确保我们与Graph有效合作?

提示2-确保您使用的是TypeScript类型


对于我们许多人来说,我们将根据Graph进行编码的地方将是SPFx或其他TypeScript双色球推荐一注-甚至可能是基于node.js的Azure函数。这里要避免的关键是使用“any” in TypeScript –我们可以做得更好’另一个第三方API或Graph本身。它’API通常会返回相当复杂的JSON结构,并且可以通过确保使用代表数据的类型(接口或类)进行类型检查来避免很多编码错误。此外,对这些数据结构具有自动完成功能可使编码过程更快,更准确。

在TypeScript中使用图形

在SPFx中使用图形时,要注意的第一件事是您的项目不会自动添加图形类型(例如,当Yeoman生成器创建文件时)–您必须安装一个单独的npm软件包。为此,请运行以下命令之一:
  • npm install @ microsoft / microsoft-graph-types --save-dev
  • npm安装@ microsoft / microsoft-graph-types-beta --save-dev
是的,即使您愿意,Microsoft也请提供类型’重新处理Beta Graph端点。对于大多数生产方案,您’但是,将使用第一个选项(并保持释放端点)。安装类型之后,可以使用以下命令将它们导入到SPFx类中:

从'@ microsoft / microsoft-graph-types'导入*作为MicrosoftGraph;

It’最好仅导入您要’实际使用而不是*,但这需要一些挖掘(以找到模块名称)。您’但是,使用较小的捆绑包尺寸会得到奖励。 Either way, once you’已经导入了类型,您可以在双色球推荐一注中开始使用它们–这改变了根本没有零支持的情况:
..键入时具有完全自动完成功能:
万岁!现在事情变得容易得多。

在没有这种支持的情况下,请尽可能避免编写双色球推荐一注!但是,如果您使用的不是图谱的API,该怎么办?

在TypeScript中使用第三方API

在这种情况下,要做的第一件事是确定供应商是否提供TypeScript类型(通常以npm软件包或类似的形式)。如果是这样,只需安装它,您就可以获得支持。如果没有,我喜欢使用Postman获取返回的JSON,然后使用Visual Studio Code扩展,例如 快速类型 根据该JSON为我自动生成类型。那么你’d在Postman中调用API,然后将返回的JSON复制到剪贴板。

In 的example below, I'm using 的这里 Maps API. I set up 的call in Postman by pasting in 的URL endpoint to use, and setting up 任何 authentication. I hit 的send button, and then copy 的returned JSON (in 的lower pane) to my clipboard):
在Visual Studio双色球推荐一注中,我创建了一个文件来保存API的接口类型,然后在命令面板中找到QuickType“将JS​​ON作为双色球推荐一注粘贴”选项:
我提供了顶级类型的名称:
..然后QuickType生成映射到JSON的类型结构。我可能想重命名某些类型,但是从本质上讲,我得到了结构中所有内容的接口:

太好了-这为我节省了很多交叉引用和类型输入,现在我可以在调用双色球推荐一注中使用这些接口,并进行类型检查和自动完成。

概要


无论是Graph还是第三方API,您都应始终根据定义的TypeScript接口进行编码。对于Graph,应通过安装Microsoft的“ microsoft-graph-types” npm软件包来使用Microsoft提供的类型。对于第三方API,如果未提供任何类型,则可以借助QuickType之类的帮助轻松生成自己的类型。

无论您做什么,Postman都是一个非常有用的工具。就Graph而言,它的使用可解决Graph Explorer无法以与双色球推荐一注相同的权限执行的问题,因此它与第3方API一样有价值。

祝您编码愉快!

2019年六月12日星期三

快速提示-按流中的日期筛选SharePoint项目

关于在Microsoft Flow中处理日期的快速帖子,因为我知道我将再次需要它,而且当我看时并没有立即发现任何东西。

当使用诸如“ SharePoint获取项目”之类的流程操作时,通常情况下是要按日期/时间字段筛选项目。通常,您想获取比某个时间戳更旧(或更新)的项目-也许要删除/存档/对其采取其他操作。

最简单的方法是使用 getPastTime 功能,以确保您以正确的方式格式化它。可以在“获取项目”的“过滤查询”属性中使用如下子句:

格式DateTime(getPastTime(1,'Month'),'yyyy-MM-dd')

请注意,此格式旨在与SharePoint中配置为“仅日期”格式的日期/时间字段一起使用:

对于包含时间的日期,您可能需要将formatDateTime与其他格式一起使用(对不起,我没有对此进行测试)。

有关使用getPastTime和类似功能的注意事项


“ getPastTime”方法的签名为:

getPastTime(<interval>, <timeunit>, <format>?)

“ timeUnit”的可能值列表包括:

“第二”,“分钟”,“小时”,“日”,“周”,“月”,“年”

如您所料,还有一个对应的函数称为 getFutureTime()。要在“获取项目”操作中使用其中之一,请提供OData格式的过滤查询,该查询使用日期字段的内部名称-类似于:

MyDateFieldInternalName lt 格式DateTime(getPastTime(1,'Month'),'yyyy-MM-dd')

例如,这将仅过滤一个月以上的项目。在Flow设计器中,应如下所示:



希望这是有用的。愿您所有的流程按时执行,并且没有错误!

2019年五月8日星期三

在2019年欧洲合作峰会和SharePoint周六伦敦上发表演讲!


在短短的几周内,我将在德国的欧洲合作峰会上发言。这是一个很棒的活动,有出色的演讲者和来自Microsoft的许多人。活动团队不遗余力地使展会成为与会人员的绝佳学习活动,我强烈鼓励欧洲的Office 365 / SharePoint / 蔚蓝人员尝试并达到目标。深入讨论的主题将包括团队,Azure,SharePoint,Yammer等-从业务和技术角度进行讨论。

我的课程是:

掌握的顶尖Office 365开发技术-命中列表


在Office 365开发中,事情发展很快,并且随着Microsoft平台和API的发展,新技术和方法始终可用。作为一个才华横溢的开发团队的负责人,我会定期更新我认为对拥有良好能力来构建Office 365解决方案至关重要的技术清单。在SPFx,图表,团队开发,Azure Functions中的编码以及PowerApps和Flow中的构建解决方案之间,让我们逐步了解一些2019年中期的高价值方案,这些方案应包含在每个经验丰富的编码人员的工具箱中,并分别提供演示和双色球推荐一注示例。本次会议将帮助您消除任何技能差距,并且应该与房间中一些聪明的人进行一次很好的交谈。 

我认为要列出的一些技术包括:
  • 与Postman的Microsoft Graph有效合作(并针对返回的JSON进行编码)
  • 使用SPFx隔离的Web部件和AAD身份验证从SharePoint安全地调用后端API(例如Azure功能)
  • 使用网站设计和PnP模板有效地模板SharePoint网站
  • Rich PowerAppswhich can capture images 要么 signatures 
当然,有一个 *一百万* scenarios you could consider for such a list! However, I think 任何 developer with those in 的toolbox is quite well-equipped across some important building blocks. I'll also talk about some other techniques such as templating 队伍, calling APIs 从 Flow, offline support in PowerAppsand more.

总的来说,我认为这几天的全面发展非常重要-如果您是纯粹的面向双色球推荐一注的开发人员,对PowerApps和Flow几乎一无所知,那么坦率地说,您(和您的客户)会错失良机。与以往一样,能够选择正确的体系结构和解决方案方法至关重要,在这里了解技术如何融合在一起(在某些细节上)至关重要。

有关2019年欧洲合作峰会的更多详细信息:
ECS 2019将于5月27日至29日在德国威斯巴登(靠近法兰克福)举行。对于这一级别的活动,票价*非常*合理!阅读更多信息: www.collabsummit.eu

在伦敦也有售!


如果您无法使用ECS,那么我也要发表同样演讲的另一项盛事是SharePoint Saturday London 2019!这是我的主场,就像过去的场合一样,来自世界各地的许多顶级演讲者都在场。

有关SharePoint Saturday London的更多详细信息:

该活动将于6月1日在伦敦市中心举行-当然是免费的!阅读更多 www.spsevents.org/city/伦敦/ home

希望在其中一项活动中见到您!

2019年4月23日,星期二

SPFx隔离的Web部件–连接到后端API的正确方法

It’由于最近发布了SPFx 1.8,SharePoint / Office 365开发人员现在可以创建“隔离的” Web部件。如果您的Web部件需要与后端API或Graph对话的权限,则应强烈考虑使Web部件隔离。仅通过AAD身份验证保护Azure函数或其他API就是没有’足够。在这篇文章中,我’将详细介绍可以在Office 365环境中执行特权操作的SPFx Web部件的一些细节(在这种情况下,通过模板创建Microsoft Team)–因此,我们应该采取步骤来确保安全。具体来说,我们要保护在后台使用的访问令牌,并确保没有其他Web部件可以“piggy-back”到我们正在使用的权限上。没有隔离的Web部件:

  • 页面上的其他任何双色球推荐一注(可能从3rd 一方的供应商)可以嗅探访问令牌,并可能恶意地使用它,具体取决于它拥有的权限
  • Any standard SPFx web part can use 的permissions 从 任何 other – meaning it’s a “最高公分母”这种情况下,环境中的所有标准SPFx Web部件都具有相同的权限,即有史以来授予的最高权限
这些可能是非常有效的安全问题– you’d要非常确定已向SPFx授予了哪些权限级别,以及您的环境中确切拥有的双色球推荐一注。隔离的Web部件通常可以作为确保Office 365环境不会不安全的答案的一部分。

怎么样 隔离的Web部件到底有什么帮助?

孤立的Web部件解释器

来自隔离的SPFx程序包的Web部件在iFrame内托管的唯一域上运行-授予的权限适用 只要 to code hosted on that domain. Since regular SPFx web parts run on your *.sharepoint.com domain, 的granted permissions do 不 apply there. And since 任何 other SPFx隔离的Web部件run on a 不同 唯一域,它们也不适用于此。本质上, 共享 SPFx的应用程序主体是 用过的 –而是专用于AAD应用注册 这个 SPFx解决方案已创建并用于身份验证。请注意,此范围不是’t单个Web部件,但包含解决方案包。但是,这很好-如果您有不受信任的源双色球推荐一注为同一解决方案/双色球推荐一注库提供双色球推荐一注,那么坦率地说,您可能面临更大的安全性和治理挑战。

因此,当将隔离的Web部件添加到页面时,’会看到包含的iFrame– 不ice 的source:

源是一个动态创建的域,用于表示此解决方案包–类似于怎么老“SharePoint托管的应用”该模型用于为记住这些的人提供一个单独的双色球推荐一注托管域。在AD门户中,您’还将看到您为该SPFx解决方案包创建的应用程序注册:


它具有一堆自动配置的重定向URI,以支持从iFramed Web部件双色球推荐一注将使用的域进行SPFx调用:

独特的domain / iFrame和专用的AAD应用程序注册的组合解决了SPFx和AAD集成所带来的先前的权衡,其中存在对给定安全范围的权限请求(例如Group.ReadWrite.All)。–这将允许创建新的Office 365组或Microsoft团队或更新现有的Office 365组或Microsoft团队,以及进行其他一系列操作) 适用于租户中的所有* SPFx Web部件和扩展,而不仅仅是需要它的人。

那么你 can see that 任何 web part that performs a highly-privileged operation (e.g. creating a Team in my case, to continue that example) really should be isolated – especially if there’您的租户可以托管来自不同团队或提供商的Web部件。通过这种方式。我保证,唯一可以调用我的API的东西就是要使用的Web部件-Office 365租户中没有其他双色球推荐一注可以。

Of course, without 的iFrame that comes with isolated web parts, 的auth token is right there in 的page to be sniffed by 任何thing else on 的page:

因此,隔离的Web部件是一件好事。

在我们讨论在哪里需要什么配置之前,让’我们考虑一下一些用户界面。

具有隔离Web部件的UI注意事项

假设您要在隔离的Web部件中使用某些Office UI Fabric(OUIF)组件。那’很好,但您需要考虑以下事实:您的内容显示在具有特定尺寸的iFrame中–和某些UI组件不’不能很好地玩。让’s说我们要使用OUIF React中的对话框。在下面的示例中,我有一个按钮可以弹出对话框,为便于说明,我’ve还在我的Web部件上添加了黑色边框,因此您可以看到它在页面中的大小:


当按下按钮时,我们得到以下信息:


哇– doesn’看起来不对。那当然’,因为对话框仅出现在iFrame中。如果我扩展Web部件的尺寸,则对话框可以完全显示–实际上,我几乎需要“reserve” space on 的page for 任何 elements which are initially 不 visible:


而且’Fabric React Panel也是如此。用一个小的Web部件,它’s 不 clear what’s going on 在 all:


但是在这种情况下,即使使用更高的Web部件也不会’t really help –您可以看到更多的面板,但是由于面板使用了屏幕的整个高度,因此您仍然看不到全部内容:


So, perhaps isolated web parts work better when 的content is right there in 的page, rather than with 任何 elements that appear on 用户 interaction。您’我们需要相应地设计隔离Web部件的UI。

创建一个隔离的Web部件

通过指定来创建隔离的Web部件“isDomainIsolated”在您的SPFx项目的package-solution.json文件中为true。这告诉SPFx,此软件包中的所有Web部件都应与其他Web部件隔离(但不能彼此隔离)– you’d为此需要单独的项目):


You can specify 这个 在 任何 time, but 的Yeoman Generator helps you out by asking 这个 question when you’重新创建一个新的SPFx项目。一种“yes”以下问题将导致上面的配置:


关键要素

起初我对某些配置值中需要的值感到有些困惑。知道在AAD中为我创建了一个新的AAD应用程序注册后,是否需要在双色球推荐一注中使用该客户端ID?还是我的Azure函数使用的AAD应用程序注册的客户端ID 内部地 实际针对Graph进行调用(因为我的模式是SPFx Web部件-> 蔚蓝 Function -> Graph calls)?

该文档从本质上说,“一切正常”,但我仍然有些困惑。

这里’总结您需要做什么:
  • 创建您的Azure Function应用并通过AAD身份验证确保安全
  • 创建您的SPFx项目并回答“yes”有关隔离的Web部件的问题(或添加“isDomainIsolated”:在您现有的package-solution.json文件中为true)
  • 添加适当的“webApiPemissionRequests”您的package-solution.json文件中的部分(下一个更多内容)
  • 使用AadHttpClientFactory在SPFx Web部件中编写双色球推荐一注以对API执行身份验证
  • 将包部署到应用程序目录(即使仅在此阶段调试)
  • 在租户管理中的API管理页面上批准权限请求
让’s更详细一些:
在package-solution.json中
将条目添加到“webApiPemissionRequests” section 与您的服务器端API /功能相对应, 范围“user_impersonation”. IMPORTANT:
  • 要列出的AAD应用程序reg / API是 一个适合您的功能应用程序,而不是:
    • 为隔离的Web部件动态创建的AAD应用(例如“cob-teamcreatorwp” in my case)
    • 您可能在功能中使用了其他一些AAD应用,但与从Web部件到API的通信没有任何关系(例如“COB Graph Access” in my case)
因此,您的package-solution.json应该看起来像这样:

在您的SPFx双色球推荐一注中
在您的双色球推荐一注中,您’会有这样的事情–请注意,再次传递给AadHttpClientFactory的客户端ID是Function应用的ID:

批准权限:
然后,需要将解决方案包部署到您的租户,并获得同意。
  • 将软件包添加到应用目录–请注意“权限管理”页面上的消息,表明需要采取进一步的措施,并带有有关批准的特定权限的说明:

  • 如果您随后转到该页面,’会看到批准的权限:  

  • 如果您点击批准按钮’对授予的权限感到满意。在这种情况下,权限将仅限于此SPFx程序包中的Web部件–租户中的其他Web部件将无法使用它。
从使用隔离的Web部件还原
在最初将Web部件定义为隔离的Web部件之后,有时您可能需要将Web部件还原为标准Web部件-我发现自己在撰写本文后必须执行一次此操作。请注意,除了将package-solution.json中的“ isDomainIsolated”更改为“ false”并重新打包外,您还需要从App Catalog中完全*删除* SPFx解决方案,然后上传新版本-简单的版本升级是不足以切换。希望能对某人有所帮助!

概要

您可以通过很多方法来确保自定义双色球推荐一注在Office 365 / SharePoint Online环境中可以执行的操作,但是隔离的Web部件确实有助于最大程度地降低利用漏洞的可能性。没有它们,也许其他东西可能会在您没有意识到的情况下调用您的后端API。值得注意的是,Microsoft在降低某些操作所需的双色球推荐一注权限方面仍有一些工作要做(例如,在Teams通道中发布消息需要Group.ReadWrite.All,并且某些Planner操作是相似的),但希望很快会实现。

It’同样值得考虑的是在什么地方需要什么权限。如果您通过后端API调用Graph,则SPFx可能只需要调用*您的API的权限,而后端使用的单独的AAD应用程序注册才具有采取实际操作的权限。显然,可以大大减少表面积。

无论哪种方式,隔离的Web部件都可以在平衡安全性与Office 365中的功能方面发挥重要作用。我将在以后的文章中发布Teams Creator Web部件和Azure Function API的完整源双色球推荐一注。

进一步阅读:
//docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/isolated-web-parts

2019年3月8日,星期五

从模板创建Microsoft 队伍

One thing we’一直在等待的是从一个团队创建许多团队的能力 模板,就像许多组织使用SharePoint网站一样。 Microsoft现在已经发布了此文件(在撰写本文时为预览),我们可以定义一个 JSON中的模板,确切定义了团队的外观,包括 频道,标签,已安装的应用,所有者和各种配置 设置。很好,因为我们现在可以处理诸如 项目团队,其中可能有“Technical”, “Account 管理”, “Project delivery”, “Client success” and so on. You can 想象在不同渠道中定义的各种标签-也许 帐户管理频道将有一个带有窗口小部件的标签,用于引入 CRM中的摘要数据。也许技术频道会有一个标签 也显示来自Azure Dev Ops的当前工作项。正在制作应用 许多团队可用的可能是3rd 第三方应用可用 团队商店或内部开发的自定义商品。

与模板化团队合作所需的工作总结如下:



因此,这一切都是由开发人员主导的。它为N’t好像模板是 例如存储在Teams服务中的某个地方-最终是开发人员 正在编写双色球推荐一注以将一些JSON传递给对Graph的调用。还有这个JSON 包含团队创建的所有细节–名称,说明, 频道设置,已安装的应用等。当我’一直在与 API,我’我发现有一些双色球推荐一注可以分解构建JSON 是有用的。特别地,将其分为两个部分似乎很有用:

  • 对于每个正在创建的团队而言,事情都会发生变化(名称,说明, 拥有者)

    ..和..

  • 保持不变并被视为模板一部分的内容 (渠道设置,已安装的应用程序等)
因此,本文旨在提供一些简单的双色球推荐一注,以防其他人发现 它很有用。那里 ’这里没有什么太复杂的,但是我’我试图获得更多 通过Github共享少量双色球推荐一注的习惯。

有关JSON结构和Graph调用的详细信息,请参见 //docs.microsoft.com/en-us/graph/api/team-post?view=graph-rest-beta。如文档所示,创建团队的示例JSON可能看起来像 像这样(这是来自文档的示例):

So, although we’重新构造此JSON并将其传递给Graph 开发人员可以选择:

  • 创建一个包含不变部分的静态JSON文件,并将其视为 的“template”
  • 编写一些双色球推荐一注以附加代表团队名称,描述的JSON 和所有者

您可能从上面的摘录中注意到,所有者需要 以GUID的形式指定,而不是您最有可能拥有的( 用户’s account 名称/e-mail address). This GUID is 的用户 identifier in AAD。因此,我们’ll also need a method in our code to lookup a 用户 帐户名称的GUID。

我们可以在团队模板中定义什么?

这里’s a summary:

设置
能见度 公共/私人
已安装的应用 [应用目录中的任何应用]
拥有者 [List of 用户s]
频道详情 标签,默认为收藏夹
会员设置 允许创建频道,允许添加应用等。
访客设定 允许创建频道,允许删除频道
有趣的设置 允许小字,贴纸和模因,内容分级
讯息设定 允许编辑/删除消息,允许团队和渠道 提及

编码

我想要的主要帮助程序双色球推荐一注是我可以调用的方法,该方法可以接受 团队名称,描述和所有者的参数,因此我可以称之为 多次。也许它可能成为某些东西背后的核心双色球推荐一注 从Excel文件读取以批量创建许多团队。也许会 在良好的最终用户自助服务请求过程中位于自定义表单的后面。 在身份验证方面,此双色球推荐一注使用仅应用程序身份验证来创建团队(使用AAD客户端ID和客户端密钥),而不是委派身份验证(在用户上下文中)。但是,您可以根据需要采用这两种方法。

因此,我得出的核心双色球推荐一注是(在一个简单的控制台应用程序的上下文中显示了该双色球推荐一注-但您可以将核心方法放到所需的任何内容中):


您可能会注意到我有一个“TeamDetails”上课也做些 工作。这是操作JSON的双色球推荐一注所在,提供 将团队名称,描述和所有者附加到其他方法的方法 指定的详细信息:


当然,完整的双色球推荐一注可以在Github中找到– it’位于以下地址: //github.com/chrisobriensp/TeamsProvisioning

结果

现在,我们可以使用上面显示的CreateTeam()方法创建尽可能多的团队。将使用模板中指定的通道,选项卡和其他属性来创建每一个。例如,这是上面显示的示例JSON中定义的通道和选项卡:



概要

现在可以使用正确的工具集以一致的方式创建许多Microsoft团队,并且我们也可以使用仅应用程序权限来执行此操作(因此无需在存储高特权帐户的详细信息方面做任何麻烦的事情)。如果您开始使用Graph API方法来执行此操作,那么您可能会发现本文中的双色球推荐一注很有用。除了使用“标准”模板创建团队之外,请注意,Microsoft本身还提供了一些嵌入到服务中的特定基本模板-这些模板可能立即满足您的需求。目前,这些基本模板针对教育,零售和医疗保健场景-但是将来无疑会有更多。

无论哪种方式,我们都有一些新选项可用于推出具有特定功能的团队。希望作为基础的Graph方法很快就会出现在预览版中,因此可以在生产解决方案中使用此方法。