Informacje o wersji 1.15.8.0
z dn. 31-07-2026
W tej wersji
- Obsługa dwóch ról systemowych
- Logowanie SSO i synchronizacja AD w TenantsAdmin SPA
- Docker: konfiguracja NLog
- Akcje dla przycisków zapisu inline
- Akcja synchronizacji
- Uprawnienie PBA do wykonywania zapytań
- Modernizacja innych funkcjonalności
- Rozwiązane problemy
- Wskazówka: JavaScript i kontrolki formularza
Wymagane działania
- Zmiana algorytmów szyfrujących :
W związku ze zmianą algorytmu szyfrującego w nAxiom na AES-GCM przed aktualizacją do wersji 1.15.8 należy obowiązkowo wykonać kopię zapasową bazy danych.
Kompatybilność aplikacji
Migracja aplikacji jest możliwa tylko między wersjami nAxiom kompatybilnymi na poziomie bazy danych.
Bieżąca wersja bazy danych: 20260715135023
W tej wersji nAxiom struktura bazy danych zmieniła się. Przed migracją aplikacji do tej wersji wymagane jest zaktualizowanie środowiska źródłowego.
Nowe i rozszerzone funkcjonalności
1. Obsługa dwóch ról systemowych
W profilu użytkownika dodano obsługę dwóch ról systemowych (konsultant/klient). Użytkownik, który będzie miał dwie role systemowe, będzie mógł się przełączać między aplikacjami Admin SPA i Front SPA, używając poleceń dostępnych w menu wyświetlanym po kliknięciu profilu użytkownika w prawym górnym rogu.
2. Akcje dla przycisku zapisu inline
W definicji przycisków zapisu dla edycji inline (w wierszu i w nagłówku listy) dodano możliwość przypisania zestawu akcji, podobnie jak dla innych przycisków na liście i w formularzu nAxiom. Zmiana ma na celu umożliwienie uruchomienia akcji odświeżania sekcji formularza po zapisie zmian w rekordach listy.
3. Logowanie SSO i synchronizacja AD w TenantsAdmin SPA
W aplikacji TenantsAdmin SPA dodano obsługę SSO oraz możliwość synchronizacji administratorów z usługami katalogowymi. Funkcjonalności konfiguruje się, wklejając odpowiednie dane w formacie JSON w okna edytora kodu w sekcji Global Settings. Poniżej pokazano przykłady konfiguracji.
Synchronizacja użytkowników:
{
"RepeatInterval": 3600,
"Configuration": {
"Path": "naxiom.local",
"User": "naxiom",
"Password": "encrypted-password",
"Domain": "naxiom.local",
"Host": "naxiom.local",
"Port": 636,
"SSL": true,
"BaseDN": "DC=naxiom,DC=local",
"SearchScope": "Subtree",
"Filter": "(memberOf=CN=TENANT_ADMIN,CN=Groups,DC=naxiom,DC=local)",
"LdapType": "ActiveDirectory"
}
}
Logowanie SSO:
{
"UseExternalLogin": true,
"AutomaticRedirect": false,
"AuthenticationScheme": "oidc",
"DisplayName": "Logowanie ADFS",
"SignInScheme": "idsrv.external",
"Authority": "https://adfs.naxiom.local/adfs",
"ClientId": "client-id",
"ClientSecret": "client-secret",
"ResponseType": "code",
"ResponseMode": "form_post",
"SaveTokens": true,
"GetClaimsFromUserInfoEndpoint": true,
"UsePkce": true,
"MapInboundClaims": false,
"AcrValue": "",
"Scopes": [
"openid"
],
"RequireHttpsMetadata": true,
"ClaimTypeInExternalToken": "nax_id"
}
4. Docker: konfiguracja NLog
W konfiguracji NLog dla obrazów Docker dodano możliwość niezależnego określenia poziomu logowania na konsolę dla wybranych kategorii logów za pomocą dwóch zmiennych:
-
SqlServerConsoleLoggerLevel - obsługuje kategorie:
- Microsoft.EntityFrameworkCore.Database.*
- Microsoft.Data.SqlClient*
-
HealthChecksConsoleLoggerLevel - obsługuje kategorie:
- Microsoft.Extensions.Diagnostics.HealthChecks*
- Shared.HealthChecks.*
Zmienne umożliwiają niezależne zwiększenie szczegółowości logowania dla komponentów SQL Server oraz Health Checks względem globalnego poziomu WildcardConsoleLoggerLevel.
5. Akcja synchronizacji
Dodano akcję Wywołaj synchronizację struktury organizacyjnej. Akcja umożliwia uruchamianie synchronizacji ręczne lub automatycznie jako zadania cykliczne.
Akcja może uruchomić synchronizację w trzech trybach:
- LDAP - według konfiguracji serwera LDAP w ustawieniach systemowych
- SQL - z wykorzystaniem tabel pomocniczych core.SyncOUInstances i core.SyncOUInstanceUsers
- LDAP+SQL - z możliwością podania zapytania SQL, które przetworzy dane przed synchronizacją na podstawie tabel systemowych SQL.
W trybie SQL weryfikowane są statusy danych w tabelach do synchronizacji w taki sam sposób jak robi to mechanizm uruchamiany cyklicznie przez TaskService.
Podstawą synchronizacji jest konfiguracja synchronizacji dla danego tenanta.
W przypadku synchronizacji ról biznesowych użycie akcji wymaga uprawnienia PBA Przegląd aplikacji w module AdminSPA.
Aby wyzwalać synchronizację tylko za pomocą akcji i wyłączyć dostępny do tej pory tryb automatyczny, Należy w konfiguracji ustawić wartość 0 dla parametru RepeatInterval.
6. Uprawnienie PBA do wykonywania zapytań SQL
W gałęzi Budowanie aplikacji dodano uprawnienie Wykonywanie zapytań SQL. To uprawnienie jest konieczne, aby testowo wykonywać zapytania w Admin SPA i Workflow SPA.
7. Zamiana @_MobileType na @_DeviceType
Zaimplementowano pakiet device-detector-js i dodano nowy parametr systemowy @_DeviceType. Parametr ten zastępuje parametr @_MobileMode i może przyjmować następujące wartości: desktop, tablet, smartphone i unknown. Celem parametru jest umożliwienie stosowania warunków widoczności kolumn listy, zależnie od rodzaju urządzenia używanego przez użytkownika.
Zmiana wymaga aktualizacji wszystkich warunków widoczności kolumn, w których używano parametru @_MobileMode. Listę takich kolumn zwraca następujące zapytanie:
SELECT
g.Id AS [GridId],
g.[Code] AS [GridCode],
gc.[ColumnName] AS [ColumnName]
FROM [core].[Grids] g
INNER JOIN [core].[GridColumns] gc ON g.Id = gc.GridDataId
WHERE gc.[VisibilitySql] like '%MobileMode%'
SELECT
f.Id AS [FormId],
f.[Code] AS [FormCode],
fr.[Code] AS [FormRowCode],
fc.[Code] AS [FormColumnCode],
fs.[Code] AS [FormSectionCode],
ff.[Code] AS [FormFieldCode]
FROM [core].[FormFields] ff
INNER JOIN [core].[FormSections] fs ON fs.Id = ff.FormSectionId
INNER JOIN [core].[FormCols] fc ON fc.Id = fs.FormColId
INNER JOIN [core].[FormRows] fr ON fr.Id = fc.FormRowId
INNER JOIN [core].[Forms] f ON f.Id = fr.FormDefinitionId
WHERE ff.[SqlCondition] like '%MobileMode%'
SELECT
g.Id AS [GridId],
g.Code AS [GridCode],
t.Value AS [GridToolbarButtonName]
FROM [core].[GridButtons] gb
INNER JOIN [core].[Grids] g ON g.Id = gb.GridDataId
INNER JOIN [core].[TranslationDefinitions] td ON gb.Label = td.Guid
INNER JOIN [core].Translations t ON t.TranslationDefinitionId = td.Id AND t.LanguageId = 1
WHERE gb.[AvailabilityScript] like '%MobileMode%'
SELECT
g.Id AS [GridId],
g.Code AS [GridCode],
t.Value AS [GridInlineButtonName]
FROM [core].[GridInlineButton] gib
INNER JOIN [core].[GridInlineSettings] gis ON gib.GridInlineSettingsId = gis.Id
INNER JOIN [core].[Grids] g ON g.Id = gis.GridDataId
LEFT JOIN [core].[TranslationDefinitions] td ON ISNULL(NULLIF(gib.Label, ''), null) = td.Guid
INNER JOIN [core].Translations t ON t.TranslationDefinitionId = td.Id AND t.LanguageId = 1
WHERE gib.[AvailabilityScript] like '%MobileMode%'
8. Synchronizacja ról systemowych
Funkcjonalność synchronizacji użytkowników z LDAP rozszerzono o obsługę roli systemowej konsultant. Od strony konfiguracji wykorzystywany jest mechanizm mapowania grup domenowych na role biznesowe, kody CONSULTANT i CLIENT są zastrzeżone dla ról systemowych. Na przykład:
{
"GroupsToRoleMapping": [
{
"RoleCode": "CONSULTANT",
"GroupNames": [
"Konsultanci"
]
},
{
"RoleCode": "CLIENT",
"GroupNames": [
"Pracownicy"
]
}
]
}
W przypadku braku mapowania na role systemowe, zostanie użyty atrybut SystemRoleCode.
9. Zmiana algorytmów szyfrujących
Zaimplementowano algorytm szyfrujący AES-GCM, który ma wbudowaną obsługę kontroli integralności danych przed odszyfrowaniem. Ponadto wstępnie zaszyfrowano wartości domyślne w plikach appsettings-protected.json nowym algorytmem.
Ważne
Chociaż archiwizacja bazy danych przed aktualizacją jest ogólnie przyjętą dobrą praktyką, w związku ze zmianą algorytmu szyfrującego zalecenie archiwizacji bazy danych przed aktualizacją do wersji 1.15.8 należy potraktować jako obowiązkowe.
Rozwiązane problemy
-
W akcji importu dokumentów poprawiono obsługę wartości NULL w przypadku, kiedy do mapowania użyto trybu tekstowego hybrydowego pola wprowadzania (TXT/SQL).
-
Poprawiono błąd walidacji konfiguracji akcji generowania PDF z szablonu Word.
-
Dla kolumn typu int zmieniono typ wyniku funkcji sumowania w stopce z int na bigint oraz dodano obsługę błędu przekroczenia zakresu w funkcji agregacyjnej użytej w stopce listy. W takim przypadku zostanie wyświetlony komunikat o błędzie. Wcześniej w takiej sytuacji lista nie wyświetlała się.
-
Poprawiono działanie funkcjonalności Malarz uprawnień w uprawnieniach formularza w zakresie kopiowania kolumn.
-
Poprawiono błąd, który powodował, że używając funkcji zależności dla listy rozwijanej nie można było ustawić wartości na innej liście rozwijanej, która miało wyłączoną widoczność i włączony przełącznik
Pole dostępne w przeglądarce nawet jak niewidoczne. -
Poprawiono działanie przełączania między formularzami we Front SPA, eliminując przypadki ponownego wyświetlania formularza wyświetlanego poprzednio zamiast poprawnego formularza wywoływanego przez użytkownika.
-
Poprawiono mechanizm konfiguracji dozwolonych typów załączników w aplikacji TenantsAdmin SPA w przypadku, gdy administrator chce wyłączyć walidację (wyczyścić listę dozwolonych formatów).
-
Poprawiono obsługę akcji otwórz formularz uruchamianej w wyniku interakcji z wierszem listy.
-
Poprawiono obsługę kolorów sekcji formularza w przypadku użycia formularza jako widżetu.
-
Poprawiono obsługę sterowania widocznością sekcji za pomocą skryptu na zmianę kontekstu formularza. Poprawka dotyczy sytuacji, kiedy wyłączenie widoczności sekcji powodowało przełączanie trybu wyświetlania między dwiema sekcjami (widoczne zakładki - taby) i jedną sekcją (brak zakładek).
-
Poprawiono wyświetlanie list rozwijanych w oknie logów trybu serwisowego oraz zmianę wyglądu list i przycisków po wskazaniu ich kursorem myszy.
-
Usunięto błąd, który powodował nieprawidłowe odświeżenie formularza po kliknięciu w wolnym obszarze sekcji typu lista.
-
Usunięto błąd, który powodował, że po przeładowaniu strony w widoku mobilnym na telefonie menu witryny (ikona burger-menu) rozwijało się automatycznie.
-
Usunięto błąd, który powodował, że w przypadku, gdy w definicji listy dana kolumna występowała dwa razy - jako aktywna i nieaktywna - zmiana szerokości kolumny we Front SPA powodowała, że taka kolumna była wyświetlana dwukrotnie.
Dodatkowe informacje
-
W wersji 1.15.7.0, w związku z aktualizacją biblioteki Kendo, zmienił się sposób renderowania kontrolek w aplikacji Front SPA. Obecnie kontrolki Kendo renderowane są jako element hostujący zawierający właściwy element input.
W przypadkach zastosowania w formularzu własnego kodu JavaScript mającego na celu wstawianie danych do inputów kontrolek (np. z urządzeń peryferyjnych komputera) może być konieczne jego dostosowanie polegające na wprowadzeniu odwołań bezpośrednio do inputów kontrolek formularza.
Dla pola tekstowego
<kendo-textbox id="SerialNumber560" data-code="RPT-StockRotation-ccs75"> <input class="k-input-inner" type="text" placeholder="Miejsce na kod SN"> </kendo-textbox>Zalecanym rozwiązaniem jest wyszukiwanie kontrolki za pomocą stabilnego atrybutu data-code przechowującego kod kontrolki, a następnie pobranie znajdującego się w niej elementu input:
const textbox = document.querySelector('[data-code="RPT-StockRotation-ccs75"]'); const input = textbox.querySelector("input");Takie podejście jest niezależne od dynamicznie generowanych identyfikatorów i zapewnia poprawny dostęp do wartości kontrolki we wszystkich środowiskach.
Nieprawidłowa (zdeprecjonowana) instrukcja:
const sn_input = document.getElementById("SerialNumber560");zwraca element kendo-textbox (host), a nie pole wejściowe input. Operacje wykonywane bezpośrednio na wartości pola mogą więc działać nieprawidłowo.