Compare commits

11 Commits

369 changed files with 6547 additions and 1103 deletions

6
.gitignore vendored
View File

@@ -8,5 +8,7 @@ NuGet/
# Lokalne konfiguracje wdrożeniowe; repozytorium zawiera wyłącznie wzorzec.
src/SmartB2B.Enova.Service/config/enova.json
release/config/enova.json
release/config/enova.local.json
release-enova/config/enova.json
release-enova/config/enova.local.json
src/SmartB2B.Optima.Service/config/optima.json
release-optima/config/optima.json

View File

@@ -0,0 +1,49 @@
# Testy integracyjne Comarch ERP Optima
Testy z bazą są celowo wykonywane dopiero po ręcznym przygotowaniu i zarejestrowaniu firmy w Optimie. Narzędzia w tym repozytorium nie odtwarzają, nie tworzą ani nie modyfikują konfiguracji baz Optimy.
## Przygotowanie
1. Skopiuj `src/SmartB2B.Optima.Service/config/optima.json.sample` do lokalnego, ignorowanego przez Git pliku `src/SmartB2B.Optima.Service/config/optima.json`.
2. Uzupełnij nazwę firmy widoczną podczas logowania, operatora, hasło, identyfikator magazynu i connection string SQL.
3. Nie dodawaj pliku `optima.json` do repozytorium ani paczki wdrożeniowej.
4. W przygotowanej firmie zapewnij kontrolowane dane testowe: kontrahenta, towar, magazyn, walutę oraz definicje RO liczone netto i brutto.
## Kontrola bez zapisu
Uruchom wersję opublikowaną dla tej samej architektury co `op_base.dll` (`x86`
jest domyślne, opcjonalnie użyj `.\publish-optima.ps1 -Architecture x64`):
```powershell
.\release-optima\SmartB2B.Optima.Service.exe --config .\src\SmartB2B.Optima.Service\config\optima.json --check-config
```
Polecenie sprawdza JSON, zgodność architektury procesu z `op_base.dll`, rejestrację COM, wersję Optimy, połączenie SQL, logowanie operatora i utworzenie sesji. Nie zapisuje dokumentu.
## Scenariusze zapisu przez WAMP
Pierwszy kontrolowany zapis adaptera można wykonać runnerem, który wymaga jawnego
parametru `--write-order` i domyślnie zapisuje wyłącznie w trybie `Buffer`:
```powershell
dotnet run --project .\tests\SmartB2B.Optima.IntegrationTests -- --config .\src\SmartB2B.Optima.Service\config\optima.json --negative-tests --write-order --customer-id 2 --product-code SMARTB2B_TEST_TWR
```
Zatwierdzenie dokumentu wymaga dodatkowej flagi `--approved` i powinno być wykonywane
wyłącznie w firmie testowej:
```powershell
dotnet run --project .\tests\SmartB2B.Optima.IntegrationTests -- --config .\src\SmartB2B.Optima.Service\config\optima.json --write-order --approved --customer-id 2 --product-code SMARTB2B_TEST_TWR
```
Po pomyślnym `--check-config` uruchom usługę z tym samym plikiem konfiguracji i sprawdź kolejno:
- RO w buforze (`saveMode: Buffer`) i zatwierdzone (`saveMode: Approved`);
- definicję liczoną netto z `price_netto` i brutto z `price_brutto`;
- rabat, uwagi, numer obcy, magazyn oraz walutę;
- zgodność `order_erp_id`, `order_erp_symbol`, `value_netto` i `value_brutto` z dokumentem zapisanym w Optimie;
- błędy dla brakującego kontrahenta, produktu, magazynu, waluty i wymaganej ceny;
- parametryzowane `sql_raw`, wiele recordsetów, dane binarne oraz błąd SQL;
- dwa równoczesne wywołania `place_order` — dokumenty mają zostać utworzone kolejno na jednym wątku COM.
Przed testami trybu `Approved` wykonaj kopię bezpieczeństwa bazy lub użyj firmy przeznaczonej wyłącznie do testów.

View File

@@ -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
@@ -9,21 +16,30 @@ Dedykowana usługa Windows zastępująca proces Node na stanowiskach z enova365.
- 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_netto` i rabat procentowy `0-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, operatora wraz z hasłem, connection string SQL, definicję dokumentu, magazyn domyślny i tryb zapisu. 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.
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.
Uzupełnij pola `enova.password` i `sql.connectionString` bezpośrednio w lokalnym pliku `config/enova.json`. Po zmianie konfiguracji trzeba zrestartować usługę. Connection string powinien używać konta SQL o możliwie najmniejszych uprawnieniach; `sql_raw` celowo dopuszcza również polecenia modyfikujące dane dla zgodności z obecną usługą.
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:
```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.
@@ -34,27 +50,67 @@ 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-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
```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 domyślnie samodzielnym buildem `win-x86`, zgodnym z 32-bitową
biblioteką COM na stanowisku produkcyjnym, i nie wymaga instalowania runtime .NET.
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
```
Architektura procesu musi być identyczna z architekturą `op_base.dll` w katalogu
Optimy. Dla instalacji z 64-bitową biblioteką COM zbuduj osobną paczkę poleceniem
`.\publish-optima.ps1 -Architecture x64`. Jedna paczka nie obsługuje obu wariantów,
ponieważ COM Optimy jest ładowany bezpośrednio do procesu.
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ę, widzi jej bazę i licencję.
5. Jako administrator uruchom `release/daemon/install.cmd`.
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-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`.
@@ -62,4 +118,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.

View File

@@ -1,36 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35327.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Enova.Contracts", "src\SmartB2B.Enova.Contracts\SmartB2B.Enova.Contracts.csproj", "{83EEA218-71A0-4E45-9572-B53767A3BC26}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Enova.Adapter", "src\SmartB2B.Enova.Adapter\SmartB2B.Enova.Adapter.csproj", "{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Enova.Service", "src\SmartB2B.Enova.Service\SmartB2B.Enova.Service.csproj", "{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Enova.Tests", "tests\SmartB2B.Enova.Tests\SmartB2B.Enova.Tests.csproj", "{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{83EEA218-71A0-4E45-9572-B53767A3BC26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83EEA218-71A0-4E45-9572-B53767A3BC26}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83EEA218-71A0-4E45-9572-B53767A3BC26}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83EEA218-71A0-4E45-9572-B53767A3BC26}.Release|Any CPU.Build.0 = Release|Any CPU
{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}.Release|Any CPU.Build.0 = Release|Any CPU
{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}.Release|Any CPU.Build.0 = Release|Any CPU
{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

71
SmartB2B.Sync.sln Normal file
View File

@@ -0,0 +1,71 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35327.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Sync.Contracts", "src\SmartB2B.Sync.Contracts\SmartB2B.Sync.Contracts.csproj", "{83EEA218-71A0-4E45-9572-B53767A3BC26}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Sync.Service", "src\SmartB2B.Sync.Service\SmartB2B.Sync.Service.csproj", "{D52B9C80-C6F4-4E0B-B3B8-17F6A8FD88E5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Enova.Adapter", "src\SmartB2B.Enova.Adapter\SmartB2B.Enova.Adapter.csproj", "{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Enova.Service", "src\SmartB2B.Enova.Service\SmartB2B.Enova.Service.csproj", "{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Optima.Adapter", "src\SmartB2B.Optima.Adapter\SmartB2B.Optima.Adapter.csproj", "{7C9A4077-0EB1-4E87-A202-99219EBE9BDF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Optima.Service", "src\SmartB2B.Optima.Service\SmartB2B.Optima.Service.csproj", "{A0DA9C63-98D1-47AA-B491-E101D6131B0B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Enova.Tests", "tests\SmartB2B.Enova.Tests\SmartB2B.Enova.Tests.csproj", "{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Optima.Tests", "tests\SmartB2B.Optima.Tests\SmartB2B.Optima.Tests.csproj", "{1F6B3CB3-141D-4438-B43B-B3B6CA80A483}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{83B01DA9-7F49-48C8-AB20-E9814B7093DA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartB2B.Optima.IntegrationTests", "tests\SmartB2B.Optima.IntegrationTests\SmartB2B.Optima.IntegrationTests.csproj", "{9BDCCB4C-12DD-4CCF-A628-F30721ACC2C9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{83EEA218-71A0-4E45-9572-B53767A3BC26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83EEA218-71A0-4E45-9572-B53767A3BC26}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83EEA218-71A0-4E45-9572-B53767A3BC26}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83EEA218-71A0-4E45-9572-B53767A3BC26}.Release|Any CPU.Build.0 = Release|Any CPU
{D52B9C80-C6F4-4E0B-B3B8-17F6A8FD88E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D52B9C80-C6F4-4E0B-B3B8-17F6A8FD88E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D52B9C80-C6F4-4E0B-B3B8-17F6A8FD88E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D52B9C80-C6F4-4E0B-B3B8-17F6A8FD88E5}.Release|Any CPU.Build.0 = Release|Any CPU
{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{64C5439F-00AA-48F9-9A9B-DAE69DB0BC57}.Release|Any CPU.Build.0 = Release|Any CPU
{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3473BD53-A2B9-46A8-AEE8-F087F373DF2B}.Release|Any CPU.Build.0 = Release|Any CPU
{7C9A4077-0EB1-4E87-A202-99219EBE9BDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7C9A4077-0EB1-4E87-A202-99219EBE9BDF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7C9A4077-0EB1-4E87-A202-99219EBE9BDF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7C9A4077-0EB1-4E87-A202-99219EBE9BDF}.Release|Any CPU.Build.0 = Release|Any CPU
{A0DA9C63-98D1-47AA-B491-E101D6131B0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A0DA9C63-98D1-47AA-B491-E101D6131B0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0DA9C63-98D1-47AA-B491-E101D6131B0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A0DA9C63-98D1-47AA-B491-E101D6131B0B}.Release|Any CPU.Build.0 = Release|Any CPU
{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{842D10FD-D5FC-4AF9-8D72-619BF6EE10C2}.Release|Any CPU.Build.0 = Release|Any CPU
{1F6B3CB3-141D-4438-B43B-B3B6CA80A483}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F6B3CB3-141D-4438-B43B-B3B6CA80A483}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F6B3CB3-141D-4438-B43B-B3B6CA80A483}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F6B3CB3-141D-4438-B43B-B3B6CA80A483}.Release|Any CPU.Build.0 = Release|Any CPU
{9BDCCB4C-12DD-4CCF-A628-F30721ACC2C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BDCCB4C-12DD-4CCF-A628-F30721ACC2C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BDCCB4C-12DD-4CCF-A628-F30721ACC2C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BDCCB4C-12DD-4CCF-A628-F30721ACC2C9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{9BDCCB4C-12DD-4CCF-A628-F30721ACC2C9} = {83B01DA9-7F49-48C8-AB20-E9814B7093DA}
EndGlobalSection
EndGlobal

View File

@@ -3,7 +3,7 @@ setlocal
cd /d "%~dp0"
if not exist "smartb2bsync-enova.exe" (
echo Brak smartb2bsync-enova.exe. Najpierw uruchom publish.ps1.
echo Brak smartb2bsync-enova.exe. Najpierw uruchom publish-enova.ps1.
exit /b 1
)

View File

@@ -0,0 +1,94 @@
<service>
<id>smartb2bsync-enova</id>
<name>SmartB2B SYNC - enova365</name>
<description>Synchronizuje enova365 z portalem SmartB2B.</description>
<executable>%BASE%\..\SmartB2B.Enova.Service.exe</executable>
<workingdirectory>%BASE%\..</workingdirectory>
<!-- Odkomentuj, aby włączyć logowanie etapów Enovy i diagnostykę Sentry. -->
<!-- <arguments>/verbose</arguments> -->
<stoptimeout>30sec</stoptimeout>
<log mode="roll-by-time">
<pattern>yyyyMMdd</pattern>
</log>
<onfailure action="restart" delay="10 sec" />
<delayedAutoStart />
<!--
WinSW pobiera te pliki przed uruchomieniem usługi. Lokalny plik
config\enova.json nie jest aktualizowany; odświeżany jest wyłącznie wzorzec.
smartb2bsync-enova.exe jest programem rozruchowym WinSW i nie może nadpisać
samego siebie podczas pracy.
-->
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/smartb2bsync-enova.xml" to="%BASE%\smartb2bsync-enova.xml" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/install.cmd" to="%BASE%\install.cmd" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/uninstall.cmd" to="%BASE%\uninstall.cmd" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.exe" to="%BASE%\..\SmartB2B.Enova.Service.exe" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.dll" to="%BASE%\..\SmartB2B.Enova.Service.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.deps.json" to="%BASE%\..\SmartB2B.Enova.Service.deps.json" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.runtimeconfig.json" to="%BASE%\..\SmartB2B.Enova.Service.runtimeconfig.json" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.pdb" to="%BASE%\..\SmartB2B.Enova.Service.pdb" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Sync.Contracts.dll" to="%BASE%\..\SmartB2B.Sync.Contracts.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Sync.Contracts.pdb" to="%BASE%\..\SmartB2B.Sync.Contracts.pdb" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Sync.Service.dll" to="%BASE%\..\SmartB2B.Sync.Service.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Sync.Service.pdb" to="%BASE%\..\SmartB2B.Sync.Service.pdb" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/adapters/SmartB2B.Enova.Adapter.dll" to="%BASE%\..\adapters\SmartB2B.Enova.Adapter.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Azure.Core.dll" to="%BASE%\..\Azure.Core.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Azure.Identity.dll" to="%BASE%\..\Azure.Identity.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Bcl.AsyncInterfaces.dll" to="%BASE%\..\Microsoft.Bcl.AsyncInterfaces.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Bcl.Memory.dll" to="%BASE%\..\Microsoft.Bcl.Memory.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Data.SqlClient.dll" to="%BASE%\..\Microsoft.Data.SqlClient.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Extensions.DependencyInjection.Abstractions.dll" to="%BASE%\..\Microsoft.Extensions.DependencyInjection.Abstractions.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Extensions.Logging.Abstractions.dll" to="%BASE%\..\Microsoft.Extensions.Logging.Abstractions.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Identity.Client.dll" to="%BASE%\..\Microsoft.Identity.Client.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Identity.Client.Extensions.Msal.dll" to="%BASE%\..\Microsoft.Identity.Client.Extensions.Msal.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Abstractions.dll" to="%BASE%\..\Microsoft.IdentityModel.Abstractions.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.JsonWebTokens.dll" to="%BASE%\..\Microsoft.IdentityModel.JsonWebTokens.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Logging.dll" to="%BASE%\..\Microsoft.IdentityModel.Logging.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Protocols.dll" to="%BASE%\..\Microsoft.IdentityModel.Protocols.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll" to="%BASE%\..\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Tokens.dll" to="%BASE%\..\Microsoft.IdentityModel.Tokens.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.SqlServer.Server.dll" to="%BASE%\..\Microsoft.SqlServer.Server.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.ClientModel.dll" to="%BASE%\..\System.ClientModel.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Configuration.ConfigurationManager.dll" to="%BASE%\..\System.Configuration.ConfigurationManager.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Diagnostics.EventLog.dll" to="%BASE%\..\System.Diagnostics.EventLog.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.IdentityModel.Tokens.Jwt.dll" to="%BASE%\..\System.IdentityModel.Tokens.Jwt.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Memory.Data.dll" to="%BASE%\..\System.Memory.Data.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Runtime.Caching.dll" to="%BASE%\..\System.Runtime.Caching.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Security.Cryptography.ProtectedData.dll" to="%BASE%\..\System.Security.Cryptography.ProtectedData.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/de/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\de\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/es/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\es\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/fr/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\fr\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/it/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\it\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/ja/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\ja\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/ko/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\ko\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/pt-BR/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\pt-BR\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/ru/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\ru\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/zh-Hans/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\zh-Hans\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/zh-Hant/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\zh-Hant\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/unix/lib/net8.0/Microsoft.Data.SqlClient.dll" to="%BASE%\..\runtimes\unix\lib\net8.0\Microsoft.Data.SqlClient.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win/lib/net8.0/Microsoft.Data.SqlClient.dll" to="%BASE%\..\runtimes\win\lib\net8.0\Microsoft.Data.SqlClient.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll" to="%BASE%\..\runtimes\win\lib\net8.0\System.Diagnostics.EventLog.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll" to="%BASE%\..\runtimes\win\lib\net8.0\System.Diagnostics.EventLog.Messages.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win/lib/net8.0/System.Runtime.Caching.dll" to="%BASE%\..\runtimes\win\lib\net8.0\System.Runtime.Caching.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win-arm/native/Microsoft.Data.SqlClient.SNI.dll" to="%BASE%\..\runtimes\win-arm\native\Microsoft.Data.SqlClient.SNI.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win-arm64/native/Microsoft.Data.SqlClient.SNI.dll" to="%BASE%\..\runtimes\win-arm64\native\Microsoft.Data.SqlClient.SNI.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.dll" to="%BASE%\..\runtimes\win-x64\native\Microsoft.Data.SqlClient.SNI.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.dll" to="%BASE%\..\runtimes\win-x86\native\Microsoft.Data.SqlClient.SNI.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Newtonsoft.Json.dll" to="%BASE%\..\Newtonsoft.Json.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/NewtonsoftMessagePack.dll" to="%BASE%\..\NewtonsoftMessagePack.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Sentry.dll" to="%BASE%\..\Sentry.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Reactive.dll" to="%BASE%\..\System.Reactive.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Runtime.InteropServices.WindowsRuntime.dll" to="%BASE%\..\System.Runtime.InteropServices.WindowsRuntime.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.dll" to="%BASE%\..\WampSharp.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.Default.Client.dll" to="%BASE%\..\WampSharp.Default.Client.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.NewtonsoftJson.dll" to="%BASE%\..\WampSharp.NewtonsoftJson.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.NewtonsoftMessagePack.dll" to="%BASE%\..\WampSharp.NewtonsoftMessagePack.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.WebSockets.dll" to="%BASE%\..\WampSharp.WebSockets.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/config/enova.json.sample" to="%BASE%\..\config\enova.json.sample" failOnError="false" />
</service>

24
daemon-optima/install.cmd Normal file
View File

@@ -0,0 +1,24 @@
@echo off
setlocal
cd /d "%~dp0"
if not exist "smartb2bsync-optima.exe" (
echo Brak smartb2bsync-optima.exe. Najpierw uruchom publish-optima.ps1.
exit /b 1
)
if not exist "..\config" mkdir "..\config"
if not exist "..\config\optima.json" (
if not exist "..\config\optima.json.sample" (
echo Brak ..\config\optima.json.sample.
exit /b 1
)
copy /Y "..\config\optima.json.sample" "..\config\optima.json" >nul
echo Utworzono lokalna konfiguracje ..\config\optima.json.
)
smartb2bsync-optima.exe install
if errorlevel 1 exit /b %errorlevel%
smartb2bsync-optima.exe start
exit /b %errorlevel%

View File

@@ -0,0 +1,14 @@
<service>
<id>smartb2bsync-optima</id>
<name>SmartB2B SYNC - Comarch ERP Optima</name>
<description>Synchronizuje Comarch ERP Optima z portalem SmartB2B.</description>
<executable>%BASE%\..\SmartB2B.Optima.Service.exe</executable>
<workingdirectory>%BASE%\..</workingdirectory>
<!-- <arguments>/verbose</arguments> -->
<stoptimeout>45sec</stoptimeout>
<log mode="roll-by-time">
<pattern>yyyyMMdd</pattern>
</log>
<onfailure action="restart" delay="10 sec" />
<delayedAutoStart />
</service>

View File

@@ -0,0 +1,7 @@
@echo off
setlocal
cd /d "%~dp0"
smartb2bsync-optima.exe stop
smartb2bsync-optima.exe uninstall
exit /b %errorlevel%

View File

@@ -1,44 +0,0 @@
<service>
<id>smartb2bsync-enova</id>
<name>SmartB2B SYNC - enova365</name>
<description>Synchronizuje enova365 z portalem SmartB2B.</description>
<executable>%BASE%\..\SmartB2B.Enova.Service.exe</executable>
<workingdirectory>%BASE%\..</workingdirectory>
<stoptimeout>30sec</stoptimeout>
<log mode="roll-by-time">
<pattern>yyyyMMdd</pattern>
</log>
<onfailure action="restart" delay="10 sec" />
<delayedAutoStart />
<!--
WinSW pobiera te pliki przed uruchomieniem usługi. Lokalny plik
config\enova.json nie jest aktualizowany; odświeżany jest wyłącznie wzorzec.
smartb2bsync-enova.exe jest programem rozruchowym WinSW i nie może nadpisać
samego siebie podczas pracy.
-->
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/smartb2bsync-enova.xml" to="%BASE%\smartb2bsync-enova.xml" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/install.cmd" to="%BASE%\install.cmd" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/uninstall.cmd" to="%BASE%\uninstall.cmd" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.exe" to="%BASE%\..\SmartB2B.Enova.Service.exe" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.dll" to="%BASE%\..\SmartB2B.Enova.Service.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.deps.json" to="%BASE%\..\SmartB2B.Enova.Service.deps.json" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.runtimeconfig.json" to="%BASE%\..\SmartB2B.Enova.Service.runtimeconfig.json" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.pdb" to="%BASE%\..\SmartB2B.Enova.Service.pdb" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Contracts.dll" to="%BASE%\..\SmartB2B.Enova.Contracts.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Contracts.pdb" to="%BASE%\..\SmartB2B.Enova.Contracts.pdb" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/adapters/SmartB2B.Enova.Adapter.dll" to="%BASE%\..\adapters\SmartB2B.Enova.Adapter.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Newtonsoft.Json.dll" to="%BASE%\..\Newtonsoft.Json.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/NewtonsoftMessagePack.dll" to="%BASE%\..\NewtonsoftMessagePack.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Reactive.dll" to="%BASE%\..\System.Reactive.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Runtime.InteropServices.WindowsRuntime.dll" to="%BASE%\..\System.Runtime.InteropServices.WindowsRuntime.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.dll" to="%BASE%\..\WampSharp.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.Default.Client.dll" to="%BASE%\..\WampSharp.Default.Client.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.NewtonsoftJson.dll" to="%BASE%\..\WampSharp.NewtonsoftJson.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.NewtonsoftMessagePack.dll" to="%BASE%\..\WampSharp.NewtonsoftMessagePack.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.WebSockets.dll" to="%BASE%\..\WampSharp.WebSockets.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/config/enova.json.sample" to="%BASE%\..\config\enova.json.sample" failOnError="false" />
</service>

View File

@@ -1,5 +1,5 @@
param(
[string]$OutputPath = (Join-Path $PSScriptRoot "release"),
[string]$OutputPath = (Join-Path $PSScriptRoot "release-enova"),
[ValidateSet("Debug", "Release")]
[string]$Configuration = "Release"
)
@@ -10,19 +10,18 @@ $env:APPDATA = $PSScriptRoot
$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = "1"
$env:DOTNET_CLI_TELEMETRY_OPTOUT = "1"
$bundledDotnet = Join-Path $PSScriptRoot "..\..\..\test1\.dotnet\dotnet.exe"
$dotnet = if (Test-Path -LiteralPath $bundledDotnet) {
(Resolve-Path $bundledDotnet).Path
} else {
(Get-Command dotnet -ErrorAction Stop).Source
}
$dotnet = (Get-Command dotnet -ErrorAction Stop).Source
$project = Join-Path $PSScriptRoot "src\SmartB2B.Enova.Service\SmartB2B.Enova.Service.csproj"
$daemonSource = Join-Path $PSScriptRoot "daemon"
$adapterProject = Join-Path $PSScriptRoot "src\SmartB2B.Enova.Adapter\SmartB2B.Enova.Adapter.csproj"
$daemonSource = Join-Path $PSScriptRoot "daemon-enova"
$winSwSource = Resolve-Path (Join-Path $daemonSource "smartb2bsync-enova.exe")
$output = [System.IO.Path]::GetFullPath($OutputPath)
$workspace = [System.IO.Path]::GetFullPath($PSScriptRoot)
$daemonOutput = Join-Path $output "daemon"
if ($output -eq [System.IO.Path]::GetPathRoot($output) -or $output.Length -lt 10) {
if (-not $output.StartsWith($workspace, [StringComparison]::OrdinalIgnoreCase) -or
$output -eq $workspace -or
$output.Length -lt 10) {
throw "Niebezpieczna ścieżka wyjściowa: $output"
}
@@ -33,7 +32,12 @@ if (Test-Path -LiteralPath $output) {
New-Item -ItemType Directory -Force -Path $output | Out-Null
New-Item -ItemType Directory -Force -Path $daemonOutput | Out-Null
& $dotnet publish $project -c $Configuration --no-restore -o $output
& $dotnet restore $adapterProject
if ($LASTEXITCODE -ne 0) {
throw "Przywracanie pakietów adaptera Enovy nie powiodło się."
}
& $dotnet publish $project -c $Configuration -o $output
if ($LASTEXITCODE -ne 0) {
throw "Publikowanie usługi nie powiodło się."
}

82
publish-optima.ps1 Normal file
View File

@@ -0,0 +1,82 @@
param(
[string]$OutputPath = (Join-Path $PSScriptRoot "release-optima"),
[ValidateSet("Debug", "Release")]
[string]$Configuration = "Release",
[ValidateSet("x86", "x64")]
[string]$Architecture = "x86"
)
$ErrorActionPreference = "Stop"
$env:DOTNET_CLI_HOME = $PSScriptRoot
$env:APPDATA = $PSScriptRoot
$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = "1"
$env:DOTNET_CLI_TELEMETRY_OPTOUT = "1"
$dotnet = (Get-Command dotnet -ErrorAction Stop).Source
$project = Join-Path $PSScriptRoot "src\SmartB2B.Optima.Service\SmartB2B.Optima.Service.csproj"
$daemonSource = Join-Path $PSScriptRoot "daemon-optima"
$winSwSource = Resolve-Path (Join-Path $daemonSource "smartb2bsync-optima.exe")
$output = [System.IO.Path]::GetFullPath($OutputPath)
$workspace = [System.IO.Path]::GetFullPath($PSScriptRoot)
$daemonOutput = Join-Path $output "daemon"
$runtimeIdentifier = "win-$Architecture"
if (-not $output.StartsWith($workspace, [StringComparison]::OrdinalIgnoreCase) -or
$output -eq $workspace -or
$output.Length -lt 10) {
throw "Niebezpieczna ścieżka wyjściowa: $output"
}
if (Test-Path -LiteralPath $output) {
Remove-Item -LiteralPath $output -Recurse -Force
}
New-Item -ItemType Directory -Force -Path $output | Out-Null
New-Item -ItemType Directory -Force -Path $daemonOutput | Out-Null
& $dotnet publish $project -c $Configuration -r $runtimeIdentifier --self-contained true -p:PlatformTarget=$Architecture -o $output
if ($LASTEXITCODE -ne 0) {
throw "Publikowanie usługi Optimy nie powiodło się."
}
Copy-Item $winSwSource (Join-Path $daemonOutput "smartb2bsync-optima.exe") -Force
Copy-Item (Join-Path $daemonSource "smartb2bsync-optima.xml") $daemonOutput -Force
Copy-Item (Join-Path $daemonSource "install.cmd") $daemonOutput -Force
Copy-Item (Join-Path $daemonSource "uninstall.cmd") $daemonOutput -Force
$downloadBaseUrl = "https://demo.smartb2b.eu/files/smartb2b-sync-optima/"
$manifestPath = Join-Path $daemonOutput "smartb2bsync-optima.xml"
[xml]$manifest = Get-Content -Raw $manifestPath
$packagedFiles = @(
Get-ChildItem -Recurse -File $output |
ForEach-Object { $_.FullName.Substring($output.Length).TrimStart('\') } |
Where-Object { $_ -ne "daemon\smartb2bsync-optima.exe" } |
Sort-Object
)
foreach ($relativePath in $packagedFiles) {
$download = $manifest.CreateElement("download")
$urlPath = $relativePath.Replace('\', '/')
$destination = if ($relativePath.StartsWith("daemon\", [StringComparison]::OrdinalIgnoreCase)) {
"%BASE%\" + $relativePath.Substring("daemon\".Length)
} else {
"%BASE%\..\" + $relativePath
}
$download.SetAttribute("from", $downloadBaseUrl + $urlPath)
$download.SetAttribute("to", $destination)
$download.SetAttribute("failOnError", "false")
[void]$manifest.service.AppendChild($download)
}
$settings = [System.Xml.XmlWriterSettings]::new()
$settings.Indent = $true
$settings.Encoding = [System.Text.UTF8Encoding]::new($false)
$writer = [System.Xml.XmlWriter]::Create($manifestPath, $settings)
try {
$manifest.Save($writer)
} finally {
$writer.Dispose()
}
Write-Host "Gotowa usługa Optimy (self-contained $runtimeIdentifier): $output"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
release-enova/Sentry.dll Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -17,6 +17,9 @@
"connectionString": "Server=...;Database=...;User ID=...;Password=...;TrustServerCertificate=True",
"commandTimeoutSeconds": 30
},
"sentry": {
"dsn": "https://9ae7cbe5e29f4a85b2a748a78e55a868@glitchtip.glebocka.synology.me/10"
},
"diagnostics": {
"logDirectory": "daemon",
"logPrefix": "smartb2bsync-enova"

View File

@@ -3,7 +3,7 @@ setlocal
cd /d "%~dp0"
if not exist "smartb2bsync-enova.exe" (
echo Brak smartb2bsync-enova.exe. Najpierw uruchom publish.ps1.
echo Brak smartb2bsync-enova.exe. Najpierw uruchom publish-enova.ps1.
exit /b 1
)

Binary file not shown.

View File

@@ -0,0 +1,94 @@
<service>
<id>smartb2bsync-enova</id>
<name>SmartB2B SYNC - enova365</name>
<description>Synchronizuje enova365 z portalem SmartB2B.</description>
<executable>%BASE%\..\SmartB2B.Enova.Service.exe</executable>
<workingdirectory>%BASE%\..</workingdirectory>
<!-- Odkomentuj, aby włączyć logowanie etapów Enovy i diagnostykę Sentry. -->
<!-- <arguments>/verbose</arguments> -->
<stoptimeout>30sec</stoptimeout>
<log mode="roll-by-time">
<pattern>yyyyMMdd</pattern>
</log>
<onfailure action="restart" delay="10 sec" />
<delayedAutoStart />
<!--
WinSW pobiera te pliki przed uruchomieniem usługi. Lokalny plik
config\enova.json nie jest aktualizowany; odświeżany jest wyłącznie wzorzec.
smartb2bsync-enova.exe jest programem rozruchowym WinSW i nie może nadpisać
samego siebie podczas pracy.
-->
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/smartb2bsync-enova.xml" to="%BASE%\smartb2bsync-enova.xml" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/install.cmd" to="%BASE%\install.cmd" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/daemon/uninstall.cmd" to="%BASE%\uninstall.cmd" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.exe" to="%BASE%\..\SmartB2B.Enova.Service.exe" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.dll" to="%BASE%\..\SmartB2B.Enova.Service.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.deps.json" to="%BASE%\..\SmartB2B.Enova.Service.deps.json" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.runtimeconfig.json" to="%BASE%\..\SmartB2B.Enova.Service.runtimeconfig.json" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Enova.Service.pdb" to="%BASE%\..\SmartB2B.Enova.Service.pdb" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Sync.Contracts.dll" to="%BASE%\..\SmartB2B.Sync.Contracts.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Sync.Contracts.pdb" to="%BASE%\..\SmartB2B.Sync.Contracts.pdb" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Sync.Service.dll" to="%BASE%\..\SmartB2B.Sync.Service.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/SmartB2B.Sync.Service.pdb" to="%BASE%\..\SmartB2B.Sync.Service.pdb" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/adapters/SmartB2B.Enova.Adapter.dll" to="%BASE%\..\adapters\SmartB2B.Enova.Adapter.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Azure.Core.dll" to="%BASE%\..\Azure.Core.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Azure.Identity.dll" to="%BASE%\..\Azure.Identity.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Bcl.AsyncInterfaces.dll" to="%BASE%\..\Microsoft.Bcl.AsyncInterfaces.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Bcl.Memory.dll" to="%BASE%\..\Microsoft.Bcl.Memory.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Data.SqlClient.dll" to="%BASE%\..\Microsoft.Data.SqlClient.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Extensions.DependencyInjection.Abstractions.dll" to="%BASE%\..\Microsoft.Extensions.DependencyInjection.Abstractions.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Extensions.Logging.Abstractions.dll" to="%BASE%\..\Microsoft.Extensions.Logging.Abstractions.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Identity.Client.dll" to="%BASE%\..\Microsoft.Identity.Client.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.Identity.Client.Extensions.Msal.dll" to="%BASE%\..\Microsoft.Identity.Client.Extensions.Msal.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Abstractions.dll" to="%BASE%\..\Microsoft.IdentityModel.Abstractions.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.JsonWebTokens.dll" to="%BASE%\..\Microsoft.IdentityModel.JsonWebTokens.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Logging.dll" to="%BASE%\..\Microsoft.IdentityModel.Logging.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Protocols.dll" to="%BASE%\..\Microsoft.IdentityModel.Protocols.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll" to="%BASE%\..\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.IdentityModel.Tokens.dll" to="%BASE%\..\Microsoft.IdentityModel.Tokens.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Microsoft.SqlServer.Server.dll" to="%BASE%\..\Microsoft.SqlServer.Server.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.ClientModel.dll" to="%BASE%\..\System.ClientModel.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Configuration.ConfigurationManager.dll" to="%BASE%\..\System.Configuration.ConfigurationManager.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Diagnostics.EventLog.dll" to="%BASE%\..\System.Diagnostics.EventLog.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.IdentityModel.Tokens.Jwt.dll" to="%BASE%\..\System.IdentityModel.Tokens.Jwt.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Memory.Data.dll" to="%BASE%\..\System.Memory.Data.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Runtime.Caching.dll" to="%BASE%\..\System.Runtime.Caching.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Security.Cryptography.ProtectedData.dll" to="%BASE%\..\System.Security.Cryptography.ProtectedData.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/de/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\de\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/es/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\es\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/fr/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\fr\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/it/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\it\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/ja/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\ja\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/ko/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\ko\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/pt-BR/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\pt-BR\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/ru/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\ru\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/zh-Hans/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\zh-Hans\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/zh-Hant/Microsoft.Data.SqlClient.resources.dll" to="%BASE%\..\zh-Hant\Microsoft.Data.SqlClient.resources.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/unix/lib/net8.0/Microsoft.Data.SqlClient.dll" to="%BASE%\..\runtimes\unix\lib\net8.0\Microsoft.Data.SqlClient.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win/lib/net8.0/Microsoft.Data.SqlClient.dll" to="%BASE%\..\runtimes\win\lib\net8.0\Microsoft.Data.SqlClient.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll" to="%BASE%\..\runtimes\win\lib\net8.0\System.Diagnostics.EventLog.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll" to="%BASE%\..\runtimes\win\lib\net8.0\System.Diagnostics.EventLog.Messages.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win/lib/net8.0/System.Runtime.Caching.dll" to="%BASE%\..\runtimes\win\lib\net8.0\System.Runtime.Caching.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win-arm/native/Microsoft.Data.SqlClient.SNI.dll" to="%BASE%\..\runtimes\win-arm\native\Microsoft.Data.SqlClient.SNI.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win-arm64/native/Microsoft.Data.SqlClient.SNI.dll" to="%BASE%\..\runtimes\win-arm64\native\Microsoft.Data.SqlClient.SNI.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.dll" to="%BASE%\..\runtimes\win-x64\native\Microsoft.Data.SqlClient.SNI.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.dll" to="%BASE%\..\runtimes\win-x86\native\Microsoft.Data.SqlClient.SNI.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Newtonsoft.Json.dll" to="%BASE%\..\Newtonsoft.Json.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/NewtonsoftMessagePack.dll" to="%BASE%\..\NewtonsoftMessagePack.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/Sentry.dll" to="%BASE%\..\Sentry.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Reactive.dll" to="%BASE%\..\System.Reactive.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/System.Runtime.InteropServices.WindowsRuntime.dll" to="%BASE%\..\System.Runtime.InteropServices.WindowsRuntime.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.dll" to="%BASE%\..\WampSharp.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.Default.Client.dll" to="%BASE%\..\WampSharp.Default.Client.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.NewtonsoftJson.dll" to="%BASE%\..\WampSharp.NewtonsoftJson.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.NewtonsoftMessagePack.dll" to="%BASE%\..\WampSharp.NewtonsoftMessagePack.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/WampSharp.WebSockets.dll" to="%BASE%\..\WampSharp.WebSockets.dll" failOnError="false" />
<download from="https://demo.smartb2b.eu/files/smartb2b-sync-enova/config/enova.json.sample" to="%BASE%\..\config\enova.json.sample" failOnError="false" />
</service>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More