嗨,各位。近期项目一直都非常忙,而且自己也一直在思考职业发展的问题,所以有非常长一段时间没静下心写几篇Blog了。近期我參与的项目是Dynamics CRM 2011 到 Dynamics CRM 2013 Online的数据迁移,刚好接着今天这个机会和大家分析一下数据迁移的心得吧。
读过我之前文章的朋友肯定记得我把Dynamics CRM的接口分为了两大类:1)功能接口,2)数据接口。今天要说的数据迁移能够理解为数据接口,实现数据接口的方式有非常多种,比方C#制作的程序,数据库层的SQL 脚本,以及今天我要和给大家介绍的主角SQL Server Integration Service(SSIS)。
为什么要使用SSIS呢?肯定是简单了,SSIS提供了功能丰富的控件给我们使用,比方:FTP控件,Excel控件,以及大量五花八门的控件以及第三方组件。回到今天我们的话题,怎样使用SSIS实现Dynamics CRM 2011 与 Dynamics CRM 2013之前的数据迁移呢?我们有两种方案可选:1)使用Script Component编写Proxy来处理Dynamics CRM数据的CRUD操作,2)使用第三方的Dynamics CRM Component实现Dynamics CRM数据的CRUD操作。
这里就要依据项目情况来进行把控了,假设数据量不是非常多,且数据结构简单,当然是用ScriptComponent了,反之则是第三反的收费组件,比如:Cozyroc, SSIS Integration Toolkit for Dynamics CRM。顺便提下,第二个组件是又咱们的Denical Cai开发的。
在数据迁移的过程中,最麻烦的事情还是处理特殊结构的实体,比如活动类型的实体Service Appointment,以及包括Party List 控件的Opportunity实体。对于这些实体我们须要做额外的数据处理,当然还是能实现的。接下来介绍几个在制作SSIS Pacakge中比較实用的方法吧:
1. 将SSIS Project 的WorkOffline设置为False: SSIS Menu-->Work Offline
2.使用数据源的Expressions设置晚期绑定数据源连接信息
3.能够使用Package Level Variable 和 Project Level Variable 保存一些重要的验证信息
4.假设Package常常出现死锁,能够将Package的TransactionOption设置为NotSupported。以及改动IsolationLevel设置。
大致就是以上几点,希望对大家有帮助,假设给位有好的建议欢迎和我交流。 :)