Błąd importowania procesów biznesowych posiadających “custom activities”
10 April 2018
NASTĘPNY ARTYKUŁ
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 :)
Skontaktujemy się z Tobą w ciągu 10 minut