Add shared ERP sync core and Optima adapter
This commit is contained in:
61
README.md
61
README.md
@@ -1,6 +1,13 @@
|
||||
# SmartB2B SYNC dla enova365
|
||||
# SmartB2B SYNC dla enova365 i Comarch ERP Optima
|
||||
|
||||
Dedykowana usługa Windows zastępująca proces Node na stanowiskach z enova365. Utrzymuje połączenie WAMP, dodaje zamówienia przez oficjalne API Enovy i wykonuje `eu.smartb2b.sql_raw` na osobnym połączeniu SQL.
|
||||
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
|
||||
|
||||
@@ -15,6 +22,13 @@ Dedykowana usługa Windows zastępująca proces Node na stanowiskach z enova365.
|
||||
|
||||
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
|
||||
@@ -22,9 +36,10 @@ Uzupełnij pola `enova.operator`, `enova.password` i `sql.connectionString` bezp
|
||||
Z katalogu głównego repozytorium, przy zainstalowanym SDK .NET 8:
|
||||
|
||||
```powershell
|
||||
dotnet restore .\SmartB2B.EnovaSync.sln --configfile .\NuGet.Config
|
||||
dotnet build .\SmartB2B.EnovaSync.sln --no-restore
|
||||
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.
|
||||
@@ -35,11 +50,20 @@ 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:
|
||||
|
||||
```powershell
|
||||
.\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/smartb2bsync-enova.xml` i restart usługi.
|
||||
`<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
|
||||
@@ -52,24 +76,35 @@ nie kopiuje tej wartości automatycznie z `enova.json.sample` do istniejącej ko
|
||||
## Publikacja i instalacja
|
||||
|
||||
```powershell
|
||||
.\publish.ps1
|
||||
.\publish-enova.ps1
|
||||
```
|
||||
|
||||
Skrypt odtwarza katalog `release` z hostem, adapterem, wzorcem konfiguracji i WinSW. Repozytorium zawiera również gotowy, skompilowany katalog `release`, więc na komputerze produkcyjnym nie trzeba instalować SDK. Przed instalacją:
|
||||
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:
|
||||
|
||||
1. Skopiuj katalog `release` na komputer produkcyjny. Możesz skopiować `release/config/enova.json.sample` do `release/config/enova.json` i uzupełnić go przed instalacją; jeżeli tego nie zrobisz, `install.cmd` utworzy plik automatycznie.
|
||||
2. Uzupełnij w `release/config/enova.json` hasło operatora i connection string SQL.
|
||||
```powershell
|
||||
.\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ą:
|
||||
|
||||
1. Skopiuj katalog `release-enova` na komputer produkcyjny. Możesz skopiować `release-enova/config/enova.json.sample` do `release-enova/config/enova.json` i uzupełnić go przed instalacją; jeżeli tego nie zrobisz, `install.cmd` utworzy plik automatycznie.
|
||||
2. Uzupełnij w `release-enova/config/enova.json` hasło operatora i connection string SQL.
|
||||
3. Zatrzymaj starą usługę Node dla tego samego portalu WAMP.
|
||||
4. 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.
|
||||
5. Jako administrator uruchom `release/daemon/install.cmd`.
|
||||
5. 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 `daemon/uninstall.cmd` i ponownym uruchomieniu dotychczasowej usługi Node. Nie ma migracji schematu bazy.
|
||||
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_order` przyjmuje `currency_iso`, `companyErpId`, `warehouseErpId`, `purchase_order_number`, `notes` i `lines[]` z polami `symbol`, `quantity`, `price_netto`, `discount`. Wynik jest zwracany jako kwargs: `order_erp_id`, `order_erp_symbol`, `value_netto`, `value_brutto`, `stocks`.
|
||||
- `eu.smartb2b.place_order` przyjmuje `currency_iso`, `companyErpId`, `warehouseErpId`, `purchase_order_number`, `notes` i `lines[]` z polami `symbol`, `quantity`, opcjonalnymi `price_netto` i `price_brutto` oraz `discount`. Enova wymaga `price_netto`; Optima wybiera cenę zgodnie z `TypNB` definicji dokumentu. Wynik jest zwracany jako kwargs: `order_erp_id`, `order_erp_symbol`, `value_netto`, `value_brutto`, `stocks`.
|
||||
- `eu.smartb2b.sql_raw` przyjmuje `query` i opcjonalne `params`; parametry odpowiadają kolejno `@1`, `@2`, itd. Wynik ma pola `recordsets`, `recordset`, `output`, `rowsAffected`.
|
||||
- Diagnostyka: `eu.smartb2b.sync.get_version`, `get_info`, `get_log`, `get_error_log`.
|
||||
|
||||
@@ -77,4 +112,4 @@ Kod produkcyjny, testy oraz gotowa wersja instalacyjna znajdują się w tym repo
|
||||
|
||||
## Automatyczne aktualizacje
|
||||
|
||||
Przy starcie WinSW pobiera pliki aplikacji z `https://demo.smartb2b.eu/files/smartb2b-sync-enova/` zgodnie z listą `<download>` w `daemon/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.ps1` porównuje zawartość gotowej paczki z manifestem i przerywa publikowanie, jeżeli którejkolwiek pozycji brakuje po jednej ze stron.
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user