Заказать проект
Оставьте заявку для получения коммерческого предложения.
Заполните форму и мы вышлем Вам предложение в котором решим,
чем можем вам помочь.
Ошибка импорта бизнес-процессов с кастомными activity

Ошибка импорта бизнес-процессов с кастомными activity

10 Апреля 2018
Виктор Магдин
Back end TeamLead
Виктор  Магдин
следующая статья

Это довольно распространенная проблема после внедрения дополнительного функционала в облачной и коробочной версии Bitrix24 методами Rest API. Найти в Google варианты устранения этого бага не просто. Но работая с проектами разной сложности, мы все же отыскали универсальное решение импорта кастомного activity (набор базовых методов, которые необходимы любому действию. Могут или должны быть переопределены в классе-наследнике).



Делимся с вами личным опытом. Итак, у нас есть бекап шаблона. Импортируем его и получаем в ответ “Ошибка импорта”. Закрадывается мысль о том, что, возможно, в шаблонах есть что-то, что привязывает его к порталу или определенному приложению. Давайте посмотрим на этот шаблон.

Открываем в любом редакторе, видим следующее:


C таким точно невозможно работать. После этого нужно понять, как работает экспорт или импорт. Смотрим на страницу обработки шаблона в коробочной версии Bitrix24:


Тут размещен компонент bitrix:crm.config.bp. Лезем в него, находим там вызов компонента bitrix:crm.config.bp.edit, дальше bizproc.workflow.edit. Импорт и экспорт шаблонов производится методами CBPWorkflowTemplateLoader::ImportTemplate и CBPWorkflowTemplateLoader::ExportTemplate соответственно. Изучив их, понимаем что это были за крякозябры и как теперь обрабатывать наши шаблоны.

Для открытия шаблона читаем его содержимое: применяем gzuncompress() и потом unserialize(). Теперь имеем массив с полной описью всех activity нашего БП:



К ключевому слову rest определяем массивы описаний наших кастомов:

Делаем все те же манипуляции с экспортированным шаблоном из актуальной версии CRM, то бишь с места, где не выходит импортировать БП. Находим описание rest activity, смотрим отличия:

Помимо [Type], в поле есть еще [Name], но как показывает практика [Type] вполне достаточно. Меняем его на значение нового шаблона во всех встречающихся местах. Проводим обратную процедуру: применяем на итоговый массив serialize() и gzcompress(), получаем новенький шаблон, который удачно импортируется. Теперь, можно без лишних усилий и нервов переносить нужные нам бизнес-процессы из одной CRM в другую. Отлично, работаем дальше.

Не забудьте поделиться статьей со своим другом-разработчиком:)




Need help?

Ask a question.

Chat Now
Записаться На Консультацию
Записаться На Консультацию
Мы свяжемся
с вами
в течении
10 минут
laptop
Мы свяжемся с вами в течении 10 минут