生成第一个 Microsoft Graph Data Connect 应用程序
Microsoft Graph 数据连接通过智能方式大规模访问丰富数据,增强了 Microsoft Graph 的事务性模型。 这些数据涵盖员工如何在 Microsoft 365 中的所有应用程序和服务之间进行沟通、协作和管理时间。 数据连接是大数据和机器学习的理想选择,让你能够通过将 Microsoft 365 数据扩展到 Azure 来开发用于分析、智能和业务流程优化的应用程序。 通过以这种方式集成,你将能够利用 Azure 中的大量计算、存储套件,同时保持符合行业标准并确保数据安全。
Microsoft Graph 数据连接使用 Azure 数据工厂以可配置的时间间隔将 Microsoft 365 数据复制到应用程序的存储中。 它还提供了一组工具来简化向 Microsoft Azure 传送此数据的过程,让你可以访问最适用的开发和托管工具。 数据连接还授权更精细的控制和同意模型:你可以管理数据,查看谁正在访问数据以及请求实体的特定属性。 这增强了 Microsoft Graph 模型,其授予或拒绝应用程序对整个实体的访问权限。
可以使用 Data Connect 为组织启用机器学习方案。 在这些方案中,你可以创建应用程序来为利益干系人提供宝贵信息、训练机器学习模型,甚至根据采集的大量数据进行预测。
入门
在本教程中,你将创建第一个 Microsoft Graph Data Connect 应用程序。 令人兴奋,对吧? 我们也是这么想的! 若要开始,需要先设置一些内容。
先决条件
若要完成此实验室,需要以下订阅或许可证。
Microsoft 365 租赁
- 如果没有,可以通过注册 Microsoft 365 开发人员计划获得一个免费) (。
- 多个 Microsoft 365 用户,其中已发送和接收电子邮件。
- 至少访问满足以下要求的两个帐户:
- 必须分配 全局管理员 角色。
- 必须有权访问Microsoft 365 管理中心。
Microsoft Azure 订阅
- 如果没有,可以在 Azure 网站中免费) 一个 (。
- 用于登录的帐户必须向其授予 全局管理员 角色。
- Azure 订阅必须与 Microsoft 365 租户位于同一租户中,因为 Graph Data Connect 只会将数据导出到同一租户中的 Azure 订阅,而不是跨租户导出数据。
- Microsoft 365 和 Azure 租户必须位于相同的Microsoft Azure Active Directory租户中。
确保已在开发计算机上安装 Visual Studio 。
备注
此实验室中使用的屏幕截图和示例来自 Microsoft 365 测试租户,其中包含来自测试用户的示例电子邮件。 可以使用自己的 Microsoft 365 租户执行相同的步骤。 不会将任何数据写入 Microsoft 365。 电子邮件数据的副本从 Microsoft 365 租户中的所有用户中提取,并复制到一个Azure Blob 存储帐户,用于控制谁有权访问Azure Blob 存储中的数据。
设置 Microsoft 365 租户并启用 Microsoft Graph Data Connect
首次使用 Microsoft Graph Data Connect 之前,需要配置 Microsoft 365 租户。 这涉及到启用服务并配置有权批准数据提取请求的安全组。
向 Azure AD 用户授予全局管理员角色
在此步骤中,你将确保 Microsoft 365 租户中的两个用户已启用 全局管理员 角色。
配置 Microsoft Graph Data Connect 同意请求审批者组
在此步骤中,你将设置 Microsoft 365 租户以启用 Microsoft Graph 数据连接。
打开浏览器并转到Microsoft 365 管理门户。
在侧栏导航中,选择 “活动组”。
选择 “添加组 ”按钮。
使用以下命令创建 新的启用邮件 的安全组,然后选择 “添加 ”按钮。
- 类型:启用邮件的安全性
- 名称:同意请求审批者
- Email前缀:consentrequestapprovers
新创建的组 最多可能需要一个小时 才能显示在列表中。 创建组后,选择它。
再次转到 “活动组” 选项,搜索刚创建的组。
选择该组,然后在 “成员 ”选项卡中,选择 “查看所有”并管理成员。
将启用 全局管理员 角色的两个用户添加到此新组。
在 Microsoft 365 租户中启用 Microsoft Graph 数据连接
在此步骤中,你将在 Microsoft 365 租户上启用 Microsoft Graph 数据连接服务。
虽然你仍登录到Microsoft 365 管理门户,但 请选择“设置”>“组织设置” 菜单项。
选择 Microsoft Graph Data Connect 服务。
选中显示为 整个组织打开或关闭 Microsoft Graph 数据连接 以启用数据连接的复选框。
输入 同意请求审批者 (或之前在用户组中) 创建 的组的名称,以做出审批决策 并选择 “保存”。
设置 Azure Active Directory 应用注册
在本练习中,你将创建、运行和批准一个Azure 数据工厂管道,以便将数据从 Microsoft 365 提取到 Azure 存储 Blob 以进行其他处理。
创建Microsoft Azure Active Directory应用程序注册
第一步是创建一个 Azure AD 应用程序,该应用程序将用作运行数据提取过程的安全主体。
打开浏览器并转到 Azure 门户。
使用对 Azure 和 Microsoft 365 租户 具有全局管理员 权限的帐户登录。
在侧栏导航中,选择 Azure AD) (Azure Active Directory 。
在“Azure AD 概述”页上,从菜单的“管理”部分中选择 应用注册。
选择 “新建注册 ”按钮。
使用以下值创建新的 Azure AD 应用程序并选择 “注册”。
- 名称:Microsoft Graph 数据连接数据传输
- 支持的帐户类型:仅此组织目录中的帐户。
- 重定向 URI:保留默认值。
找到 应用程序 (客户端) ID 并根据本教程后面需要复制它。 这称为服务主体 ID。
找到 目录 (租户) ID 并将其复制,因为本教程稍后将需要它。 这称为租户 ID。
在侧栏导航中,选择“管理”下的 “证书和机密”。
选择 “新建客户端机密”按钮。 将 说明 设置为任何名称,将 Expire 设置 为下拉列表中的任何值,然后选择 “添加”。
- 创建客户端机密后,请确保将 值 保存到安全的位置,因为它以后将不再可用,并且需要创建新的值。
- 这会被引用为服务主体密钥。
在应用程序的侧栏导航中,选择 “所有者”。
验证帐户是否被列为应用程序的所有者。 如果它未作为所有者列出,请添加它。
设置 Azure 存储资源
在此步骤中,将创建一个 Azure 存储帐户,其中 Microsoft Graph 数据连接将存储从 Microsoft 365 提取的数据以供进一步处理。
打开浏览器并转到 Azure 门户。
使用对 Azure 和 Microsoft 365 租户 具有全局管理员 权限的帐户登录。
在侧栏导航上,选择 “创建资源”。
找到 存储帐户 资源类型并使用以下值创建它,然后选择 “查看 + 创建”。
- 订阅:选择 Azure 订阅
- 资源组:GraphDataConnect (或选择现有资源组)
- 存储帐户名称:mgdcm365datastore
- 区域:选择与 Microsoft 365 区域位于同一区域中的 Azure 区域
- 性能:标准
- 冗余:异地冗余存储 (GRS)
- 高级选项卡:
- 访问层:热
查看设置与上一步中显示的设置匹配,然后选择 “创建”。
创建 Azure 存储帐户后,向之前创建的 Azure AD 应用程序授予对该帐户的适当访问权限。
选择 Azure 存储帐户。
在边栏菜单 上,选择“访问”控件 (IAM)。
在 “添加角色分配”块中选择 “添加”按钮。
使用以下值查找之前选择的应用程序以授予其 存储 Blob 数据参与者 角色,然后选择 “保存”。
- 角色:存储 Blob 数据参与者
- 将访问权限分配给:用户、组或服务主体
- 选择:Microsoft Graph 数据连接数据传输 (之前创建的 Azure AD 应用程序的名称)
在 mgdcm365datastore Azure 存储帐户中创建新容器。
选择 mgdcm365datastore Azure 存储帐户。
在边栏菜单上,选择 “Blob 服务”部分下的 “容器”。
选择页面顶部的 “+容器 ”按钮并使用以下值,然后选择 “创建”。
- 名称:m365mails
- 公共访问级别:专用 (无匿名访问)
设置Azure 数据工厂资源
下一步是使用Azure 数据工厂创建管道,以使用 Microsoft Graph 数据连接将数据从 Microsoft 365 提取到 Azure 存储帐户。
创建Azure 数据工厂管道
打开浏览器并转到 Azure 门户。
使用对 Azure 和 Microsoft 365 租户 具有全局管理员 权限的帐户登录。
在侧栏导航上,选择 “创建资源”。
找到 数据工厂 资源类型并使用以下值创建它,然后选择 “创建”。
订阅:选择 Azure 订阅
资源组:GraphDataConnect
区域:选择与 Microsoft 365 区域位于同一区域中的 Azure 区域
名称:dfM365toBlobStorage
版本:V2
在 “Git 配置 ”选项卡中,确保配置 Git 或稍后选择“ 配置 Git” 选项。
创建Azure 数据工厂资源后,选择 “作者”和“监视器” 磁贴以启动Azure 数据工厂全屏编辑器。
从左侧导航中选择“ 概述 ”,切换到 “管理 ”体验。
默认情况下,Azure 数据工厂将使用自动解析区域的集成运行时。 由于 Data Connect 要求源和目标以及集成运行时存在于同一 Microsoft 365 区域中,因此建议创建具有固定区域的新集成运行时。
选择 “集成运行时新建 > ”。
选择 “Azure”、“自承载 ”并选择 “继续”。
选择用于网络环境的 Azure ,然后选择 “继续”。
使用以下详细信息在最终屏幕上完成窗体,然后选择 “创建”。
- 名称:集成运行时的名称
- 说明:输入说明
- 区域:选择与 Microsoft 365 区域匹配的区域
- 虚拟网络配置 (预览): 已禁用
从左侧导航中选择“ 管理 ”,切换到 “作者 ”体验。
选择 加号 图标,然后选择管道,创建新 管道。
将“移动和转换”部分中的 “复制数据”活动拖动到设计图面上。
在设计器中选择活动。
选择“ 常规 ”选项卡并为其提供名称和说明。
- 名称:CopyFromM365toBlobStorage
- 说明:所需的说明。
在设计器下方的活动编辑器窗格中,选择 “源 ”选项卡,然后选择 “新建”。
找到数据集 Office 365,选择它,然后选择 “继续”按钮。
设计器将使用 Microsoft 365 连接器设置更新 “源 ”选项卡。
选择 “源数据集”字段旁边的 “打开”选项。
在表设置中,选择 “连接 ”选项卡,然后选择 “新建 ”按钮。
在显示的对话框中,分别在 服务主体 ID 和 服务主体密钥 字段中输入以前创建的 Azure AD 应用程序 的应用程序 ID 和 机密 ID,然后选择 “创建”。
选择之前通过集成运行时 下拉列表在 Connect 中创建的集成运行时。
创建 Microsoft 365 连接后,对于 表 字段,选择 BasicDataSet_v0。Message_v0。
从 Office365Table 切换到 管道>源。 对 日期筛选器 使用以下值。
- 列名:CreatedDateTime
- 开始时间 (UTC):在当前日期之前的某个时间选择日期
- 结束时间 (UTC):选择当前日期
- 在“输出列”部分中选择“导入架构”。
在管道选项卡中选择 “复制数据 ”活动,然后选择“ 接收器 ”选项卡。
- 选择 “新建”按钮,选择 Azure Blob 存储,然后选择 “继续”按钮。
- 选择 二进制 文件作为数据的格式,然后选择 “继续 ”按钮。
- 为数据集命名 M365JsonFile ,并创建新的链接服务(如果尚不存在)。
在表中选择 “连接” 选项卡,然后选择 “新建”。
在对话框中设置以下值,然后选择 “完成”。
- 身份验证方法:服务主体
- Azure 订阅:全部选择
- 存储帐户名称:mgdcm365datastore
- 这是本练习前面创建的存储帐户。
- 租户:输入 Azure 租户的 ID
- 服务主体 ID:输入之前创建的 Azure AD 应用程序的 ID
- 服务主体密钥:输入之前创建的 Azure AD 应用程序的哈希键
在 “文件路径 ”字段旁边,选择 “浏览”。
选择之前创建的存储容器的名称。
创建管道后,选择设计器顶部的“ 验证所有 ”按钮。
验证 (并修复) 找到的任何问题后,选择设计器顶部的 “全部发布 ”按钮。
运行Azure 数据工厂管道
创建管道后,现在可以运行它了。
备注
可能需要几分钟时间才能显示同意请求,整个过程 (启动、请求同意以及批准同意完成管道运行后,这种情况并不少见,) 需要 40 多分钟。
在Azure 数据工厂设计器中,打开管道后,选择 “立即触发>添加触发器。
启动作业后,从边栏菜单中选择 “监视器 ”以查看当前正在运行的作业。
在左侧导航栏上,找到 “管道运行 ”选项卡并选择它。 选择 “管道名称 ”列下的管道以查看 活动运行。 此管道将显示为 “正在进行”。
进入 “活动运行 ”视图后,转到位于页面底部的“ 活动运行 ”部分。
将鼠标悬停在 活动名称 上,然后选择“护目镜”选项。 这将显示 “详细信息 ”选项卡。
在 “详细信息” 屏幕中,查找管道活动的状态,如下图中所示。 在这种情况下,可以看到它处于 RequestingConsent 状态。
此时,活动运行在内部暂停,直到有人通过Microsoft 365 管理中心或 PowerShell 手动批准同意请求。
使用 Microsoft 365 管理 Center 和 PowerShell 监视数据同意请求
Microsoft 365 管理员能够批准或拒绝同意请求。 这可以通过Microsoft 365 管理中心或通过 PowerShell 以编程方式完成。
批准同意请求
打开浏览器并转到Microsoft 365 管理门户。
若要批准或拒绝同意请求,请转到 Privileged Access。
选择挂起 的数据访问请求。
在 “数据访问请求 ”调用中,选择“ 批准 ”按钮。
验证从 Microsoft 365 提取到 Azure 存储 Blob 的数据
打开浏览器并转到 Azure 门户。
使用对 Azure 和 Microsoft 365 租户 具有全局管理员 权限的帐户登录。
在侧栏导航中,选择 “所有资源” 菜单项。
在资源列表中,选择之前在本教程中创建的 Azure 存储帐户 。
在边栏导航菜单上,从 Azure 存储帐户 边栏选项卡中选择 Blob。
选择之前在本教程中创建的 容器,该容器将Azure 数据工厂管道配置为提取数据的接收器。 现在应该会在此容器中看到数据。
创建 ASP.NET Web 应用程序来处理导出的数据
在本部分中,我们将生成第一个用于处理已导出的 Microsoft Graph Data Connect 数据的 ASP.NET 项目应用程序。
创建新的 ASP.NET 项目
打开 Visual Studio 并选择 “文件>”新建>项目。
在 “新建项目” 对话框中,执行以下操作。
在搜索框 中搜索 ASP.NET Web 应用程序,然后选择 ASP.NET Web 应用程序 (.NET Framework) 选项。
单击“ 下一步”。
输入 EmailMetrics 作为项目的名称。
选择 .NET Framework 4.7.2 作为框架选项。
选择“创建”。
重要
确保为此快速入门说明中指定的 Visual Studio Project 输入完全相同的名称。 Visual Studio 项目名称在代码中成为了命名空间的一部分。 在这些说明里的代码依赖于匹配在这些说明中指定的 Visual Studio 项目名称的命名空间。 如果你使用不同的项目名称,代码不会编译,除非你调整所有的命名空间来匹配你在创建项目时输入的 Visual Studio 项目名称。
- 在新的 ASP.NET Web 应用程序 项目对话框中,选择 MVC。
- 选择“创建”。
将 Azure 存储添加并配置为连接服务
在 解决方案资源管理器 工具窗口中,右键单击 “连接服务”节点,然后选择 “添加连接服务”。
在 “连接服务 ”对话框中,选择位于对话框右上角的绿色 + 标志。
在 “添加依赖项 ”对话框中,选择 “Azure 存储 ”,然后选择 “下一步”。
在 “Azure 存储 ”对话框中,选择在上一练习中导出数据的订阅和存储帐户,选择 “下一步”。
为 Azure 存储连接 提供 AzureStorageConnectionString 的名称,然后选择 “下一步”。
选择 “完成”。
创建用于存储电子邮件指标的新模型类
在 解决方案资源管理器 工具窗口中,右键单击 “模型”文件夹,然后选择 “添加>类”。
在 “添加新项 ”对话框中,选择 “类”,将文件的名称设置为 EmailMetric.cs ,然后选择 “添加”。
将以下代码添加到刚刚创建的类 EmailMetric。
public string Email; public double RecipientsToEmail;
创建将计算和显示结果的新控制器
右键单击 “控制器 ”文件夹,然后选择 “添加>控制器”。
在 “添加基架 ”对话框中,选择 “MVC 5 控制器 - 空 ”,然后选择 “添加”。
出现提示时,将控制器 命名为 EmailMetricsController ,然后选择 “确定”。
在包含 EmailMetricsController 类的文件顶部的现有 using 语句之后添加以下 using 语句。
using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Web.Mvc; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Newtonsoft.Json.Linq;
将以下代码添加到 EmailMetricsController 类。 这些数据将用于连接到包含导出数据的 Azure 存储帐户 。
private const string connectionStringName = "AzureStorageConnectionString"; private const string emailBlobName = "m365mails";
将以下方法添加到 EmailMetricsController 类。 这将处理 Azure Blob 并更新一个集合,该集合代表电子邮件帐户以及在为提取的帐户找到的所有电子邮件中合并了多少个收件人。
private async Task ProcessBlobEmails(List<Models.EmailMetric> emailMetrics, BlobClient emailBlob) { using (var stream = new MemoryStream()) { var response = await emailBlob.DownloadToAsync(stream); var pos = stream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(stream)) { string line; while ((line = reader.ReadLine()) != null) { var jsonObj = JObject.Parse(line); // extract sender var sender = jsonObj.SelectToken("Sender.EmailAddress.Address")?.ToString(); // No sender - skip this one if (string.IsNullOrEmpty(sender)) continue; // extract and count up recipients var totalRecipients = 0; totalRecipients += jsonObj.SelectToken("ToRecipients")?.Children().Count() ?? 0; totalRecipients += jsonObj.SelectToken("CcRecipients")?.Children().Count() ?? 0; totalRecipients += jsonObj.SelectToken("BccRecipients")?.Children().Count() ?? 0; var emailMetric = new Models.EmailMetric(); emailMetric.Email = sender; emailMetric.RecipientsToEmail = totalRecipients; // if already have this sender... var existingMetric = emailMetrics.FirstOrDefault(metric => metric.Email == emailMetric.Email); if (existingMetric != null) { existingMetric.RecipientsToEmail += emailMetric.RecipientsToEmail; } else { emailMetrics.Add(emailMetric); } } } } }
将以下方法添加到 EmailMetricsController 类。 这将枚举指定 Azure 存储 帐户指定容器中的所有 Blob,并将每个 Blob 发送到
ProcessBlobEmails()
上一步中添加的方法。private async Task<List<Models.EmailMetric>> ProcessBlobFiles() { var emailMetrics = new List<Models.EmailMetric>(); var connectionString = ConfigurationManager.ConnectionStrings[connectionStringName]; // Connect to the storage account var containerClient = new BlobContainerClient(connectionString.ConnectionString, emailBlobName); foreach (var blob in containerClient.GetBlobs()) { if (blob.Properties.BlobType == BlobType.Block && // Don't process blobs in the metadata folder !blob.Name.StartsWith("metadata/")) { var blobClient = containerClient.GetBlobClient(blob.Name); await ProcessBlobEmails(emailMetrics, blobClient); } } return emailMetrics; }
将以下操作添加到 EmailMetricsController ,该操作将使用添加此类的方法来处理电子邮件并将结果发送到视图。
[HttpPost, ActionName("ShowMetrics")] [ValidateAntiForgeryToken] public async Task<ActionResult> ShowMetrics() { var emailMetrics = await ProcessBlobFiles(); return View(emailMetrics); }
为 EmailMetrics 索引操作创建新视图
在 解决方案资源管理器 工具窗口中,右键单击 “视图”> EmailMetrics 文件夹,然后选择 “添加>视图”。
在 “添加新的基架项目” 对话框中,选择 “MVC 5 视图”,然后选择 “添加”。
在 “添加视图 ”对话框中,将 视图 名称设置为 索引,将剩余的输入控件保留为其默认值,然后选择 “添加”。
将新 视图> EmailMetrics > Index.cshtml 中的 标记更新为以下内容。 这会添加一个包含单个按钮的窗体,该按钮将 HTTP POST 提交到上一步中添加的自定义控制器操作。
@{ ViewBag.Title = "Index"; } <h2>Email Metrics</h2>
此应用程序将查看提取到 Azure Blob 存储 帐户的电子邮件的电子邮件数据,并显示每个发件人的收件人总数。
@using (Html.BeginForm("ShowMetrics", "EmailMetrics", FormMethod.Post)) { @Html.AntiForgeryToken() <div> <button type="submit">View email metrics</button> </div> <div> <em>Please be patient as this can take a few moments to calculate depending on the size of the exported data...</em> </div> }
为 EmailMetrics ShowMetrics 操作创建新视图
在 解决方案资源管理器 工具窗口中,右键单击 “视图”> EmailMetrics 文件夹,然后选择 “添加>视图”。
在 “添加视图 ”对话框中,设置以下值并将剩余的输入控件保留为其默认值,然后选择 “添加”。
视图名称:ShowMetrics
模板:列表
模型类:EmailMetric (EmailMetric.Models)
提示
如果在下拉框中看不到 EmailMetric 模型,请生成解决方案。
将新 视图> EmailMetrics > ShowMetrics.cshtml 中的标记更新为以下内容。 这将显示计算结果。
@model IEnumerable<EmailMetrics.Models.EmailMetric> @{ ViewBag.Title = "ShowMetrics"; } <h2>Email Metrics</h2> <table class="table"> <tr> <th>Sender</th> <th>Number of Recipients</th> </tr> @foreach (var item in Model) { <tr> <td>@Html.DisplayFor(modelItem => item.Email)</td> <td>@Html.DisplayFor(modelItem => item.RecipientsToEmail)</td> </tr> } </table>
更新导航以获得访问新控制器的方法
在 解决方案资源管理器 工具窗口中,找到并打开“共享> Layout.cshtml >文件视图。
用以下代码替换内容。
<!-- new code --> <li>@Html.ActionLink("Email Metrics", "Index", "EmailMetrics")</li>
测试应用程序
在 Visual Studio 中,选择 “调试>开始调试。
生成应用程序并在新的浏览器窗口中加载时,选择顶部导航栏中的 Email指标 项。
在 “Email指标”页上,选择“查看电子邮件指标”按钮。
加载页面时,你将看到在所有电子邮件中找到的电子邮件地址列表,其中包含两者之间发送的所有收件人的总和,如下图中测试电子邮件提取中的一个小示例集中所示。
恭喜!
你已完成 Microsoft Graph Data Connect 教程。 现在,你有了进一步试验 Data Connect 的起点。 首先可以查看我们的 文档。
你有关于此部分的问题? 如果有,请向我们提供反馈,以便我们对此部分作出改进。
反馈
提交和查看相关反馈