文章最后更新于2020年05月05日
一家成长中的公司一直在使用Microsoft Dynamics CRM on-premises,与他们的ERP(Dynamics NAV)、SharePoint和一个会计系统集成。当然,他们看到了转移到D365在线和Azure云的好处。但是,微软并没有提供一个实用的解决方案来将Dynamics CRM的内部数据库与Dynamics 365在线同步。""",如果微软不帮忙,他们如何与Dynamics 365同步数据? 这是他们连接Dynamics 365数据库的解决方案。
将Dynamics CRM On-prem移动到D365在线上
虽然仍有可能有一个 Dynamics 365内部部署,从微软Dynamics CRM内部迁移到Dynamics 365在线,对现在大多数公司来说似乎更有吸引力。
当他们考虑Dynamics 365在线与内部的时候,他们看到了 Dynamics 365在线的软件即服务(SaaS)模式带来了明显的优势。
所以,将企业内部的数据库同步到Dynamics 365网上应该很容易吧?
理想情况下,如果要从Microsoft Dynamics CRM On-Premise迁移到D365在线,你就可以直接将数据从本地的Microsoft Dynamics CRM SQL数据库后台转移到远程的Microsoft D365 SQL数据库。而如果碰巧你已经有了D365,想把Dynamics 365内部迁移到网上,应该就更简单了。
然而,在实际操作中,却不是那么简单。
从微软搬到Dynamics 365网上能得到什么?
目前,为了帮助客户部署微软云解决方案,微软通过FastTrack页面提供支持。拥有符合条件的Microsoft 365、Dynamics 365或Azure订阅的客户,可以在其订阅期内免费使用FastTrack(文章末尾的链接)。 你需要检查你正在尝试迁移的东西的当前资格标准。微软有时以座位数为基础,有时以收入为基础。
2019年4月,微软还发布了 "Microsoft Dynamics CRM on-premises to Dynamics 365 Online Migration",这是一份长达45页的PDF文档,描述了你需要做的事情(文末有下载链接)。在这份文档中,他们坦言:"直到最近,还没有任何机制可以让客户轻松地将其内部部署转移到Dynamics 365(在线)。"
与在线数据库同步的问题。
您认为理想的解决方案是找到一个Dynamics 365数据库与您的Dynamics CRM on-prem同步。
问题是,一般来说,将SaaS服务的后端数据库暴露给外界被认为是不好的做法,会带来相当大的安全风险。因此,微软不提供对D365在线的后端数据库的访问。相反,为了与D365在线进行数据交互,微软提供了官方的API服务。
API服务带来的好处是不破坏内部业务规则和约束。通过这种方式,API服务确保客户端应用程序不会妨碍性能。此外,它们还有助于维护后端数据库的数据完整性和一致性。
开发通过API操纵数据的过程需要编程技巧和时间。特别是,需要时间去研究文件,以设置正确的参数,并对这些接口提供的方法或功能进行适当的调用。
如果你可以简单地利用你的SQL技能,并与D365 API进行交互,就像你与普通的DBMS(数据库管理系统)一样,会怎么样呢?
如果你能让Dynamics 365与SQL Server Management Studio同步数据库就好了?
从本地DBMS或任何客户端应用程序连接到D365在线。
欢迎来到 ■▄D365 Database Sync Solution!这是一个将企业内部数据库同步到D365云端的具体解决方案。它基于Connecting Software的集成平台Connect Bridge。
Connect Bridge 将ANSI标准SQL语法翻译成适当的API调用。通过确保对数据的访问是通过API调用来完成的(虽然你不用担心),可以保证你的目标系统的完整性。另外,您还可以通过标准的SELECT、INSERT、UPDATE和DELETE语句与任何目标系统轻松通信。
因此,从你的本地DBMS或任何客户端应用程序,你可以在线连接到D365并将数据放入其中。
对于从Dynamics CRM on-prem迁移到D365在线的公司来说,当他们有整个流程针对on-prem SQL数据库编写的情况下,它是特别方便的。幸运的是,现在可以通过将Connect Bridge添加到他们的产品组合中来重用它们。
现在要举一个实际的例子了。
从任何数据库到Dynamics 365在线
在这个例子中,我们将使用微软著名的Adventure Works DW(Datawarehouse)数据库(在此下载).我们将演示如何轻松地将您现有的流程与 Microsoft Dynamics 365 Online (这里的信息)使用Connect Bridge平台。
如果您使用的是SSMS (SQL服务器管理工作室)来管理你的SQL Server数据库,你可以在对象资源管理器窗口中看到数据库的模式。

Connect Bridge平台 允许你通过连接器毫不费力地创建链接服务器连接到任何目标系统。有400多个连接器可供选择。我们将专注于Dynamics 365连接器。下面是CRM/ERP/会计领域的连接器的选择。

下面你可以找到已经在SSMS中创建的链接服务器连接。

需要注意的是,我们特意将链接的服务器连接命名为 """。D365_CRM.而且,通过展开TreeView中的目录节点,我们可以看到Dynamics 365提供的整个模式,就像访问传统数据库一样。
有了这一点,你就可以创建任何类型的集成或利用可用性定制任何现有的流程。
On-prem对D365云同步解决方案的适用性
现在,你可能想知道:为什么我首先要这样做?
以下是两种常见的情况,你可能会有所体会。
情景1:
我在一家使用Microsoft Dynamics CRM On-Premises的公司工作,我们正在向Microsoft Dynamics 365 Online迁移。我们有几个集成直接从我们的SQL Server数据库到Microsoft Dynamics CRM On-Premises的SQL Server数据库。
但是,我无法直接连接微软Dynamics 365在线数据库。
情景2:
我在一家公司工作,该公司有一个专有的ERP系统,以SQL Server数据库作为后台。我们决定采用微软Dynamics 365 CRM作为我们的客户关系管理系统。
我们希望能够以一种自动的方式将ERP系统中的现有数据填充到CRM中,并保持双方的一致性。
手动操作似乎几乎是不可能的,因为我们讨论的是每个实体(账户、联系人、产品等)的数万条记录。此外,使用SQL语言(结构化查询语言)工作也很方便。
但是,我们对其他编程语言和框架(C#、Web API、Rest Services等)没有深厚的经验。
值得庆幸的是,以上的答案都是否定的。这时,上面例子的用法可能就会响起了。
通过所介绍的方法,您可以大规模地利用您现有的技能和流程。
你还不服气吗?还不快来看看下面的步骤示例?
从冒险工程数据库表DimCustomer中填充Dynamics 365在线账户。
准备工作
创建以下触发器:
–*****************************************************************************
CREATE TRIGGER [dbo].[OnDimCustomerInsert] ON [dbo].[DimCustomer] AFTER INSERT
AS
BEGIN
SET NOCOUNT ON
DECLARE @SQL VARCHAR(255)
DECLARE @AccountId VARCHAR(255)
DECLARE @FirstName VARCHAR(255)
DECLARE @LastName VARCHAR(255)
DECLARE @MiddleName VARCHAR(255)
SELECT @FirstName = [FirstName],
@LastName = [LastName],
@MiddleName = [MiddleName]
FROM INSERTED;
SELECT @SQL = FORMATMESSAGE(‘INSERT INTO ACCOUNT (Name) VALUES(”%s”); SELECT SCOPE_IDENTITY();’,
@FirstName + ‘-‘ + ‘-‘ + @LastName)
CREATE TABLE #AccountId(ID VARCHAR(255))
INSERT #AccountId
EXEC(@SQL) AT D365_CRM
SELECT @AccountId = ID from #AccountId
UPDATE DimCustomer SET CustomerAlternateKey = @AccountId where FirstName = @FirstName and MiddleName = @MiddleName and LastName = @LastName
PRINT @FirstName + ‘ ‘ + @MiddleName + ‘ ‘ + @LastName;
END
–*****************************************************************************
CREATE TRIGGER [dbo].[OnDimCustomerUpdate] ON [dbo].[DimCustomer] AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @SQL VARCHAR(255)
DECLARE @AccountId VARCHAR(255)
DECLARE @FirstName VARCHAR(255)
DECLARE @LastName VARCHAR(255)
DECLARE @MiddleName VARCHAR(255)
SELECT @AccountId = [CustomerAlternateKey],
@FirstName = [FirstName],
@LastName = [LastName],
@MiddleName = [MiddleName]
FROM INSERTED;
SELECT @SQL = FORMATMESSAGE(‘UPDATE ACCOUNT SET Name=”%s” WHERE ACCOUNTID=”%s”’, @FirstName + ‘-‘ + ‘-‘ + @LastName, @AccountId)
EXEC(@SQL) AT D365_CRM;
PRINT @FirstName + ‘ ‘ + @MiddleName + ‘ ‘ + @LastName;
END
你的SSMS对象资源管理器窗口现在应该包含以下两个新的触发器。

打开您的Dynamics 365在线实例,导航到销售->账户模块。

测试。
在SSMS中打开一个新的查询窗口并粘贴以下内容。
INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values (‘ABC Technology’, ” ,‘GMB’, ‘CT0001’);
INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values (‘Billy Charity’, ” ,‘SA’, ‘CT0002’);
INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values (‘Tom Cat’, ” ,‘ORG’, ‘CT0003’);
SELECT * FROM DimCustomer WHERE FirstName = ‘ABC Technology’;
SELECT * FROM DimCustomer WHERE FirstName = ‘Billy Charity’;
SELECT * FROM DimCustomer WHERE FirstName = ‘Tom Cat’;
在SSMS中按F5或执行按钮运行脚本。
现在你应该有3条额外的记录插入到DimCustomer表中。

导航回到你的Dynamics 365销售->账户,刷新屏幕。找到了!

Dynamics 365中新增了3个账号,很酷吧?
但是等一下,在表DimCustomer中,字段CustomerAlternateKey有一个奇怪的数字。这不是我们一开始插入的值。
而我们却在Dynamics 365中生成了账户的唯一ID。这怎么可能呢?
如果你仔细观察触发器OnDimCustomerInsert,你会注意到SELECT SCOPE_IDENTITY();是负责返回将用于更新表DimCustomer的账户id。
这对于在Dynamics 365中对现有账户进行更新至关重要,当表DimCustomer中的记录发生变化时。
为了证明我们的观点,更新在SSMS中执行以下代码创建的记录。
在对3个账户执行更新后,这里是Dynamics 365的结果。
UPDATE [AdventureWorksDW].[dbo].[DimCustomer] SET LastName = ‘LTD’ WHERE CustomerAlternateKey = ‘account(9a1bc5cb-6ad7-e811-a96f-000d3a2cb90b)’;
NOTE: REPLACE THE STRING account(9a1bc5cb-6ad7-e811-a96f-000d3a2cb90b) WITH THE VALUES GENERATED IN YOUR ENVIRONMENT.

真好!
结论
上面的例子非常简单,但是,我们不难想象出这样的做法的好处。
就这样吧希望你能喜欢。
如果您有意见、建议,请写在下面的空白处,我们会尽快回复。
希望您在使用Connect Bridge平台的过程中,能像我写这篇文章一样开心。
文章最后更新于2020年05月05日

Ana Neto
Connecting Software的技术顾问"""。
作者:
我从1997年开始做软件工程师,最近比较喜欢写作和公开演讲。 您对本篇文章或对Connect Bridge有什么疑问或意见? 我很希望得到您的反馈!
撰稿人: 杰斐逊高桥健治,MBA
评论 3
谢谢你的信息!
看起来很有趣--业务规则的执行情况如何? 例如,我们需要从我们的POS机(SQL表中的数据)获取交易到业务中心--那么销售涉及到D365中不存在的客户和/或产品的用例呢?
作者
嗨,保罗。
如果你能从你的POS机的SQL表中获得数据,并且它遵循一个你能理解的结构,那么你可以使用 Connect Bridge 来将所有的东西都放到Business Central中。如果销售涉及的客户和或产品在D365中并不存在,你需要决定怎么做,例如,你可以使用一个通用的客户或产品,或者你可以在飞行中创建新的客户或产品。
我们将通过您指定的电子邮件与您联系,与您探讨这个方案。
Ana Neto