Błąd importowania procesów biznesowych posiadających “custom activities”

10 April 2018

NASTĘPNY ARTYKUŁ
Wiktor Magdin

Back end TeamLead

Wiktor  Magdin
Błąd importowania procesów biznesowych posiadających “custom activities”

Ten problem to dość powszechne zjawisko, występujące po wprowadzeninu dodatkowych funkcji do Bitrix24 w chmurze i w wersji Box/Standalone za pośrednictwem Rest API. Znalezienie kuracji na tego buga w Google okazuje się być niełatwą sprawą. Opracowując projekty różnej złożoności wypracowaliśmy uniwersalne rozwiązanie dla importowania spersonalizowanych (custom) activities (zestawu podstawowych metod niezbędnych dla każdej czynności, które muszą – lub mogą – być ponownie zdefiniowane przez klasę dziedziczną).



Chętnie dzielimy się swoim doświadczeniem z Tobą. Załóżmy, że mamy w posiadaniu pewien szablon oraz jego backup, importowanie którego kończy się komunikatem “Błąd importowania” (Import Error). Zakrada się myśl, że prawdopodobnie szablony mają w sobie coś, co nierozerwalnie łączy je z portalem lub konkretną aplikacją. Proszę przyjrzeć się bliżej temu szablonowi.

Otwierając go w dowolnym edytorze widzimy następujące:


Z tym pracować na pewno się nie da. Należy zrozumieć, w jaki sposób odbywa się import i export plików. Zwróćmy uwagę na stronę, na której odbywa się opracowanie szablonu przez Bitrix24 w wersji Box/Standalone:

 

Tutaj znajduje się komponent bitrix:crm.config.bp. ”Włamujemy się” do środka i szukamy funkcji wywołania komponentu bitrix:crm.config.bp.edit, a potem bizproc.workflow.edit. Import oraz eksport szablonów przebiega wg odpowiednich metod CBPWorkflowTemplateLoader::ImportTemplate oraz CBPWorkflowTemplateLoader::ExportTemplate . Wnikliwe przebadanie danych uzbraja w zrozumienie znaczenia tych krzaczków, a więc i sposobu dalszego opracowywania szablonów.

W celu otwarcia szablonu sczytujemy jego treść: najpierw stosujemy gzuncompress() a po tym unserialize(). Teraz, posiadamy już masyw z pełną listą wszystkich activities w wybranym procesie biznesowym:



Wyznaczamy masywy opisów custom’ów za pomocą słów kluczowych, w tym przypadku to jest rest:

Następnie, powtarzamy powyższe czynności, tym razem preparując wyeksportowany już szablon z aktualnej wersji CRM, czyli kontynuujemy dokładnie z tego miejsca, w którym utkwiliśmy podczas pierwszej próby importowania danych. Szukamy opisu rest activity przyglądając się rożnicom:

Poza [Type], zaznaczone pole posiada również [Name], mimo że z doświadczenia wynika, że wystarczy mieć samo [Type] . Edytujemy znacznik przypisując mu znaczenie nowego szablonu we wszystkich miejscach jego występowania. Kolejny krok to przeprowadzenie tych czynności w kierunku zwrotnym: do masywu końcowego zaaplikujemy najpierw serialize() potem gzcompress(). W wyniku powstanie nowiutki pomyślnie importujący się szablon. Teraz można już przenieść wybrane procesy biznesowe z jednej CRM do drugiej, oszczędzając przy tym czas i nerwy. Super, działamy dalej.

Udostępnij ten artykuł swojemu koledze programiście :)





Podobne artykuły
Umów się na konsultację

Skontaktujemy się z Tobą w ciągu 10 minut