2017年8月17日,星期四

使用SPFx应用程序自定义程序将Azure App Insights或Google Analytics(分析)添加到您的SharePoint页面

Azure App Insights非常棒,可以帮助您了解网站或应用程序的使用方式,’在以后的文章中,将花更多时间在此上。现在,让’s从一个简单的案例开始–您想知道有多少用户访问您的SharePoint网站,哪些页面最受欢迎,用户所基于的国家等。我们可以使用以下方法将页面跟踪添加到现代SharePoint网站(无法自定义母版页来添加脚本)中的所有页面: SPFx应用程序定制程序 –以前,现代页面上的脚本是一个问题,但现在很容易实现。当然,可以使用相同的方法来添加Google Analytics(分析)或其他类似的跟踪脚本。但是,无论您使用什么脚本’重新添加您应该考虑:

  • 如果您的网站有 经典 也有SharePoint页面,SPFx App Customizer不会涵盖这些页面– you’为此,将需要一种单独的方法,例如使用“自定义操作”在其中添加脚本。 (注:这主要是仅针对发布网站或较早的团队网站–Office 365组网站,现代化的团队网站和交流网站只有现代化的页面。)
  • 随SPFx App Customizer添加的任何脚本也将出现在系统页面上,例如列表/库页面或“网站内容”页面。这可能很有用,因此您可以查看访问量最大的库,但是您可能会决定只使用真正的页面,然后添加几行代码来过滤掉这些页面– up to you.

无论使用哪种页面跟踪系统,要将其添加到现代SharePoint页面中,始终始终以创建SPFx应用程序自定义程序为起点。如果您需要入门指南,我在 使用SPFx应用程序自定义程序将JavaScript(例如标头)添加到网站中的每个页面 – in this post I’我们将重点介绍添加Google Analytics(分析)或Azure App Insights页面跟踪的特定代码段,然后再详细介绍App Insights。

整合Google Analytics

好,让’我们先把它弄清楚。对于GA,您只需要将脚本引用添加到页面–而且由于Google为您提供了一些JavaScript代码,因此动态添加某些脚本的经典方法就可以很好地工作(与使用可与外部脚本一起使用的SPFx模块加载器相反)。

可以在自定义程序的onInit()方法中执行此操作,因为Google的代码指定应异步加载脚本-因此浏览器不会仅出于分析目的而延迟加载页面。并不是说选择SPFX App Customizer的Render()方法反而会带来巨大的变化,但是在任何情况下,onInit()都可以很好地解决这一问题。

整合App见解

App Insights随附具有各种对象和方法的SDK(可以使用客户端SDK和服务器端SDK)-可以说,这比Google Analytics(分析)更容易添加。对于客户端Web应用程序(例如SPFx),存在’s an npm package (applicationinsights-js),因此一旦创建了SPFx应用程序自定义程序,您就可以开始使用:

npm i applicationinsights-js --save

在代码的顶部,您’然后,需要导入App Insights模块以使用它:

import {AppInsights} from "applicationinsights-js";

就像使用Google Analytics(分析)一样,其他第一步是确保您已设置服务。在这种情况下,您需要一个Azure订阅和一个App Insights资源-这将提供在代码中使用的跟踪ID:

SNAGHTML1e867b14

将为您的订阅中包含的任何Azure Web应用程序自动创建一个App Insights资源(例如,那里可能有一些Office 365应用程序或提供商托管的SharePoint加载项),但是如果这些都不适合,则应创建一个新的实例。拥有检测密钥后,所需的代码如下:

上面显示的代码赢了’将App Insights JS包含在您的捆绑软件中– the AppInsights.downloadAndSetup()method just references Microsoft’CDN上的JS。跟踪页面浏览量的核心方法很简单:

AppInsights.trackPageView();

现在,您可以使用Application Customizer选择是通过在现代页面的URL中添加参数,还是在调试模式下对其进行测试,或者将其打包以作为应用程序包进行实际部署,然后添加到您的身边(我以前的文章 详细介绍了这两种方法)。一旦代码执行完毕,’将在Azure门户中查看所有用户点击运行该行代码的页面的结果,现在您可以跟踪页面加载性能和其他情况。与其他分析软件一样,将记录有关用户的各种详细信息(位置,浏览器,设备等):

SNAGHTML19ce5502

SNAGHTML19d0667d

但是,当我们通过更改代码以在跟踪请求时传递更好的数据来提供帮助时,事情会变得更加有趣。可以使用的另一个重载是:

因此,您可以选择记录有关页面请求的一些有用信息:

  • 用户登录
  • 用户显示名称
  • 如果用户是外部用户

特别是我们可以使用‘dimensions’参数以传递此类数据。在SPFx中,该代码如下所示:

警告!

当然,请小心存储用户的个人身份信息(PII)!我仅将其用作完成操作的示例-但在现实生活中,您可能需要存储某种实际上不允许识别个人身份的用户令牌。

但是其他形式的用户信息呢?通过还从用户的Office 365 / SharePoint用户配置文件中获取一些数据,您可以回答以下问题:

  • 我的大多数用户来自哪个部门?
  • 我的大多数用户来自哪个地区?
  • 有多少导演/经理正在访问该网站/应用程序?

毫无疑问,还有许多其他可能性。不幸的是,除非您进行一些自定义的工作来将其放回原处,否则您会丢失页面持续时间的计时,并带有更详细的过载信息。–具体来说,编写一些代码来记录浏览器事件的计时,然后在上面的重载中使用final参数。如果这样做,请务必使用浏览器事件(例如load事件)而不是简单的秒表,因为在SPFx App Customizer中执行的代码当然只是整个页面加载的“一部分”。

但是现在,我已经跟踪了页面浏览量,并且可以在Azure门户中进行一些不错的分析。我可以在Metrics Explorer中创建一些图表(某些图表会自动生成),但Analytics(分析)工具功能更强大。这绝对不是’作为最终用户/站点所有者工具,但是,作为技术人员,我可以使用带有Intellisense样式自动完成功能的简单语法进行一些查询:

SNAGHTML19e93f15

(注:这些结果包括页面加载持续时间,因为它们使用了简单的重载)。

当您将自定义信息作为呼叫的一部分 trackPageView(), 默认情况下,“customDimensions” column as JSON:

SNAGHTML1aa6f52f

..但是’如果您想对其进行排序/过滤,效果不是很好。您可以使用“extend”App Insights查询中的关键字来解决此问题–因此,要展开我们之前记录的3个自定义数据位,我们可以使用:

pageViews |
where url !contains "workbench" | 
extend userLogin = tostring(customDimensions.userLogin), userDisplayName = tostring(customDimensions.userDisplayName), isExternal = tostring(customDimensions.isExternalGuest) 

..现在我们在单独的列中获取该数据:

SNAGHTML1ab5c82b

现在,您可以随心所欲地使用这些数据。

因此,总的来说,添加页面跟踪相对简单,您可以在移动时找到分析数据的最佳方法。重要的是首先使用默认的调用将其捕获 trackPageView() 或更高级的带有自定义数据的数据。

App Insights数据保留

    在这一点上’可能值得记住的是,App Insights只能保留90天的数据,因此’您可以在单个查询中分析的最长时间。但是,如果您需要更长的时间,可以进行设置 连续出口 复制数据(到Azure BLOB存储)并永久存储。使用它会略有不同,但是该页面上有详细信息。

    超越页面跟踪

    我在这里提到页面跟踪是因为’这是一个相对简单的案例,可与SPFx应用程序自定义程序很好地结合在一起。但是,我认为App Insights的其他用例也许更有趣。我*真正*认为有价值的是丢弃的想法 AppInsights.TrackEvent() 您的代码中的语句,无论是否’SPFx Web部件,自定义Web API,Office 365应用或提供程序托管的SharePoint加载项(例如MVC网站)。一世’我会在以后的文章中讨论这一点,但是我喜欢以下场景的想法:

    • 服务器端应用程序(Office 365 / SharePoint加载项)
      • 有多少次应用启动?由谁/在哪里?
      • 应用内发生了什么(例如,正在单击哪些按钮/正在使用哪些功能)?
    • SPFx /图
      • 我们的Web部件每天获得多少次执行?
      • 我的Web部件在客户端执行需要多长时间?
      • 我的异步调用需要多长时间(例如,到图表)?它们对世界各地的用户有何不同?
    • 供应代码
      • 我们每天/每周/每月创建几个站点?
      • 我们在配置期间遇到了多少次问题?
      • 置备需要多长时间?
    • 一般
      • 我们向用户显示错误消息多少次?

    当然,一旦您开始考虑,就有上百万种可能很容易追踪的东西。一世’在下一篇文章中将详细讨论跟踪事件。