2017年12月14日,星期四

演讲台–适用于Office 365 / SharePoint开发人员的Azure最佳实践

这是第2篇,共2篇,用于发布幻灯片I’最近,特别是在都柏林举行的2017年欧洲SharePoint会议上,我们给出了这些建议。也可以看看:

演讲台–SPFx开发中的陷阱

与我的其他文章一样,幻灯片平台也嵌入在该文章的底部。那里’我无法轻松地演示这些演示,但希望幻灯片本身具有一些很好的参考信息。当您开始考虑甚至在Office 365 / SharePoint的轻量级扩展中的某些不同情况时,它’很明显,Azure有多么有用:

什么? 怎么样?
按计划做某事 将代码放入Azure Web作业/功能
构建应用程序(Office 365应用程序/ SP提供程序托管的加载项) 将应用程序文件部署到Azure应用程序
SharePoint网站配置 将PnP合作伙伴包(或带有某些调用代码的PnP Core)部署到Azure
单击按钮运行代码 使用Azure函数+ JavaScript
存储不适合SP列表的数据 使用Azure SQL数据库
为我的应用存储文件 使用Azure BLOB存储(和CDN,如果适用)
实施SharePoint Web挂钩 使用Azure队列和功能
在自定义Web应用上实施身份验证 实施Azure Active Directory(AAD)身份验证

突出显示的场景是我演示的场景’d,最后一个实际上是我们构建的一个实际解决方案的演示,该解决方案涉及队列,Web作业,BLOB存储,CDN等。

否则,主要主题是:

  • Azure Web应用程序
    • 您可能在这里忽略了许多很酷的功能,包括 部署槽生产测试。换句话说,它’这比您自己托管IIS时可能获得的简单Web托管要好得多。
    • 在此处部署文件的多种方法–从Kudu界面(类似于将文件拖放到SharePoint文档库中),从Visual Studio发布,到WebDeploy以及从源代码控件(VSTS,GitHub等)自动同步
  • Azure App见解
    • 另一个unsung hero of Azure? I’ve最近在几篇文章中对此进行了讨论,包括 使用Azure App Insights跟踪应用程序/ Web部件/配置代码中的事件。我喜欢这样的想法:找出某个特定Web部件的运行频率,或者在您的应用程序中单击某个特定的选项卡– 和 it’将此类内容适当放置也非常简单。 App Insights还具有出色的工具,可通过类似SQL的方式查询日志以及配置警报(例如,从客户端加载首页是否需要5秒以上的时间)。看一看!
  • Azure功能
    • 如果你’一个Office 365开发人员’我还没有在Azure函数中实现一些代码’只是时间问题:)我有一张幻灯片可以与Azure Web作业进行比较,但是整体功能可以在更多场景中使用–包括在Web部件或PowerApp中单击按钮之类的内容,或者可能是从Flow或Site Designs模型中调出用于站点配置(通过队列触发器)
    • 我还讨论了在现实世界中通常应如何使用AAD身份验证保护Azure函数。我演示’d一个SPFx Web部件,它使用SPO cookie auth替代adal.js或类似版本–这对(adal.js)的当前安排有一些好处,包括以下事实:同一页面上的多个Web部件没有’无需单独登录
    • It’同样值得了解的是,Visual Studio函数工具已经取得了多大的进步。当然,如今,VS Code在许多编码场景中都是很酷的孩子,但是对于C#函数,我觉得VS 2017实际上更强大– some info on this:
      Azure功能的COB选项-CSharp
  • Azure SQL数据库
    • 这里的主要要点是停止在SharePoint中存储应该以SQL格式存储的内容:) SP开发人员’接触SQL多年不应该’不要害怕Azure SQL– it’非常容易上手,您可以免费运行最大20GB的数据库
    • 另外,请注意,SQL世界中的身份已针对云进行了更新。现在,您可以使用Azure Active Directory帐户进行身份验证,包括通过SQL Management Studio和Visual Studio Server Explorer之类的工具进行身份验证。
  • ARM模板
    • ARM模板为Azure门户中的许多按钮单击和手动配置提供了替代方法–非常适合将要部署到多个Office 365租户/ Azure订阅中且需要重复性的事物
  • Azure队列(和触发器)
    • 队列是支持您可能在代码中完成的工作的重要构建块。每当您需要一些分隔或长时间运行的处理时,使用队列通常是一个不错的模式–一件事将某些东西放在队列中,而称为QueueTrigger的东西则指向执行长时间运行的代码(例如,创建SharePoint网站)。如前所述,用于站点置备的新站点设计模型将使用此模型,SharePoint Web挂钩也将使用此模型。
    • 就您的代码而言,Azure Functions和Azure Web作业很常见–都可以像您期望的那样使用QueueTrigger

