SmartB2B SYNC dla enova365 i Comarch ERP Optima
Dedykowane usługi Windows zastępujące proces Node na stanowiskach z enova365 albo
Comarch ERP Optima. Wspólny rdzeń utrzymuje połączenie WAMP, udostępnia diagnostykę
i wykonuje eu.smartb2b.sql_raw. Osobne adaptery zapisują zamówienia przez API ERP.
Rozwiązanie składa się z bibliotek SmartB2B.Sync.Contracts i
SmartB2B.Sync.Service oraz osobnych hostów i adapterów Enovy i Optimy. Usług dla
tego samego portalu nie należy uruchamiać jednocześnie, ponieważ rejestrują te same
procedury WAMP.
Najważniejsze właściwości
- Host nie zawiera bibliotek
Soneta.*. Adapter ładuje je z kataloguenova.installationPathprzy każdym starcie procesu. - Zmiana wersji lub katalogu Enovy wymaga restartu usługi. Start kończy się błędem, jeżeli nowy zestaw DLL nie jest zgodny z adapterem.
- Operacje Enovy są wykonywane pojedynczo i w osobnych sesjach. Zapytania SQL korzystają z puli połączeń i mogą działać równolegle.
- ZO jest zapisywane transakcyjnie, domyślnie do bufora. Powtarzający się numer obcy nie jest blokowany.
- Pierwsza wersja obsługuje PLN,
price_nettoi rabat procentowy0-100. - Sentry raportuje błędy krytyczne procesu oraz nieoczekiwane błędy procedur Enovy i SQL, oznaczone portalem i nazwą procedury WAMP.
Konfiguracja
Plik config/enova.json zawiera portal WAMP, ścieżkę instalacji, alias bazy używany wewnątrz procesu, operatora wraz z hasłem, connection string SQL, definicję dokumentu, magazyn domyślny, tryb zapisu oraz DSN Sentry. Repozytorium oraz paczka zawierają tylko config/enova.json.sample. Skrypt instalacyjny kopiuje wzorzec do config/enova.json wyłącznie wtedy, gdy lokalna konfiguracja jeszcze nie istnieje.
Dla Optimy odpowiednikiem jest config/optima.json. Sekcja optima zawiera
ścieżkę instalacji, nazwę firmy widoczną podczas logowania, operatora, hasło,
symbol definicji dokumentu (domyślnie RO), liczbowy identyfikator magazynu i tryb
Buffer albo Approved. companyErpId jest liczbowym Knt_KntId, a
warehouseErpId liczbowym identyfikatorem magazynu. Paczka zawiera wyłącznie
optima.json.sample.
Uzupełnij pola enova.operator, enova.password i sql.connectionString bezpośrednio w lokalnym pliku config/enova.json. Adapter rejestruje bazę Enovy tylko w pamięci procesu na podstawie sql.connectionString; baza nie musi być wcześniej dodana do listy baz w profilu użytkownika Windows, a dane połączenia nie są przez usługę zapisywane w plikach Enovy. Pole enova.database jest nazwą tego wpisu w procesie i może odpowiadać nazwie bazy z connection stringa. Parametr sentry.dsn wskazuje projekt Sentry; pusty lub pominięty DSN wyłącza wysyłanie błędów. Jeżeli operator lub hasło Enovy nie są podane, usługa nie loguje się do bazy Enovy i nie rejestruje endpointu eu.smartb2b.place_order; endpoint SQL oraz diagnostyka pozostają dostępne. Po zmianie konfiguracji trzeba zrestartować usługę. Konto z sql.connectionString musi mieć uprawnienia wymagane do pracy Enovy oraz do zapytań sql_raw; sql_raw celowo dopuszcza również polecenia modyfikujące dane dla zgodności z obecną usługą.
Budowanie i testy
Z katalogu głównego repozytorium, przy zainstalowanym SDK .NET 8:
dotnet restore .\SmartB2B.Sync.sln --configfile .\NuGet.Config
dotnet build .\SmartB2B.Sync.sln --no-restore
dotnet run --project .\tests\SmartB2B.Enova.Tests --no-build --no-restore
dotnet run --project .\tests\SmartB2B.Optima.Tests --no-build --no-restore
Ostrzeżenie NU1603 dotyczące Soneta.Generator jest takie samo jak w działającym prototypie test1 i nie blokuje kompilacji.
Kontrola konfiguracji i dynamicznego ładowania, bez zapisu do bazy:
.\src\SmartB2B.Enova.Service\bin\Debug\net8.0\SmartB2B.Enova.Service.exe --config .\src\SmartB2B.Enova.Service\bin\Debug\net8.0\config\enova.json.sample --check-config
Dla Optimy --check-config sprawdza zgodność architektury procesu z op_base.dll, rejestrację COM
CDNBase.Application, wersję instalacji, połączenie SQL oraz logowanie i utworzenie
sesji. Nie zapisuje dokumentu. Pełne sprawdzenie wymaga gotowej bazy i prawdziwego
operatora:
.\release-optima\SmartB2B.Optima.Service.exe --config .\release-optima\config\optima.json --check-config
Szczegółowe logowanie włącza parametr /debug albo /verbose (obsługiwane są też
warianty --debug i --verbose). Wyłącza je brak parametru lub jawny parametr
/nodebug albo /noverbose. Błędy są zapisywane do stderr niezależnie od tego
ustawienia. W usłudze Windows parametr można włączyć przez odkomentowanie elementu
<arguments>/verbose</arguments> w daemon-enova/smartb2bsync-enova.xml i restart usługi.
W trybie szczegółowym zapis ZO raportuje kolejne etapy: walidację żądania, logowanie
do Enovy, wyszukanie definicji, kontrahenta, magazynu i towarów, commit transakcji
oraz session.Save(). Sentry zawsze wypisuje błędy własnego transportu, a w trybie
szczegółowym również przebieg kolejkowania i wysyłania zdarzenia. Przy starcie usługa
podaje używany cel Sentry bez ujawniania klucza DSN. Jeżeli lokalny config/enova.json
nie zawiera sentry.dsn, usługa wypisuje dokładną ścieżkę używanego pliku. Aktualizacja
nie kopiuje tej wartości automatycznie z enova.json.sample do istniejącej konfiguracji.
Publikacja i instalacja
.\publish-enova.ps1
Paczka Optimy jest samodzielnym buildem win-x64, zgodnym z Optimą 2026.5.1,
i nie wymaga instalowania runtime .NET x64. Nie zawiera bibliotek ani licencji Comarch:
.\publish-optima.ps1
Wynik trafia do release-optima. Po uzupełnieniu config/optima.json instalację
wykonuje release-optima/daemon/install.cmd. Usługa ma identyfikator
smartb2bsync-optima.
Skrypt odtwarza katalog release-enova z hostem, adapterem, wzorcem konfiguracji i WinSW. Repozytorium zawiera również gotowy, skompilowany katalog release-enova, więc na komputerze produkcyjnym nie trzeba instalować SDK. Przed instalacją:
- Skopiuj katalog
release-enovana komputer produkcyjny. Możesz skopiowaćrelease-enova/config/enova.json.sampledorelease-enova/config/enova.jsoni uzupełnić go przed instalacją; jeżeli tego nie zrobisz,install.cmdutworzy plik automatycznie. - Uzupełnij w
release-enova/config/enova.jsonhasło operatora i connection string SQL. - Zatrzymaj starą usługę Node dla tego samego portalu WAMP.
- Skonfiguruj usługę do pracy pod dedykowanym kontem Windows, które potrafi uruchomić Enovę i ma dostęp do jej licencji. Lista baz zapisana w profilu tego konta nie jest wymagana.
- Jako administrator uruchom
release-enova/daemon/install.cmd.
Jeżeli usługa ma działać pod innym kontem niż LocalSystem, po instalacji ustaw je w services.msc albo poleceniem administracyjnym sc.exe config smartb2bsync-enova obj= "DOMENA\\Użytkownik" password= "...", a następnie uruchom usługę ponownie.
Wycofanie polega na uruchomieniu release-enova/daemon/uninstall.cmd i ponownym uruchomieniu dotychczasowej usługi Node. Nie ma migracji schematu bazy.
Procedury WAMP
eu.smartb2b.place_orderprzyjmujecurrency_iso,companyErpId,warehouseErpId,purchase_order_number,notesilines[]z polamisymbol,quantity, opcjonalnymiprice_nettoiprice_bruttoorazdiscount. Enova wymagaprice_netto; Optima wybiera cenę zgodnie zTypNBdefinicji dokumentu. Wynik jest zwracany jako kwargs:order_erp_id,order_erp_symbol,value_netto,value_brutto,stocks.eu.smartb2b.sql_rawprzyjmujequeryi opcjonalneparams; parametry odpowiadają kolejno@1,@2, itd. Wynik ma polarecordsets,recordset,output,rowsAffected.- Diagnostyka:
eu.smartb2b.sync.get_version,get_info,get_log,get_error_log.
Kod produkcyjny, testy oraz gotowa wersja instalacyjna znajdują się w tym repozytorium.
Automatyczne aktualizacje
Przy starcie WinSW pobiera pliki aplikacji z https://demo.smartb2b.eu/files/smartb2b-sync-enova/ zgodnie z listą <download> w daemon-enova/smartb2bsync-enova.xml. Aktualizowane są program, biblioteki, adapter Enovy, skrypty, manifest usługi i config/enova.json.sample. Lokalny config/enova.json nie występuje na liście i nie jest nadpisywany. Sam smartb2bsync-enova.exe jest programem rozruchowym WinSW, dlatego nie aktualizuje samego siebie podczas pracy. publish-enova.ps1 porównuje zawartość gotowej paczki z manifestem i przerywa publikowanie, jeżeli którejkolwiek pozycji brakuje po jednej ze stron.