В последнее время мы довольно часто участвуем в проектах по миграции из CRM 4 и CRM 2011 ON-PREMISE в CRM 2013 Online.
Имея уникальный опыт по миграции кастомизации и миграции данных , а также опыт миграции из CRM 4 в CRM 2011, мы решили найти лучший способ, как выполнить эти миграции для CRM 2013 и этот пост обобщает наш опыт.
Введение
Вся миграция может быть логически разделена на 2 этапа: миграция кастомизации и миграция данных.
Кастомизация в MS CRM представляет собой структуру базы данных (таблицы, которые используются для хранения данных ) и кода приложения, отвечающих за реализацию некоторой бизнес-логики. Если бизнес-логика должна работать на сервере, то она реализуется серверными плагинами CRM, настраиваемыми рабочими процессами или рабочими процессами. Если что-то должно быть сделано с пользовательским интерфейсом (например, некоторые элементы управления должны быть скрыты в зависимости от определенных условий), то такая логика реализуется с помощью JavaScript.
В то время как CRM онлайн не обеспечивает прямой доступ к основной базе данных, кастомизация сущностей (логически согласованных с таблицами в базе данных), как правило, легко мигрирует в CRM онлайн с помощью стандартных процессов импорта/экспорта даже для разных версий CRM. Однако изменения в API , предоставляемые Microsoft CRM SDK для разных версий CRM существенно различаются и необходимы реальные усилия, чтобы написать CRM код для CRM 4, работающего на CRM 2013.
Тем не менее, после того, как кастомизация была перенесена и весь код был обновлен, чтобы работать с новым API необходимо перенести данные из старой базы в новую, расположенную в облаке CRM онлайн .
Ниже мы детально рассмотрим оба эти этапа.
Процесс миграции
- Валидация CRM кастомизации, включая формы JavaScript, плагины и код настраиваемых рабочих процессов
- Воссоздание клиентского CRM в тестовой среде
- Кастомизация миграции в CRM 2013 без каких-либо данных
- Основная миграция данных с помощью CRM коннектора или сторонних инструментов (в том числе скрипты WaveAccess & C4CRM)
- Миграция стандартных сущностей, не перенесенных с помощью Microsoft CRM коннектора, используя наши скрипты или сторонние инструменты
- Разработка скриптов для настраиваемых сущностей и их миграция (В случае использования CRM коннектора на этапе 4)
- Сравнение отчетов по данным между CRM 2011 и CRM 2013, чтобы убедиться, что все было перенесено в соответствии с требованиями
- Ручное тестирование перенесенной системы
Процесс миграции в деталях
Валидация CRM кастомизации, включая формы JavaScript, плагины и код настраиваемых рабочих процессов
Здесь мы используем такие инструменты для Microsoft Dynamics CRM 2011/2013, как Custom Code Validation Tool для валидации JavaScript кода на стороне клиента и Microsoft Dynamics CRM SDK Legacy Feature Check Tool для быстрой валидации в случае если были использованы устаревшие точки входа или устаревшие интерфейсы в коде плагинов или же ссылки на устаревшие сборки из CRM4 SDK.
Примечание: В случае миграции из CRM 2011 в CRM 2013 часто бывает так, что код на стороне клиента будет работать в Internet Explorer , но не будет работать в других браузерах. Однако это может и не быть проблемой для клиента. В этом случае, после того, как валидация сделана, вопросы определены и обсуждены и минимальные исправления сделаны, мы переходим к следующему шагу.
Примечание: Первый шаг может быть выполнен в любой среде клиента (в идеале не на продакшене, однако, это не влияет на систему, и в случае, если клиент не имеет других сред, он может быть установлен на продакшен) . Этот шаг можно рассматривать как необходимое условие проекта , поскольку он имеет жизненно важное значение для оценки трудозатрат и бюджета соответственно. После того, как валидация выполнена, должно быть принято окончательное решение о реализации проекта.
Процесс валидации занимает несколько часов , и процесс оценки занимает около 4-8 часов, в зависимости от размера проекта .
Воссоздание клиентского CRM в тестовой среде
После принятия решения о реализации проекта, мы воссоздаем CRM клиента локально. Наличие среды идентичной к клиентской позволяет нам производить все подготовительные работы. На этом этапе мы запрашиваем базу данных CRM 2011 для организации, которая должна быть перенесена. Мы восстанавливаем базу данных в новую организацию и проверяем, что функциональность работает, прежде чем начинать обновления связанных изменений.
Кастомизация миграции в CRM 2013 без каких-либо данных
После проверки корректной работы CRM в местной среде, мы начинаем ликвидацию проблем, выявленных на первом этапе.
Этот шаг включает в себе следующие действия:
- переписывание кода плагинов для использования нового SDK API
- избавление от старых CRM форм API,
- создание JavaScript кода , который будет повторять текущую функциональность для всех браузеров (например: обработка XML-документов)
- работа с автосохранением, что было введено в новых формах.
Что касательно Автосохранения, то это очень похоже на то, что делает редактор Word. То есть если пользователь забывает сохранить данные, они будут сохранены автоматически. В реальной жизни это создает некоторые проблемы для партнера по внедрению, который имеет другую логику для сохранения. Прямо сейчас нет идеального решения, подходящего под все ситуации. В основном есть две рекомендации: первая из них- это выключить опцию автоматического сохранения вообще для всей CRM организации на уровне конфигурации (http://blogs.msdn.com/b/crm/archive/2013/10/15/manage-auto-save.aspx) или вставить кусок кода JavaScript в каждый обработчик события на сохранение, чтобы программно отменить событие Автосохранения, используя новую CRM форму API (http://blogs.msdn.com/b/crm/archive/2013/11/18/how-to-manage-auto-save-for-individual-forms-of-entity.aspx)
Кстати, на этом этапе можно было бы заменить некоторые части JavaScript кода на функцию бизнес правила, появившуюся в CRM 2013, которая позволяет управлять controls инструментами в форме через конфигурацию вместо программирования.
Кроме того, некоторые плагины теперь могут быть заменены синхронными рабочими процессами в реальном времени, которые упрощают внедрение и дальнейшее обслуживание бизнес-пользователей.
И бизнес-правила, и рабочие процессы в реальном времени довольно полезные особенности, но использовать их вместо существующего кода не обязательно и этот шаг вполне можно пропустить.
Главным результатом этого этапа является новая рабочая среда с рабочей клиентской кастомизацией.
Варианты миграции данных
Сейчас имеются следующие доступные опции для миграции данных:
- Скачать, настроить и переместить значительную часть ваших данных с помощью бесплатного Microsoft Dynamics CRM 2011 Instance Adapter, а оставшуюся часть, написав специальные утилиты с помощью SDK
- Купить 60дневную лицензию Scribe Dynamics CRM Adapter (https://openmind.scribesoftware.com/releases/dynamics-crm-adapter-55 )
- Привлечь Synchronicity, которые выполнят миграцию ваших данных в определенную CRM онлайн организацию, используя собственный продукт Echo http://www.synchronicity-systems.co.uk/Echo/FAQs
- Привлечь WaveAccess, который выполнит миграцию с использованием Microsoft Dynamics CRM 2011 Instance Adapter и кастомного скрипта, который обработает все объекты и конкретные случаи, не поддерживаемые адаптером
Основная миграция данных с помощью Microsoft Dynamics CRM 2011 Instance Adapter
Microsoft Dynamics CRM 2011 Instance Adapter официально поддерживает миграцию данных из CRM 2011 в CRM 2013. Http://www.microsoft.com/en-us/download/details.aspx?id=35385
Было заявлено, что Microsoft Dynamics CRM 2011 Instance Adapter поддерживает даже больше, чем просто постоянная синхронизация данных. Но чтобы использовать его, необходимо установить связь между сущностями и удаленной CRM организацией используя прилагаемый пользовательский интерфейс. Также вы должны создать всех запрошенных пользователей в обеих организациях. Импорт сущностей должен соблюдать логическую зависимость и сначала должны быть импортированы главные сущности, а потом дочерние. Это не является обязательным , но рекомендуется , чтобы сократить время импорта.
Однако, неизбежно возникают ситуации, когда появляются циклические ссылки и они не обрабатываются правильно полностью. Вы можете столкнуться с ситуацией, что инструмент пытается установить связи между сущностями 7 раз, а затем останавливается.
Тем не менее с помощью этого инструмента вы можете перенести данные для большинства стандартных и нестандартных сущностей . Однако в настоящее время Microsoft Dynamics CRM 2011 Instance Adapter имеет проблемы с миграцией маркетинговых списков, мероприятий и в частности есть проблемы с сущностью activity parties, также как и со вложениями.
Также мы столкнулись с рядом ситуаций, когда Instance Adapter импортировал 90% записей для конкретной сущности, но не смог перенести оставшиеся 10% записей .
Миграция стандарных сущностей, не перенесенных с помощью Microsoft Dynamics CRM 2011 Instance Adapter
Как уже было сказано, с помощью Microsoft Dynamics CRM 2011 Instance Adapter вы можете импортировать большую часть сущностей, но не все из них, поэтому как перенеместить оставшуюся часть – остается открытым вопросом. Одним из способов может служить написание C# кода, который будет получать данные из источника CRM 2011 через вебсервис CRM 2011 и импортировать их в определнную CRM 2013. Но эта операция отнимет очень много времени. Столкнувшись с такой ситуацией несколько лет назад, мы написали свой собственный скрипт, который способен разобрать специальные XML скрипты, имеющие FetchXML как синтаксис и перенаправить их на CRM веб-сервисы.
Ниже пример скрипта
<?xml version="1.0" encoding="utf-8" ?> <operations> <!-- Retrieve all marketing list members and save them into a local collection records2011. Here the datasource is specified in the “in” parameter, Entity attribute contains the required entity type Var attribute is used for defining a variable that will contain retrieved data. --> <read in="crm2011" entity="listmember" var="records2011"> <!-- List attributes of the list members that will be retrieved from CRM 2011--> <attr name="listmemberid" /><attr name="entityid" /> <attr name="entitytype" /> <attr name="listid" /> <attr name="ownerid" /> </read> <!-- Save the whole number of retrieved records in the log file --> <log>Total listmembers - {records2011.count}</log> <!-- Iterate over the retrieved from CRM 2011 --> <for var="record2011" in="records2011"> <sandbox> <log>Listmember {record5.entitytype} : {record5.entityid.Id} : {record5.listid.Id}</log> <!-- For each list member record in CRM 2011 try to find a matched list member record in CRM 2013 (with the same object ID, entity type and for the same marketing list--> <read in="crm2013" entity="listmember" var="records2013"> <criteria> <condition attr="entityid">{recors2011.entityid.Id}</condition/> <condition attr="entitytype">{record2011.entitytype}</condition/> <condition attr="listid">{record2011.listid.Id}</condition/> </criteria> </read> <!-- If such a record is not found then we will create a new one for this list member and marketing list. Here there is a demonstration of the script engine to call .NET object methods that accept parameters from the script context--> <if condition="{records2013.count eq 0}"> <log>Record not found. Adding a new listmember</log> <set var="">{Crm5Utils.AddListMember('crm2013',record2011.listid.Id,record2011.entityid.Id)}</set> </if> <if condition="{records2013.count gt 0}"> <log>Record found</log> </if> </sandbox> </for> </operations>
Разработка скриптов для настраиваемых сущностей и их миграция
Если упомянутый CRM adapter позволит вам перенести данные настраиваемых сущностей в большинстве случаев, то существуют некоторые ситуации, когда собственная логика должна быть реализована до переноса данных в указанную. В этом случае наши скрипты позволят нам реализовать эту бизнес-логику. Как было показано выше это можно сделать либо с помощью куска кода С# или с помощью самого скрипта.
Сравнение отчетов по данным между CRM 2011 и CRM 2013, чтобы убедиться, что все было перенесено в соответствии с требованиями
После того, как миграция была осуществлена, необходимо убедиться , что количество записей для каждого типа сущности одно и то же в источнике, и в целевой CRM. Если есть разница, то необходимо определить ее причину и устранить.
С помощью наших скриптов можно сформировать запросы для всех типов сущностей и создать сравнительную таблицу, содержащую определенное количество записей, принадлежащие каждому пользователю каждой сущности в CRM 2011 и количество соответствующих записей для этого пользователя в CRM 2013. Если найдены различия , тот же скрипт находит отличающиеся записи. После этого можно понять причину, устранить ее и снова синхронизировать данные.
Ручное тестирование перенесенной системы
После завершения миграции жизненно важно пройти через все формы и убедиться, что все экраны работают должным образом. В случае поддержки системой нескольких браузеров , необходимо провести тестирование во всех. Чтобы убедиться, что все работает исправно, необходимо подготовить и соблюсти планы тестирования.
Заключение
Миграция CRM - это довольно сложная работа. Она включает в себя ряд шагов и требует знания нескольких инструментов. Но не все инструменты достаточно продуманы и идеально подходят. Однако все выполнимо. Миграция кастомизации требует больше усилий и менее предсказуема, чем миграция данных. Тем не менее миграция данных также может быть проблемой для крупных установок/инсталляций CRM с большими объемами данных. Однако есть целый ряд компаний, которые предоставляют либо продукты для выполения этой части работы, либо полный пакет услуг по миграции.
Если вы являетесь ИТ-компанией и вам нужно мигрировать CRM для некоторых из ваших клиентов, но не хотите тратить свои ресурсы на эти задачи – привлеките WaveAccess в качестве аутсорсинг-партнера.
Дайте нам знать, если у вас есть какие-либо вопросы, и мы постараемся Вам помочь!