数据导出服务

 

发布日期: 2017年1月

适用于: Dynamics 365 (online)

“数据导出”是一项以 Microsoft Dynamics 365 (online) 解决方案形式提供的加载项服务,用于增加将 Dynamics 365(在线) 数据复制到客户拥有的 Microsoft Azure 订阅中的 Microsoft Azure SQL 数据库存储的功能。 支持的目标为 Microsoft Azure 虚拟机中的 Microsoft Azure SQL 数据库和 Microsoft Azure SQL Server。 数据导出最初智能地同步整个 Dynamics 365 架构和数据,然后随着 Microsoft Dynamics 365 (online) 系统发生更改(增量更改)持续同步。

数据导出服务提供一个界面,用于从 Dynamics 365(在线) 内部管理此服务的配置和持续管理此服务。 有关详细信息,请参阅 TechNet:数据导出。 本主题介绍此服务的相应编程接口和问题。

使用数据导出服务的先决条件

由于此服务需要从 Dynamics 365(在线) 访问外部 Microsoft Azure SQL 数据库,所以必须先满足一些先决条件,才能成功访问此服务。TechNet:使用数据导出服务的先决条件一节中从管理员的角度更全面地介绍了以下先决条件。

必须配置 Dynamics 365(在线) 服务,以便:

  • 必须具有带原始或完整数据副本的 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 或更高版本实例。 有关详细信息,请参阅复制实例

  • 为将导出的实体启用更改跟踪。 有关详细信息,请参阅使用更改跟踪将数据与外部系统同步

  • 代码在拥有系统管理员安全角色的用户的上下文中运行。

备注

请注意,此服务的编程访问需要安装关联的数据导出托管解决方案。

必须配置目标 Azure SQL 数据库,以便:

  • 预订必须支持正在从 Dynamics 365 实例复制的数据量。

  • 防火墙设置必须允许从您的数据导出服务的 IP 地址访问。 有关详细信息,请参阅Microsoft Azure:使用 Azure 门户配置 Azure SQL 数据库服务器级防火墙规则

  • 建议启用“允许访问 Azure 服务”选项。

  • 数据导出连接字符串中指定的数据库用户必须拥有目标数据库的正确创建和更改权限。 至少包括 :CRTBCRTYCRVWCRPRALUS。 有关详细信息,请参阅权限(数据库引擎)

  • 至少一位用户拥有架构的广泛权限。 下面的脚本创建这样的新用户。

USE MASTER;
CREATE LOGIN NewUser WITH PASSWORD='newpassword';

USE DESTINATIONDATABASE;
CREATE USER NewUser FOR LOGIN NewUser
GRANT CREATE TABLE, CREATE TYPE, CREATE VIEW, CREATE PROCEDURE, ALTER ANY USER to NewUser
GRANT ALTER, REFERENCES, INSERT, DELETE, UPDATE, SELECT, EXECUTE ON SCHEMA::dbo TO NewUser

对于在线解决方案和服务,Azure 提供密钥保管库服务,用于保护加密密钥、密码和其他密钥。 若要使用 Azure 密钥保管库,必须配置这个归客户所有的服务,以便将权限授予“Dynamics 365 数据导出服务”,后者用于安全地存储 SQL Azure 连接字符串。 若要使用 PowerShell 脚本执行此配置,请参阅 TechNet:如何设置 Azure 密钥保管库。 此服务也可以通过其 REST API 管理;请参阅密钥保管库管理

我们还建议您将域 https://discovery.crmreplication.azure.net/ 添加到浏览器中的可信站点列表和启用此站点的弹出窗口。

数据导出服务的编程

数据导出服务提供一个基于 REST 的 API,该 API 拆分为两个组:一组 Metadata 操作,用于探索 Dynamics 365 组织结构、关系和连接信息,一组 Profiles 操作,用于配置和管理每个数据复制。 下面的 Swagger URL 中对此 API 进行了全面的定义和介绍:

Swagger 终结点

说明

https://discovery.crmreplication.azure.net/swagger/docs/2016-01-01

供开发人员工具和动态流程使用的数据服务 API JSON 定义

https://discovery.crmreplication.azure.net/swagger/ui/index#

此 API 供开发人员参考的用户友好版本

API 快速参考

为了方便读者,下面的表中总结了这些接口。

