WikiPrint - from Polar Technologies

Integracja z zewnętrznymi systemami

Sposób utworzenia połączania z systemem Optima

!#comment
Aby umożliwić synchronizację z systemem Optima należy wykonać poniższe czynności.

 *  zmiana stałej w pliku config.inc
 *  sprawdzenie danych w tabeli wsdl_config_table w systemie eDokumenty
 *  utworzenie tabeli kolejki w systemie Optima
 *  założenie triggerów na tabele
    * dok!__Dokument
    * adr!__Ewid
    * kh!__Kontrahent
 *  założenie widoków (eDokumenty > 2.0 RC15)
    * optima_export_all_contacts_documents_view.sql
    * optima_export_all_contacts_view.sql
    * optima_export_all_queued_contacts_documents_view.sql
    * optima_export_all_queued_contacts_view.sql

== Zmiana stałej ==
W pliku config.inc należy zmienić stałą "OPTIMA_DATA_SOURCE_DTSCNM" na
{{{
 define('OPTIMA_DATA_SOURCE_DTSCNM', 'nazwa');
}}}
gdzie nazwę należy zastąpić nazwą bazy danych systemu Optima

== Sprawdzenie danych w tabeli ==
Jeśli w systemie !eDokumenty tabela wsdl_config_table jest pusta należy wykonać odpowiedni skrypt SQL dla Optima znajduję się on w katalogu

{{{
apps\edokumenty\classes\BsConnect\install\data\optima_wsdl_ins.sql
}}}
następnie należy przejść do punktu "Konfiguracja tabeli wsdl_config_table" aby dokonać niezbędnych poprawek oraz ustawień według zaleceń.

== Ustawienia w tabeli wsdl_config_table ==
Następny krok to sprawdzenie tabeli wsdl_config_table oraz czy zawiera dane. W przypadku jeśli jest pusta proszę udać się na stronę z integracją wybranego systemu. Edycję ustawień połączeń możemy dokonać z interfejsu eDokumentów '''Ustawienia -> Systemy zewnętrzne'''

'''Opis kolumn'''
 *  Adres - adres pliku (serwera), jeśli w nazwie występuje słowo {host} należy ja zamienić na lokalizacje systemu eDokumenty standardowo jest to localhost, w przypadku vhosta należy podać port (np.: localhost:8080), jeśli system znajduje się katalogu różnym niż public należy dodać nazwę tego katalogu do nazwy (np.: localhost:8080/edokumenty), zmianę tą można dokonać z linii poleceń psql według ustawień instalacji [[br]]
{{{
UPDATE wsdl_config_table SET wsdl__ = replace(wsdl__, '{host}', 'localhost:8080/edokumenty');
}}}
 *  System - wskazuje na nazwę systemu dla którego konfigurowana jest dana metoda(zostawiamy bez zmian)
 *  Warunek SQL - warunek po jakim będą synchronizowane dane
   * dla akcji "Podwiąż kontakt" z lewej strony znaku równości wskazujemy kolumnę z systemu zew. natomiast z prawej w wąsach kolumnę z systemu eDokumenty 
{{{
(np. dla OPT!MY: Knt_Nip='{nip___}' AND Knt_Nazwa1='{name_1}' co oznacza, że będzie 
wyszukiwanie kontaktu w systemie OT!MA gdzie kolumna Knt_Nip będzie równa numerowi nip 
kontaktu z systemu eDokumenty (token {nip___} jest zamieniany na dane) itd)
}}}

   *  dla pozostałych akcji po lewej stronie jest nazwa kolumny z systemu eDokumety a z prawej token z maski(zobacz w katalogu apps\edokumenty\etc\sync) z jakimi zostanie zastąpiony.

Różnica między tymi metodami polega na tym iż w przypadku szukania kontaktu w systemie zew. należy wykonać zapytanie na zew. bazie dlatego z lewej strony są nazwy kolumn z systemu zew. a z prawej tokeny nazwy kolumn systemu eDokumenty, które zostaną zastąpione danymi wybranego kontaktu.

Reszta metod służy do porównania danych przychodzących z systemu zew. do systemu eDokumenty. Zapytanie jest wykonywane na bazie eDokumenty dlatego z lewej strony wstawiamy nazwę kolumny z tabeli z bazy eDokumenty natomiast z prawej dane z tablicy "mapy" z systemu zew. 

Tablica (mapa kolumn) ułatwia sparsowanie danych i lepsze rozeznanie przykład

{{{
apps\edokumenty\etc\sync\OPTIMA_columns_map.ini
Przykładowa konfiguracja tablicy mapy dla kontaktu dla OPT!MY
[contacts]
Knt_KntID = contid
Knt_Nazwa1 = name_1
Knt_Nazwa2 = name_2
Knt_Nazwa3 = name_2
Knt_Kraj = countr
Knt_Wojewodztwo = woj___
Knt_Powiat = powiat
Knt_Ulica = street
Knt_NrDomu = bldnum
Knt_NrLokalu = fltnum
Knt_Miasto = city__
Knt_KodPocztowy = code__
Knt_Nip = nip___
}}}
Oznacza to, że do dyspozycji będą dane pod danymi kluczami np.: klucz "nip_!__" będzie zawierał numer nip kontaktu z systemu zew. (w tym przypadku OPT!MA) dlatego warunek zapytania w bazie eDokumeny będzie miało postać
{{{
nip___='{nip___}'
}}}
Czyli szukamy kontaktu w bazie eDokumenty gdzię nip_!__ (lewa strona) kontaktu z bazy eDokumenty jest równy numerow nip z tabeli - mapy danych jakie otrzymamy z systemu zew. Należy pamiętać aby token w wąsach był dodatkowo w pojedyńczych apostrofach. Ze względu na różny typ danych i sposób w jaki mogą być potraktowane przez SQL (cyfry, liczby nie wymagają apostrofów natomiast litery tak!!) lepiej jest dla każdego typu danych w wąsach stosować apostrofy.

