Блог

Полезные статьи и новости о жизни WaveAccess

МИГРАЦИЯ ИЗ CRM 4 / CRM 2011 ON-PREMISE в CRM 2013 ONLINE

В последнее время мы довольно часто участвуем в проектах по миграции из CRM 4 и CRM 2011 ON-PREMISE в CRM 2013 онлайн.

Имея уникальный опыт по миграции кастомизации и миграции данных , а также опыт миграции из 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 онлайн .

Ниже мы детально рассмотрим оба эти этапа.

Процесс миграции

  1. Валидация CRM кастомизации, включая формы JavaScript, плагины и код настраиваемых рабочих процессов
  2. Воссоздание клиентского CRM в тестовой среде
  3. Кастомизация миграции в CRM 2013 без каких-либо данных
  4. Основная миграция данных с помощью CRM коннектора или сторонних инструментов (в том числе скрипты WaveAccess & C4CRM)
  5. Миграция стандартных сущностей, не перенесенных  с помощью Microsoft CRM коннектора, используя наши скрипты или сторонние инструменты
  6. Разработка скриптов для настраиваемых  сущностей и их миграция (В случае использования CRM коннектора на этапе 4)
  7. Сравнение отчетов по данным между CRM 2011 и CRM 2013, чтобы убедиться, что все было перенесено  в соответствии с требованиями
  8. Ручное тестирование перенесенной системы

Процесс миграции в деталях

Валидация 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  в местной среде, мы начинаем  ликвидацию проблем, выявленных на первом этапе.

Этот шаг включает в себе следующие действия:

  1. переписывание кода плагинов для использования нового SDK API
  2. избавление от старых CRM форм API,
  3. создание JavaScript кода , который будет повторять текущую функциональность для всех браузеров (например: обработка XML-документов)
  4. работа с автосохранением, что было введено в новых формах.

Что касательно Автосохранения, то это очень похоже на то, что делает редактор 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 инструментами в форме через конфигурацию вместо программирования.

Кроме того, некоторые плагины теперь могут быть заменены синхронными рабочими процессами в реальном времени, которые упрощают внедрение и дальнейшее обслуживание бизнес-пользователей.

И бизнес-правила, и рабочие процессы в реальном времени довольно полезные особенности, но использовать их вместо существующего кода не обязательно и этот шаг вполне можно пропустить.

Главным результатом этого этапа является новая рабочая среда с рабочей клиентской кастомизацией.

Варианты миграции данных

Сейчас имеются следующие доступные опции для миграции данных:

  1. Скачать, настроить и переместить значительную часть ваших данных с помощью бесплатного Microsoft Dynamics CRM 2011 Instance Adapter, а оставшуюся часть, написав специальные утилиты с помощью SDK
  2. Купить 60дневную лицензию Scribe Dynamics CRM Adapter (https://openmind.scribesoftware.com/releases/dynamics-crm-adapter-55 )
  3. Привлечь Synchronicity, которые выполнят миграцию ваших данных в определенную  CRM онлайн организацию, используя собственный продукт Echo http://www.synchronicity-systems.co.uk/Echo/FAQs
  4. Привлечь 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 в качестве аутсорсинг-партнера.

Дайте нам знать, если у вас есть какие-либо вопросы, и мы постараемся Вам помочь!

Заказать звонок

Удобное время:

Отменить

Пишите!

Присоединить
Файл не больше 30 Мб.
Отменить