• Обновление бесплатной версии SugarCRM - ручной метод

    Постановка задачи

    На этот раз коснемся такой важной и нужной процедуры, как обновление SugarCRM до более высокой версии. SugarCRM достаточно быстро развивается, очень часто выходят новые версии. Эта CRM-система становится все более удобной и стабильной. А так как CRM-система - это в первую очередь рабочий инструмент, помогающий нам в работе, то конечно же хочется чтобы этот инструмент был максимально удобным, надежным и современным. Компания SugarCRM идет на встречу этим желаниям, и заботится о реализации обновления их CRM-системы. Вся логика работы с модулями в SugarCRM основана на том, что есть исходная базовая часть системы, которая практически не подвергается дальнейшим изменениям и настройкам. А есть раздел custom, в котором можно вносить все необходимые доработки модулей. Так же SugarCRM предоставляет интерфейс обновления версии SugarCRM на более новую. При загрузке патча с новой версией изменениям подвергается только базовая часть CRM-системы. Все доработки, находящиеся в custom, остаются без изменений. Тем самым обеспечивается корректный перевод SugarCRM из версии в версию с сохранением всех ваших наработок.

    Все это замечательно работает, пока настройка CRM-системы идет при помощи самой CRM-системы: добавление новых модулей в Конструкторе модулей, добавления/удаления/переименования полей в Студии, редактирование макетов и выпадающих списков. Но, зачастую, бывает не достаточно просто добавить еще одно поле в модуль, или в карточке редактирования поменять местами поля. Нужно добавить новую логику обработки данных, что то такое, чего не предусмотрено редактировать используя визуальные редакторы SugarCRM. Тогда за дело принимается программист, который довносит требуемый функционал в CRM-систему. Я не могу сказать, что только из-за программиста, и его действий перестает корректно работать обновление SugarCRM до следующих версий стандартными средствами. В этой CRM-системе достаточно много мест, где как ни крути, а реализовать 100%-обновляемый функционал не получится. Но, конечно же, от "прямоты" рук программиста и его понимания работы SugarCRM в большинстве случаев зависит без проблемное обновление CRM-системы на следующие версии.

    Для большего понимания сути происходящего я вкратце расскажу как происходит обновление SugarCRM на более старшую версию:

    • Патч обновления содержит файлы, которые необходимо заменить в старой CRM-системе
    • Файлы из патча полностью затирают собой файлы в CRM-системе
    • Все файлы, которые были довнесены в старую CRM-систему после ее установки - их обновление не затрагивает и они остаются неизменными

    Таким образом, все, что в старой CRM-системе было сделано при помощи визуальных редакторов (Конструктор модулей, Студия, Переименование и группировка модулей и т.д.) - все это лежит в специально папке custom, и патч там ничего не затрагивает, и это благополучно кочует на новую версию. А вот практически все, что вносил программист в исходные коды CRM-системы, будет затерто патчем. Отсюда и ошибки перехода, и криво работающая логика после обновления.

    И выход тут один: обновлять CRM-систему "в ручную". В этом случае сохраняются все доработки, которые были сделаны на старой CRM-системе. Они корректно переносятся на новую CRM-систему и сохраняют свою функциональность.

    Реализация

    Обновить CRM-систему "в ручную" - это действительно значит "в ручную". Т.е. стандартный интерфейс SugarCRM нам не подходит, и мы будем все изменения в CRM-системе делать ручками. Но чтобы сильно не пугаться, сразу скажу, что нам в этом деле очень сильно поможет программа Araxis Merge, назначение которой находить различия в папках и файлах.

    Идея ручного обновления SugarCRM на новую версию заключается в следующем
    У нас должны быть три папки с тремя CRM-системами:
    • - В первой папке должна быть установлена чистая CRM-система нашей текущей старой версии. Т.е. находим исходник SugarCRM, из которого мы ставили нашу текущую версию, и устанавливаем эту версию в эту первую папку. После установки не забываем ее русифицировать.
    • - Во второй папке должна лежать наша текущая CRM-систем. Позаботьтесь о том, чтобы из нее были удалены все ненужные составляющие, типа каталогов с SVN-данными и т.д. Если вы не знаете, что нужно убрать, то ничего и не убирайте.
    • - И, наконец, в третью папку необходимо установить SugarCRM той версии, на которую мы хотим перейти.

    Наша задача - отследить, какие изменения мы внесли в нашу текущую CRM-систему, и корректно перенести их в новую CRM-систему.

    С задачей поиска и корректного переноса изменений прекрасно справляется Araxis Merge (либо его бесплатный аналог Meld для Unix-систем). Находим, качаем и устанавливаем у себя демо-версию этой программы.

    Araxis Merge позволяет сравнивать два или три каталога между собой. При этом отмечаются директории и

    Для наглядности работы разберем конкретный случай. Мы будем производить обновление SugarCRM с версии 6.3.0 на 6.4.2 (в общем то эта статья рождалась в процессе моей реальной работы по обновлению версии нашей CRM-системы).

    Как я уже писал выше, для перехода на новую версию нам понадобятся 3 папки с уже проинсталлированными версиями SugarCRM. В нашем случае это будут:

    • crm630 - тут установлена чистая пустая версия SugarCRM CE 6.3.0 (на движке которой сейчас работает наша CRM-система);
    • crm_current - тут находятся файлы нашей текущей CRM системы, работающей на движке SugarCRM CE 6.3.0. Все наши наработки как раз отсюда надо будет перенести на новую версию SugarCRM;
    • crm642 - тут установлена чистая пустая версия SugarCRM 6.4.2, на которую нам и надо выполнить переход;

    Как устанавливается SugarCRM описано в другой статье, и мы этого касаться не будем. Просто примем за сведение, что нужные нам для перехода системы SugarCRM CE 6.3.0 и SugarCRM CE 6.4.2 уже установлены, русифицированы и исправно работают.

    Запускаем Araxis Merge, открываем режим сравнения трех папок и указываем в трех окнах папки с нашими проектами в следующем порядке:

    • 1 - папка с пустой исходной CRM-системой crm630;
    • 2 - папка с нашей текущей CRM-системой crm_current;
    • 3 - папка с CRM-системой, на которую мы хотим перейти crm642.

    Systems_sugarcrm_programmer_othe_custom_

    После запуска сравнения папок, через некоторое время, Araxis Merge показывает нам список папок и файлов в наших трех проектах. Теперь наша основная задача: перенести все то, что было добавлено в нашу текущую CRM-систему относительно чистой старой CRM-системы в новую CRM-систему.

    Как это сделать? Очень просто! Мы ищем все то, чем отличаются папки crm630 и crm_current, и переносим найденное в папку crm642!

    В нашем рассматриваемом примере на картинке видно, что в проекте crm_current в папке custom, относительно проекта crm630, появилась папка с файлами application (да и куча других папок). Кликаем правой клавишей мыши на папке application в центральном окне, и выбираем пункт контекстного меню "Copy Selected From Second to Third Folder ..." (что означает: Копировать выделенное из второй в третью папки). Т.е. фактически, скопировать наши наработки, которые мы добавили в текущем проекте, в новую CRM-систему.

    После завершения копирования Araxis Merge покажет, что теперь проекты crm630 и crm_current все также отличаются по набору папок и файлов, а вот crm_current и crm642 - идентичны (по содержимому папки application):

    Systems_sugarcrm_programmer_othe_custom_

    Таким образом мы "пробегаемся" по нашему текущему проекту, и переносим в новую версию CRM-системы все папки и файлы, которые были добавлены в текущей версии CRM-системы.

    Ну с добавленными файлами и папками все понятно. Находим, жмем меню копирования и все перетекает в новую версию CRM-системы. Но ведь есть еще файлы, которые существовали в исходной CRM-системе (то самое ядро, которое меняется при автоматическом обновлении). Вот тут нам как раз очень пригодиться возможность Araxis Merge сравнивать файлы и переносить различия в режиме редактирования и просмотра сравниваемых файлов. Находим файл, в котором есть различия между исходной версией CRM-системы, и нашей текущей:

    Systems_sugarcrm_programmer_othe_custom_

    Как видно на изображении, в файле One2MBeanRelationship.php есть 2 различия между пустой старой и текущей версией CRM-системы, а также 9 различий между текущей и новой CRM-системой. Заходим в режим просмотра различий в самом файле (двойной клик):

    Systems_sugarcrm_programmer_othe_custom_

    Araxis Merge разворачивает нам сравниваемый файл в режиме просмотра его содержимого. При этом программа подсвечивает, какие именно участки кода различаются в сравниваемых версиях этого файла. Все различия между центральной и правой версией файла нам вообще не интересны. Эти различия обусловлены тем, что разработчики SugarCRM привнесли нового в функционал SugarCRM. Наша задача найти и проанализировать все различия между левой и центральной версией файла. Т.е. все то, что мы до-вносили в нашу текущую версию CRM-системы относительно чистой.

    На предыдущем изображении очень наглядно видно, что мы до-внесли некий участок кода в текущую версию (этого куска кода не было в чистой версии, и, кстати, нет в новой). У этого куска кода есть сверху справа две стрелочки: копировать текущий участок в левую часть или в правую. Т.к. мы обновляем новую CRM-систему, привносим в нее функционал нашей текущей, то нажимаем копирование вправо. Таким образом в новую CRM-систему поступают наши наработки из текущей CRM-системы.

    Systems_sugarcrm_programmer_othe_custom_

    На данном этапе переноса кода нам должно быть совершенно без разницы, что за код мы переносим. Я советую не начинать копаться в своей памяти, пытаясь вспомнить что это за код, и для чего он сюда был написан. Если написан, значит нужен. Анализ вы сможете провести уже потом, когда все переедет на вашу новую CRM-систему. А иначе обновление CRM-системы может очень даже затянуться. Главное: чтобы перенос происходил правильно с точки зрения синтаксиса PHP, и не происходило явных ошибок (иногда, в редких сложных случаях, Araxis Merge все же может немного путаться, и предлагать не совсем корректные варианты переноса кода).

    После переноса всех нужных нам участков кода мы сохраняем новую отредактированную версию файла, выходим обратно к дереву каталогов и папок, и ищем следующий файл для сравнения и анализа.

    И вот таким образом "пробегаемся" по всему проекту. Работа нудная, местами кропотливая. Но получаемый на выходе эффект очень приятен: у нас получается проект с новой версией SugarCRM, в котором присутствуют все наши фичи и настройки!

    Но это еще не все! Все, что было в файлах, мы перенесли. Но ведь еще остается база данных. При переходе на новую версию SugarCRM надо решить как минимум два вопроса, связанных с базой данных:

    • 1 - Что делать, если структура базы данных в новой CRM-системе отличается от структуры базы данных в старой CRM-системе?
    • 2 - Что делать с данными, которые находятся в старой CRM-системе? Как их перенести в новую?

    Чтобы решить эти два вопроса мы поступим следующим образом: в файле конфигурации новой CRM-системы config.php в настройках доступа к базе данных мы укажем нашу текущую базу данных. Да, и именно текущую, с которой мы хотим уйти на новую версию. Таким образом мы решаем вторую проблему: наши данные, находящиеся в текущей версии, остаются в новой версии CRM-системы. Но тут встает остро вопрос со структурой базы данных: ведь она старая! Да, пускай очень похожая, но старая! А тут нам прийдет на помощь один из инструментов SugarCRM: Быстрое восстановление. "Кривизна" базы данных не должна препятствовать использованию этого инструмента. Единственное, сама SugarCRM следит за тем, чтобы ей не была "подсунута" не ее база данных. О чем она нас и проинформирует при попытке в нее зайти строкой "Sugar CRM 6.4.2 Files May Only Be Used With A Sugar CRM 6.4.2 Database.". Лечится это достаточно просто: заходим в таблицу config, находим параметр sugar_version, и правим его значение на название нашей новой версии.

    Администрирование - Панель "Система" - ссылка "Восстановление" - ссылка " Быстрое восстановление" вверху списка. После нажатия CRM-система делает все необходимые действия по адаптации привнесенных файлов под текущую CRM-систему. Внизу страницы будет находиться текстовое поле, в котором CRM-система сформирует SQL-запросы, необходимые для корректировки текущей базы данных. Нажимаем кнопку их выполнения, и все. CRM-система обновила структуру базы данных с текущей на новую.

    На этом переход на новую версию SugarCRM можно считать выполненным.

    Резюмируя

    В данной статье я постарался описать основную идею ручного обновления SugarCRM до последних версий. Конечно, в каждом конкретном случае, могут существовать свои особенности перехода, и данных, указанных в статье, может быть недостаточно. Но, тем не менее, имея в арсенале Araxis Merge, можно значительно упростить решение любых задач по обновлению версий SugarCRM.

    С первого раза предложенный метод может показаться весьма трудоемким (ну конечно же загрузить файл и нажать кнопку "Старт" намного быстрее), но он является наиболее надежным для корректного обновления CRM-системы. А с опытом проведения подобных работ увеличивается их скорость. Если раньше на переход из версии в версию тратил пару дней, то сейчас любую незнакомую систему могу обновить за пару-тройку часов (а то и быстрее, в зависимости от количества доработок этой системы).

    А если программист принимает на обслуживание CRM-систему, разработка которой велась другим программистом, то трудно найти лучший способ понять масштаб работ предыдущего программиста, где он успел побывать и чего изменить :)

    А сейчас, если у Вас стоить задача обновления Вашей CRM-системы на самую новую стабильную версию SugarCRM, и при этом Вы хотите сохранить и свою клиентскую базу, и наработанный функционал, и время, и нервы, и деньги, то Вы можете связаться с нами. Мы сделаем все качественно, быстро и не дорого. Как с нами связаться и немного про нашу компанию есть на этой странице.