== Utworzenie tabeli kolejki ==
W systemie Optima (w bazie) wykonujemy skrypt z pliku 
{{{
apps\edokumenty\classes\BsConnect\install\sql\optima\optima_export_queue.sql

}}}
Po wykonaniu tego skryptu w systemie Optima powinna pojawić się dodatkowa tabela o nazwie export_queue.

== Założenie triggerów ==
Triggery mają za zadanie dodawać do kolejki dokumenty i kontaktu które zostały zmodyfikowane bądź dodane do systemu Optima. Triggery wykonujemy z załączników bądź w folderze
{{{
apps\edokumenty\classes\BsConnect\install\sql\optima
}}}
znajdują się pliki oryginalne. Kolejność ich wykonywania nie ma znaczenia. Po ich wykonaniu należy sprawdzić czy tabele dok__Dokument, adr__Ewid oraz Kontrahent posiadają dodatkowe triggery. Można tego dokonać za pomocą narzędzia SQL Manager Lite for SQL Server firmy EMS. (http://www.sqlmanager.net/)
[[BR]]Dla tabeli dokumentów
[[BR]]
[[Image(opDk.png, nolink)]] [[BR]]

Natomiast dla tabeli Kontrahenci [[BR]]
[[Image(opKh.png, nolink)]] [[BR]]

Możemy przetestować działanie mechanizmy poprzez dodanie do systemu Optima dokumentu lub kontrahenta i sprawdzeniu czy w tabeli export_queue pojawiły się wpisy.

== Założenie widoków ==
Począwszy od wersji 2.0 RC16 można decydować jakie dane mają być pobierane z systemu zew. poprzez modyfikacje specjalnych widoków przeznaczonych do synchronizacji. Widoki te są wymagane w celu prawidłowego funkcjonowania. Można je znaleźć w katalogu
{{{
edokumenty\classes\BsConnect\install\sql\optima\views
}}}

Można też je pobrać z załączonego niżej katalogu optima.zip. Widoki należy wykonać na bazie Optima (MsSQL).

''' Opis widoków '''
 *  optima_export_all_contacts_documents_view - wyświetla wszystkie dokumenty, które mają kontrahenta
 *  optima_export_all_contacts_view - wyświetla wszystkich kontrahentów
 *  optima_export_all_queued_contacts_documents_view - wyświetla wszystkie dokumenty, które mają kontrahenta oraz zostały zmodyfikowane(dodane do systemu) i znajdują się w tabeli export_queue w systemie zew.
 *  optima_export_all_queued_contacts_view - wyświetla wszystkich kontrahentów którzy zostali zmodyfikowani(dodani do systemu) i znajdują się w tabeli export_queue w systemie zew.

kolejność wykonywania nie ma znaczenia.

Widoki te można modyfikować według potrzeb(dodawać kolumny itd) eliminując w ten sposób dodatkową pracę ze strony programisty i aktualizacji w postaci nowej wersji ze zmodyfikowanym widokiem.
Widoki modyfikujemy jeśli klient zażyczy sobie aby z systemu zew. były pobierane dodatkowe dane, których podstawowa definicja nie uwzględniła. Następnie w pliku konfiguracyjnym 
{{{
OPTIMA_columns_map.ini
}}}
dodajemy kolejny wpis pod odpowiednim indeksem [contacts] - kontakty, [documents] - dokumenty z rzutowaniem danych z dodanej kolumny w widoku na kolumnę w systemie eDokumenty.

''' Jaka metoda jaki widok wykorzystuje '''
 *  Importuj wszystkie kontakty - Optima_export_all_contacts_view
 *  Aktualizuj dane - optima_export_all_queued_contacts_view
 *  Aktualizuj dokumenty - optima_export_all_queued_contacts_documents_view
 *  Aktualizuj dane kontaktów - optima_export_all_queued_contacts_view
 *  Aktualizuj dokumenty kontaktów - optima_export_all_queued_contacts_documents_view
 *  Pobierz wszystkie dokumenty - optima_export_all_contacts_documents_view

== Reset ==
Na wypadek gdyby wprowadzone zmiany miały być z jakiegoś względu wycofane z bazy optimy, należy wykonać plik reset_optima.sql który usuwa tabele export_queue, triggery oraz widoki.

== Raporty z parametrem klienta ==

Aby raportować rozrachunki z klientem, sprzedaż czy cokolwiek z nim związane można do tego użyć raportów ze zdefiniowanym zewnętrznym źródłem danych patrz: [wiki:DeployerGuide/Customization/AdvancedReporting tworzenie raportów SQL]