Open mgralikowski opened 2 years ago
Nie znalazłem w dokumentacji API nic na ten temat. Przyglądnę się temu. Wolałbym raczej rozwiązanie "dynamiczne" - z definicji nie jest dobrze w swoim kodzie rozszerzać kod od third party. Czy dodatkowe pola mogą być tworzone dla każdego typu obiektu, czy tylko dla kontrahenta?
Tzn third party to ciężko nazwać. Wiadomo, że jest to pole całkowicie dynamiczne i user-specific, i każdy klient będzie miał inne wartości, ale zasada działania tych pól jest kwestią wewnętrzną API wfirmy. Jest to wyraźnie pattern field_value[ID]
i wydaje się on być stały.
Nie widziałem przycisku "Dodaj pole" w innych miejscach. CRM to chyba jedyne sensowne miejsce choć w przypadku faktur też kiedyś szukałem pola, aby zaszyć jakiś ukryty identyfikator. Co ciekawe nie widzę różnicy, gdy pole jest tekstowe lub oznaczę je jako URL.
Udało mi się nakłonić serializera do współpracy. Wszystko ok przy odczytywaniu pól - działa fajnie. Ale wygląda na to, że nie da się z poziomu API tych pól modyfikować. Udało mi się utworzyć dokładnie takiego samego XML'a jak przysyłają, ale API zwraca błąd "INPUT ERROR". W sumie to jest nieudokumentowany feature, więc jak zależy Ci na tym, to możesz ich pocisnąć czy w ogóle to obsługują. Jakby co, to zmiany można podglądnąć w PR https://github.com/dbojdo/wFirma/pull/32
Po stronie API obecnie nie ma możliwości utworzenia oraz przekazania danych przez API do dodatkowego pola kontrahenta w systemie. Nie jest możliwa zmiana jego wartości, ponieważ pole jest używane wyłącznie do odczytu. Dziękujemy jednak za sugestię udostępnienia danych pól również do zapisu. Pana pomysł zostanie przekazany do odpowiedniego działu w celu analizy i ewentualnego wdrożenia takiej możliwości w przyszłości.
Jeżeli sam odczyt wartości, bez zapisu nie sprzecza się z ideą biblioteki to bym zostawił. Może się to komuś przydać np. może sobie jakieś flagi ustawić przez panel manualnie i wykorzystać je przy synchronizacji.
Pomyślałem, że warto by zapisać jakiś identyfikator z systemu po stronie wFirmy. Domyślnie encja kontrahenta nie posiada żadnego przydatnego pola, co najwyżej można bawić się w notatki więc pomyślałem o customowych polach, które od pewnego czasu są dostępne.
Niestety nie są one przetwarzane. W ostatecznym obiekcie ich nie ma. Są natomiast w response:
Jest to dla mnie dość oczywiste, ponieważ ten field ma dynamiczną nazwę. Nie znam narzędzia JMS, na którym deseralizacja się opiera, ale osobiście widziałbym 2 podejścia.
1) Na zasadzie pattern - wyszukujemy na końcu
field_value*
i deserializujemy je jako kolejne atrybuty o takich specyficznych nazwach bądź wrzucamy je do kolekcji jak np. customFields[123 => 'example'].2) Podejście dynamiczne. Po prostu w jakiś sposób rozszerzamy dynamicznie klasę
Contractor
i każdy programista dodaje te pola we własnym zakresie ustalając ich nazwę i mapowanie.