和以前一样,希望这里有一些有用的块对您有用!

    滑轨:

    2017年12月5日,星期二

    演讲台–SPFx开发中的陷阱

    这是第2个帖子中的第1个,用于发布幻灯片I’最近,特别是在都柏林举行的2017年欧洲SharePoint会议上,我们给出了这些建议。也可以看看:

    演讲台–适用于Office 365开发人员的Azure最佳实践

    不幸的是,我从不认为幻灯片会传达会议会议的所有信息,因为’演示通常是最有价值的部分。尽管如此,我还是尝试组装具有有用参考信息的幻灯片,因此希望对某些人有用。完整的幻灯片平台从SlideShare嵌入在本文的底部。我在这里讨论的主要主题是:

    • 版本和依赖性问题
      • 需要确保您使用 - 保存 要么 -精确保存 当添加库 npm安装 (以便将它们记录在您的package.json文件中,并且团队中的其他开发人员可以从源代码控制成功构建)
      • 语义版本控制,包括版本号中的插入符号和代字号
      • 需要跑步 npm收缩包装 每个版本的代码
      • [注意–npm 5中的某些更改会自动执行 - 保存 在进行安装时,还会自动生成一个 package-lock.json 文件(类似于 npm-shrinkwrap.json。但是目前,SharePoint Framework(SPFx)尚未正式支持npm 5,因此,这些要点仍然很重要)
    • 重用现有的JavaScript代码
      • 如果尚未将此类代码包装在模块中,则可以选择–这在TypeScript / JavaScript中提供了更正式的共享代码(例如库代码)的方法
      • 有了模块后,您可以查看以下选项 npm安装 [文件路径], npm连结 要么 使用由提供的私有托管npm存储库 npm私人套餐 要么 Visual Studio Team Services程序包管理
    • Office UI结构
      • 使用Fabric Core和Fabric React组件–从SPFx 1.3.4版开始,使用Core样式要简单得多, sp-office-ui-fabric-core 包被引用,并且SCSS样式使用mixins来引用自定义样式中的样式
      • 使用Fabric React组件时,通常应确保使用 静态的 链接您的导入语句,例如 import { Button, ButtonType } 从 'office-ui-fabric-react/lib/Button';
      • 看到 在SharePoint Framework中使用Office UI Fabric Core和Fabric React 有关此的更多信息
    • 调用Microsoft Graph和/或自定义API(例如Azure函数)
      • 所有这些资源都有可能通过AAD获得保护
      • GraphHttpClient 目前用途有限。
      • ..所以您很可能需要 adal.js 如果是从客户端致电,或者 ADAL.NET 如果从服务器端调用
      • 自定义Web API / Azure函数的adal.js的替代方法是一种利用SharePoint Online身份验证cookie将凭据传递到您的API的方法(使用 “credentials”: “include” 标头以跨域传递)–我认为这是一种有用的方法,我的一个演示对此进行了介绍(视频位于 //www.youtube.com/watch?v=Nz9Q8TDgYtk&t=5s)
      • 我使用这张幻灯片概述了这两种方法:

        图片
      • 另请注意,很快,可以通过指定其他AAD应用程序注册来调用您的自定义API,这些注册可以从SPFx调用而无需额外的同意。这将大大简化操作,这意味着您的SPFx Web部件/扩展不再需要登录按钮/过程即可调用下游资源。
    • 部署方式
      • 请记住,默认的SPFx行为适用于您添加的任何第3方库 捆绑到您的Web部件中 –这会增加捆绑包的大小,当您有多个Web部件/扩展都使用同一个库时,这可能是一个特殊的问题(而Office UI Fabric可能是其中的罪魁祸首!)
      • 另一个“by default”要记住的是,您构建的每个Web部件/扩展都可以获取它’s own bundle – the config.json 文件是什么控制
      • 在可能的情况下,应将第三方库外部化为CDN。
      • ..如果不是’t possible, consider SPFx组件包 作为一种避免在所有Web部件之间复制库的方法。如果页面上有5个Web部件都使用相同的库,则’第一次页面加载会降低外部性或使用组件包的性能

    希望在那里’这里有一些有用的信息,而我’在以后的文章中,最有可能在这些方面进行扩展。这里’s the slide deck:

    滑轨: