Помилка імпорту бізнес-процесів з кастомними activity

10 Квітня 2018

наступна стаття
Віктор Магдін

Back End TeamLead

Віктор Магдін
Помилка імпорту бізнес-процесів з кастомними activity

Це досить поширена проблема після впровадження додаткового функціонала в хмарній і коробковій Бітрікс24 методами Rest API. Знайти в Google варіанти усунення цього бага не просто. Але працюючи з проектами різної складності, ми все ж знайшли універсальне рішення імпорту кастомного activity (набір базових методів, які необхідні будь-якої дії. Можуть або повинні бути перевизначені в класі-спадкоємці).

e3728e7f6a159fae01e34eff91ee9a46.png

Ділимося з вами особистим досвідом. Отже, у нас є бекап шаблону. Імпортуємо його і отримуємо у відповідь «Помилка імпорту». Закрадається думка про те, що, можливо, в шаблонах є щось, що прив'язує його до порталу або певного додатка. Подивімося на цей шаблон.

Відкриваємо в будь-якому редакторі, бачимо наступне:


3807e5d1bf60ff0850cb160b20559332.png

З таким точно неможливо працювати. Після цього потрібно зрозуміти, як працює експорт або імпорт. Дивимося на сторінку обробки шаблону в коробковій версії Бітрікс24:

 1e487b6de0539f11fc7a0a12ddd56040.png

Тут розміщений компонент bitrix: crm.config.bp. Ліземо в нього, знаходимо там виклик компонента bitrix: crm.config.bp.edit, далі bizproc.workflow.edit. Імпорт і експорт шаблонів проводиться методами CBPWorkflowTemplateLoader :: ImportTemplate і CBPWorkflowTemplateLoader :: ExportTemplate відповідно. Вивчивши їх, розуміємо, що це були за крякозябри і як тепер обробляти наші шаблони.

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

5b2369d5e535f1d03caa7a4bd51568a8.png

До ключового слова rest визначаємо масиви описів наших кастомів:
0128a93a4e8c3bf80bb5a97afb13eec3.png

Робимо все ті ж маніпуляції з експортованими шаблоном з актуальної версії CRM, чи то пак з місця, де не виходить імпортувати БП. Знаходимо опис rest activity, дивимося відмінності:

  
8be01770dbfb336510891fee787959bf.png

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

Не забудьте поділитися статтею зі своїм другом-розробником :)

banner_ukr.png


Схожі статті
Записатись на консультацію

Ми зв'яжемось з Вами протягом 10 хвилин