元数据操作 (https://discovery.crmreplication.azure.net/crm/exporter/metadata/)

资源

方法

说明

组织

GET

获取当前用户所属所有组织的组织详细信息

发现

GET

获取指定组织的组织详细信息

connector

GET

获取指定组织的连接器详细信息

实体

GET

获取指定组织的所有可导出公共实体

关系

GET

获取指定组织的所有可导出关系

hasorgacceptedprivacyterms

GET

检查关联的组织是否已接受隐私条款

acceptprivacyterms

POST

接受指定的组织以访问数据

配置文件操作 ([Organization-URI]/crm/exporter/)

资源

方法

说明

profiles

GETPOST

获取指定组织的所有配置文件,创建一个新的导出配置文件

profiles/{id}

GETPUTDELETE

获取、更新、删除特定配置文件

profiles/{id}/activate

POST

激活配置文件,用于开始复制关联的元数据和数据

profiles/{id}/activatemetadata

POST

激活配置文件以仅复制元数据

profiles/{id}/activatedata

POST

激活配置文件以仅复制数据

profiles/{id}/deactivate

POST

停用配置文件

profiles/{id}/test

GET

对现有配置文件执行测试操作

profiles/validate

POST

创建配置文件说明之前对其执行测试操作

profiles/{id}/failures

GET

获取包含指定配置文件的失败详细信息的 blob 的连接字符串

Gain Access

由于仅为 Dynamics 365 系统管理员授予了执行数据导出操作的权限,所以这些 API 通过使用 Azure Active Directory (AAD) 安全标记 实施调用方授权。 以下代码片段演示通过使用管理员的名称和密码为 Web 应用程序生成此类标记。 必须将 AppIdcrmAdminUsercrmAdminPassword 替换为适合您的服务的值。 此方法可用于开发和测试,但是应对生产使用更安全的方法,如使用 Azure 密钥保管库。

//Reference Azure AD authentication Library (ADAL)  
using Microsoft.IdentityModel.Clients.ActiveDirectory;
   . . .
    string yourAppClientID = "[app-associated-GUID]";   //Your AAD-registered AppId 
    string crmAdminUser = "admin1@contoso.com";  //Your CRM administrator user name
    string crmAdminPassword = "Admin1Password";  //Your CRM administrator password; 
    //For interactive applications, there are overloads of AcquireTokenAsync() which prompt for password. 
    var authParam = AuthenticationParameters.CreateFromResourceUrlAsync(new 
        Uri("https://discovery.crmreplication.azure.net/crm/exporter/aad/challenge")).Result;
    AuthenticationContext authContext = new AuthenticationContext(authParam.Authority, false);
    string token = authContext.AcquireTokenAsync(authParam.Resource, yourAppClientID, 
        new UserCredential(crmAdminUser, crmAdminPassword)).Result.AccessToken;

有关如何获取 AppId 的说明,请参阅使用 OAuth 2.0 和 Azure Active Directory 授予 Web 应用程序的访问权限。 有关 Azure 用户安全的详细信息,请参阅 Azure AD 的身份验证方案

错误处理和故障处理

正确配置配置文件之后,同步过程的可靠性通常非常高。 但是,如果无法同步记录,则可以采用以下故障处理。

  1. 配置的重试时间间隔过去后,又可以重新尝试同步记录。 可以重复执行此过程,直到达到配置的最大重试次数。

  2. 记录标记为已处理。

  3. 一条相应的故障记录条目写入错误日志。

  4. 处理下一条记录。

因为记录标记为已处理,所以将来无需再尝试同步该记录,直到其值或架构更改。 (请注意,将相同值写回实体实例也会将其标记为已修改。)

错误日志中的条目为只读条目。 同一条记录将来同步成功或失败都不会导致更改此记录过去的条目。 例如,失败条目将保留在错误日志中,即使该记录在以后某个同步周期中成功同步后也不例外。

注意

在此服务将来的版本中,该错误处理逻辑可能更改。

可以通过获取给定配置文件的失败详细信息请求检索这些失败条目。 响应返回 Azure blob(其中包含失败信息)的 URI。 每行都有以逗号分隔的以下字段(为了阐述清楚,所以添加了换行符):

Entity: <entity-name>, 
RecordId: <”N/A” | guid>, 
NotificationTime: <datetime>, 
ChangeType: <sync-type>,
FailureReason: <description>

例如:

Entity: lead, 
RecordId: N/A, NotificationTime: , ChangeType: Trigger Initial Export, FailureReason: There is already an object named 'hatest201_lead' in the database.
Entity: account, RecordId: b2a19cdd-88df-e311-b8e5-6c3be5a8b200, NotificationTime: 8/31/2016 6:50:38 PM, ChangeType: New, FailureReason: Invalid object name 'dbo.hatest201_account'.

另请参阅

管理 Microsoft Dynamics 365 中的数据
导入数据

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权