Informacje o wersji 1.11.2.0 z dn. 03-07-2023
Ważne informacje
Role w jednostkach organizacyjnych i powiązane zmiany
W nAxiom 1.11.2.0 wprowadzono możliwość przypisywania użytkownikom ról biznesowych w obrębie jednostek struktury organizacyjnej, do których należą ci użytkownicy. Ta zmiana oraz szereg powiązanych zmian pozwala na przypisywanie użytkownikom uprawnień do instancji dokumentów odpowiednio do ich roli w konkretnej jednostce organizacyjnej. Szczegóły zmian opisano w dalszej części tych informacji, poniżej znajduje się tylko skrótowy wykaz tych zmian.
- W profilu użytkownika dodano możliwość przypisywania użytkownikowi roli biznesowej w jednostce organizacyjnej, do której należy użytkownik. W odniesieniu do dotychczasowych ról biznesowych będzie teraz używane określenie „rola globalna”.
-
Informacje o rolach w jednostkach są zapisywane w nowej tabeli core.OUInstanceUserRoles w trzech kolumnach: UserProfileId, OUInstanceId i RoleId. Informacje o globalnych rolach biznesowych pozostają zapisane w tabeli core.UserProfileRoles.
Obecnie role w jednostkach organizacyjnych nie są obsługiwane przez blok akceptacji. Prowadzona jest analiza możliwości wprowadzenia tej obsługi.
- Dodano dwie akcje:
- dodawanie do grup interesariuszy globalnej roli biznesowej
- dodawanie do grup interesariuszy roli biznesowej w jednostce organizacyjnej
-
W szablonach uprawnień ACL dla dokumentu i formularza oraz w uprawnieniach ACL dokumentu (FrontSPA) usunięto możliwość definiowania uprawnień dla roli biznesowej we wskazanej jednostce organizacyjnej.
W związku z tą zmianą nie będzie można edytować istniejących uprawnień dla roli we wskazanej jednostce. Uprawnienia te będą nadal działać i będą widoczne na listach uprawnień. Od tej wersji uprawnienia tego rodzaju można zastąpić odpowiednio skonfigurowanymi uprawnieniami dla grup interesariuszy oraz akcjami dodawania członków do grup interesariuszy.
- Zmieniono sposób walidacji uprawnień w przypadku szablonów definiowanych dla kilku ról biznesowych — obecnie status będzie obowiązywał dla użytkownika, który ma co najmniej jedną z zestawu ról. Do tej pory użytkownik musiał mieć przypisane wszystkie role biznesowe wskazane w szablonie.
Blok Start warunkowy
Planowane jest usunięcie bloku Start warunkowy z edytora diagramów procesów. Obecnie ten blok jest nieobsługiwany.
Nowe i zmodernizowane funkcje
Szablony uprawnień ACL
Zmieniono sposób definiowania uprawnień w definicji dokumentu biznesowego, w uprawnieniach formularza oraz w aplikacji FrontSPA w oknie dialogowym Aktualne uprawnienia dla dokumentu...
(wyświetlanym ikoną kluczyka) w ten sposób, że usunięto możliwość zdefiniowania uprawnienia dla roli ze wskazanej jednostki organizacyjnej (i jej podjednostek). Uprawnienia dla roli we wskazanej jednostce organizacyjnej będą działać jak do tej pory (o ile nie były zdefiniowane dla kilku ról), jednak ich edycja nie będzie możliwa.
Zmieniono sposób walidacji uprawnień przyznawanych użytkownikom z określonym zestawem ról. Do tej pory taki szablon obowiązywał dla użytkowników, którzy mieli przypisane wszystkie wskazane role. Obecnie szablon będzie obowiązywał użytkowników, którzy mają przypisaną co najmniej jedną ze wskazanego zestawu ról.
Profil użytkownika
W profilu użytkownika dodano możliwość przypisania użytkownikowi jednej roli biznesowej w każdej jednostce organizacyjnej, do której należy.
Informacje o rolach użytkownika w jednostkach organizacyjnych są zapisywane w nowej tabeli systemowej [core].[OUInstanceUserRoles]. Zawiera ona trzy kolumny: UserProfileId, OUInstanceId i RoleId.
Dodatkowo zmieniono istniejącą tabelę systemową [core].[OUInstanceUsers] w ten sposób, że usunięto z niej kolumnę Id. Kluczem głównym tej tabeli jest teraz para kolumn UserProfileId i OUInstanceId.
Dotychczasowe przypisania ról biznesowych (nazywanych teraz globalnymi) pozostają bez zmian w tabeli [core].[UserProfileRoles].
Przypisywanie ról w jednostkach jest również objęte uprawnieniem PBA Zmiana ról biznesowych użytkownika
.
Wsadowe przypisywanie ról w jednostkach
W związku z wprowadzeniem nowej tabeli core.OUInstanceUSerRoles opracowano skrypt core.convertGlobalRoleToBusinessRole, który umożliwia zasilenie tej tabeli danymi początkowymi. Parametrem wejściowym skryptu jest identyfikator roli. Skrypt wyszukuje wszystkich użytkowników z tą rolą i jednostki organizacyjne, do których są przypisani ci użytkownicy, a następnie wpisuje w tabeli core.OUInstanceUSerRoles identyfikator użytkownika, identyfikator jednostki organizacyjnej i podany identyfikator roli. Domyślnie skrypt usuwa także podaną rolę z ról globalnych użytkownika (tabela core.UserProfileRoles). Poniżej publikujemy treść skryptu.
CREATE PROCEDURE [core].[convertGlobalRoleToBusinessRole]
@roleId INT,
@remove_global_role BIT = 1
AS
BEGIN
INSERT INTO [core].[OUInstanceUserRoles]
( [UserProfileId], [OUInstanceId], [RoleId] )
SELECT distinct userRoles.UserProfileId,
ouUsers.OUInstanceId, userRoles.RoleId
FROM [core].[UserProfileRoles] userRoles
JOIN [core].[OUInstanceUsers] ouUsers
ON ouUsers.UserProfileId = userRoles.UserProfileId
JOIN [core].[Roles] roles
ON roles.Id = userRoles.RoleId and roles.Type = 1
LEFT JOIN [core].[OUInstanceUserRoles] ouRoles
ON ouRoles.OUInstanceId = ouUsers.OUInstanceId
AND userRoles.UserProfileId = ouRoles.UserProfileId
WHERE userRoles.[RoleId] = @roleId AND ouRoles.RoleId IS NULL;
IF (@remove_global_role = 1)
DELETE FROM [core].[UserProfileRoles]
WHERE [RoleId] = @roleId AND [UserProfileId] IN
(SELECT userRoles.UserProfileId
FROM [core].[UserProfileRoles] userRoles
JOIN [core].[OUInstanceUsers] ouUsers
ON ouUsers.UserProfileId = userRoles.UserProfileId
JOIN [core].[Roles] roles
ON roles.Id = userRoles.RoleId AND roles.Type = 1
WHERE [RoleId] = @roleId)
END;
Akcja dodania roli globalnej do grupy interesariuszy
Dodano akcję dodawania do grupy interesariuszy ról biznesowych (globalnych). Dodanie roli jest równoważne z dodaniem do grupy wszystkich użytkowników z tą rolą globalną. Akcja pozwala również usunąć rolę globalną (wskazaną lub wszystkie) z grupy interesariuszy. Akcja wymaga podania następujących parametrów:
- BusinessDocId: identyfikator definicji dokumentu; jeśli ma wartość null, akcja operuje na bieżącej instancji dokumentu.
- RecordId: identyfikator instancji dokumentu.
- StakeholderId: identyfikator grupy interesariuszy.
- Operation: rodzaj wykonywanej operacji; 0 - dodanie, 1 - usunięcie.
- GlobalRoleId: identyfikator roli biznesowej (globalnej); wymagane, oprócz sytuacji opisanej poniżej.
Ustawienie parametrów GlobalRoleId = null oraz Operation = 1 spowoduje usunięcie wszystkich ról globalnych z grupy interesariuszy dla wskazanej lub bieżącej instancji dokumentu.
Zależnie od konstrukcji zapytania, akcja może zmienić skład grupy interesariuszy dla wielu dokumentów. W zapytaniu obsługiwany jest operator UNION.
Akcja dodania roli w jednostce do grupy interesariuszy
Dodano akcję dodawania do grupy interesariuszy ról biznesowych w jednostkach organizacyjnych. Dodanie roli biznesowej w jednostce organizacyjnej do grupy interesariuszy jest równoważne dodaniu do tej grupy wszystkich użytkowników, którzy mają przypisaną podaną rolę biznesową w podanej jednostce organizacyjnej. Akcja pozwala również usunąć rolę w jednostce z grupy interesariuszy. Akcja wymaga podania następujących parametrów:
- BusinessDocId: identyfikator definicji dokumentu; jeśli ma wartość null, akcja operuje na bieżącej instancji dokumentu.
- RecordId: identyfikator instancji dokumentu.
- StakeholderId: identyfikator grupy interesariuszy.
- Operation: rodzaj wykonywanej operacji; 0 - dodanie, 1 - usunięcie.
- OUId: identyfikator jednostki organizacyjnej; wymagany, oprócz sytuacji opisanej poniżej.
- RoleId: identyfikator roli biznesowej; wymagany, oprócz sytuacji opisanej poniżej.
Ustawienie parametrów RoleId/OUId = null oraz Operation = 1 spowoduje usunięcie wszystkich ról w jednostkach z grupy interesariuszy dla wskazanej lub bieżącej instancji dokumentu.
Zależnie od konstrukcji zapytania, akcja może zmienić skład grupy interesariuszy dla wielu dokumentów. W zapytaniu obsługiwany jest operator UNION.
Kontrolka interesariuszy
Zmodyfikowano kontrolkę interesariuszy. Obecnie prezentuje ona użytkowników, role globalne oraz role w jednostkach organizacyjnych. Z poziomu kontrolki można usunąć rolę globalną lub rolę w jednostce, ale nie można ich dodać (służą do tego nowe akcje przypisywania interesariuszy dodane w tej wersji).
Zmodyfikowano także sposób prezentowania danych kontrolki w kontekście formularza, obecnie wykorzystuje się do tego tablicę StakeholdersData z identyfikatorami obiektów przypisanych do grupy interesariuszy podzielonymi na kategorie: UserIds, GlobalRoleIds i OrgUnitRoleIds.
Dodatkowo poprawiono sposób wyświetlania kontrolki, kiedy na ekranie nie ma miejsca do rozwinięcia listy z użytkownikami.
Funkcja zwracająca id jednostki organizacyjnej
Utworzono funkcję [core].[calculateOUId], która wylicza identyfikator jednostki organizacyjnej na podstawie przekazanych parametrów. Funkcji można używać wszędzie w definicji zapytań SQL w aplikacji AdminSPA. Parametry wejściowe do funkcji to:
- ouRootCode: (wymagany) kod jednostki organizacyjnej odniesienia; określa kontekst wyszukiwania żądanej jednostki organizacyjnej.
- userId: (opcjonalny) identyfikator użytkownika; jeśli jest podany, zwracany jest identyfikator jednostki, do której należy użytkownik.
-
orgUnitLevel: wartość liczbowa określająca poziom struktury organizacyjnej względem jednostki odniesienia; dopuszczalne wartości:
- 0 (lub NULL): funkcja zwraca id jednostki, do której należy użytkownik, w obrębie jednostki odniesienia i jej podjednostek.
- 1: funkcja zwraca id jednostki głównej w strukturze organizacyjnej, w której znajduje się jednostka odniesienia.
- -n (liczba ujemna): zwraca identyfikator jednostki nadrzędnej dla jednostki odniesienia na n-tym poziomie w stronę jednostki głównej; np. dla -1 zwraca identyfikator jednostki nadrzędnej dla jednostki odniesienia na następnym poziomie struktury organizacyjnej.
Funkcja zwraca następujące kody błędów (wartości ujemne):
- -1000: kod jednostki organizacyjnej odniesienia (parametr ouRootCode) nie został podany lub jest pusty.
- -1001: jednostka odniesienia o podanym kodzie nie istnieje lub użytkownik nie jest przypisany do tej jednostki.
- -1002: istnieje więcej niż jedna jednostka o podanym kodzie.
- -2000: użytkownik o podanym identyfikatorze nie istnieje.
- -3000: parametr orgUnitLevel ma nieprawidłową wartość (np. >1).
- -9999: wystąpił nieobsługiwany wyjątek.
Język dla funkcji UserTask_View
W ustawieniach systemu dodano parametr Domyślny język widoku 'Moje zadania'
. Jest on używany, jeśli w wywołaniu funkcji tabelarycznej UserTasks_View nie zostanie podany parametr @LangId. Dodatkowo, w bazie danych utworzono procedurę Refresh_ACLInstanceEntries_TranslateableData, która aktualizuje wersję językową danych zwracanych przez funkcję UserTasks_View (z tabeli ACLInstanceEntries w związku ze zmianami opisanymi w następnym punkcie). Jeśli procedura zostanie wywołana baz parametrów, odświeży dane zgodnie z ustawieniem domyślnym języka. Można ją także wywołać z podaniem identyfikatora języka w celu pobrania do wyświetlenia konkretnej wersji językowej danych.
EXEC [core].[Refresh_ACLInstanceEntries_TranslateableData] @LangId = 1
Lista języków znajduje się w tabeli [core].[Languages].
Tabela ACLInstanceEntries
Definicję tabeli [core].[ACLInstanceEntries] rozszerzono o wybrane kolumny systemowe z tabel dokumentów biznesowych. Tabele te zawierają zduplikowane dane z dokumentów biznesowych i służą do zasilenia funkcji tabelarycznej UserTask_View. Dane w tych kolumnach aktualizują się automatycznie, np. po zmianie statusu instancji dokumentu biznesowego.
W przypadku aktualizacji do bieżącej wersji nAxiom wykonywana jest automatycznie procedura core.Refresh_ACLInstanceEntries_DuplicatedData.
W związku z tymi zmianami zmieniła się definicja funkcji tabelarycznej UserTask_View, ale sposób jej wywołania pozostał taki sam:
SELECT * FROM core.UserTasks_View(@userId, @langId, @aclTemplateType)
gdzie:
- @userId: identyfikator użytkownika, którego zadania mają zostać pobrane;
- @langId: identyfikator języka (może mieć wartość NULL, ale nie można go pominąć);
-
@aclTemplateType: typ szablonu uprawnień;dostępne wartości:
-
Status: uwzględniane są tylko dokumenty, dla których zdefiniowano szablony uprawnień w statusach (karta
Uprawnienia - statusy
) -
Instance: uwzględniane są tylko dokumenty, dla których zdefiniowano ogólne szablony uprawnień (karta
Uprawnienia
) - InstanceWithStatus: uwzględniane są wszystkie dokumenty, dla których zdefiniowano szablony uprawnień, bez względu na ich rodzaj.
-
Status: uwzględniane są tylko dokumenty, dla których zdefiniowano szablony uprawnień w statusach (karta
Przy czym obecnie parametr @langId jest ignorowany (pozostawiono go ze względu na zgodność z wcześniejszymi wersjami). Wersja językowa danych zwracanych przez funkcję UserTask_View zależy od ustawienia systemowego Domyślny język widoku 'Moje zadania'
.
Aby zwrócić inną wersję językową danych, należy użyć nowej funkcji tabelarycznej core.UserTasksMultiLang_View, którą wywołuje się następująco:
SELECT * FROM core.UserTasksMultiLang_View(@userId, @langId, @aclTemplateType);
Ta funkcja zwraca wersję językową danych zgodną z wartością parametru @langId.
Zastępstwa
Funkcjonalność zastępstw rozszerzono o możliwość przypisywania osobie zastępującej ról w jednostkach organizacyjnych osoby zastępowanej. Ponadto zmieniono działanie przełącznika Dostęp do indywidualnych zadań
. Obecnie nie jest wymagane jego włączenie, aby zastępujący miał dostęp do dokumentów, dla których uprawnienia zastępowanego wynikały z bycia twórcą lub przynależności do grupy interesariuszy.
Należy pamiętać, że funkcjonalność zastępstw nie obejmuje uprawnień do akceptacji dokumentów konfigurowanych we właściwościach bloku akceptacji.
Lokalne wdrożenie kontenerów nAxiom
Opracowano skrypt automatyzujący procedurę wdrożenia nAxiom z obrazów dockerowych na komputerze lokalnym w systemie Windows z podsystemem WSL. Sposób użycia skryptu opisano w dodatku do artykułu Wdrożenie nAxiom z obrazów Docker.
Akcje na przejściach diagramu procesów
Dla przejść między blokami zadania ręcznego i decyzyjnym dodano obsługę akcji systemowych we właściwości Akcje uruchamiane przed
.
Podgląd załączników
Zmodyfikowano ustawienia sekcji podglądu załączników, aby umożliwić konfigurowanie zasad wyświetlania załączników w sekcji. Dostępne opcje wyświetlania to:
-
obecnie najnowszy
, -
obecnie najstarszy
, -
nic nie wyświetlaj (zresetuj podgląd)
, -
nie zmieniaj załącznika (zachowaj ostatni wyświetlony…)
.
Te opcje można ustawić osobno dla zdarzeń dodania załącznika, usunięcia załącznika i otwarcia formularza.
Audyt dodania/usunięcia interesariusza
Rozszerzono zapis zdarzenia audytu Interesariusz - usunięcie/dodanie o przypadki usunięcia z grupy interesariuszy wszystkich członków z określonej kategorii (wszystkich użytkowników, wszystkich ról globalnych lub wszystkich ról w jednostkach org.). Obecnie w kolumnie Value w tabeli core.AuditEventLogs dla zdarzenia zapisywany jest obiekt JSON, który zawiera trzy dodatkowe flagi:
{
"Stakeholder": {
"StakeholderId":9,
"OrgUnitRoleIds":[],
"AllOrgUnitRolesDeleted":true,
"AllGlobalRolesDeleted":false,
"AllUsersDeleted":false }
}
Dla zdarzenia usunięcia indywidualnych członków z grupy interesariuszy oraz dla zdarzenia dodania do grupy interesariuszy wszystkie flagi mają wartość false.
Indeksowanie obiektów dodawanych przez Public API
Dodano obsługę indeksowania dokumentów i załączników dodawanych przez interfejs Public API na potrzeby wyszukiwania pełnotekstowego (Elasticsearch).
Korzystanie z tej obsługi wymaga skonfigurowania połączenia z silnikiem Elasticsearch w pliku appsettings.json serwisu public-api, analogicznie jak dla serwisu internal-api.
Poprawki i usunięte błędy
Public API, endpoint /Document/ChangeStatus
Poprawiono działanie endpointa /Document/ChangeStatus w interfejsie Public API w ten sposób, że jeśli w żądaniu jest przekazywany identyfikator formularza, sekcja body żądania może być pusta. W takiej sytuacji inne akcje inicjowane przez to żądanie będą miały dostęp do modelu formularza o podanym identyfikatorze.
Ponadto, w przypadku akcji przypisanych do przejścia wywoływanego żądaniem poprawiono ich dostęp do parametrów BusinessDocId i FormId, jeśli te parametry nie są przesyłane w body żądania tylko pobierane na podstawie parametru FormId.
Należy pamiętać, że jeśli żądanie ma zostać wykonane na podstawie modelu danych przesłanego w body żądania, ten model musi zawierać wszystkie parametry wymagane przez akcje przypisane do przejścia wykonywanego żądaniem /Document/ChangeStatus.
Akcje przejść w podprocesach
Poprawiono dostęp do parametru BusinessDocId w akcjach ze zbioru Akcje wykonywane po
określonego dla pierwszego przejścia w podprocesie.
Widok listy
Poprawiono błąd, który powodował, że klauzula ORDER BY w zapytaniu źródłowym dla widoku listy była ignorowana.
Warunek wyświetlania przycisku
Poprawiono błąd wykonywania zapytania SQL zdefiniowanego w parametrze Warunek wyświetlania przycisku
, który występował, gdy dla określonego statusu na diagramie procesu były dwa przejścia z identycznym warunkiem.
Podgląd załączników PDF
Zmodyfikowano sposób wczytywania podglądu załączników w formacie PDF w celu skrócenia czasu renderowania obrazu w przypadku plików generowanych przez niektóre urządzenia skanujące.
Akcja Usuń rekord
Zmodyfikowano akcję systemową Usuń rekord w ten sposób, że obecnie usuwa ona wpisy dotyczące uprawnień ACL dla usuwanego rekordu.
Odwołania do formularza w widoku listy
Dodano obsługę sytuacji, kiedy w definicji listy (używanej jako źródło danych dla sekcji typu lista na formularzu) używane są odwołania do pól sekcji wskazanej jako zależność od sekcji ({@_Section_KodPola}). Obecnie podczas próby wyświetlenia podglądu rekordów w kreatorze listy wyświetlany jest komunikat z informacją, że wartości parametrów użytych w definicji zapytania są obecnie niedostępne i podgląd nie jest wyświetlany. Należy pamiętać, że w takim przypadku dla sekcji typu lista musi zostać ustawiona właściwość Zależność od sekcji
oraz musi zostać zdefiniowany dowolny warunek dla zależności.
Stronicowanie sekcji typu lista
Poprawiono mechanizm przeliczania rekordów i stronicowania dla listy wyświetlanej w sekcji formularza z włączonym stronicowaniem i filtrowaniem po stronie serwera (server-side) oraz zależnej od innej sekcji. Obecnie, jeśli zmiana parametrów filtrowania spowoduje, że pozostanie na bieżącej stronie nie będzie możliwe, nastąpi przejście do strony nr 1.
Migracja obiektów z różnych modułów
W migratorze poprawiono wykrywanie zależności pomiędzy obiektami, które należą do modułów spoza pliku konfiguracji. Ponadto, dodano informacje o błędach przenoszenia rekordów w tabelach systemowych do raportu z migracji. Taka sytuacja może wystąpić, kiedy na przykład akcje korzystają ze źródła danych, które ma taki sam kod jak źródło w innym module. W takim przypadku nie jest możliwe usunięcie istniejącego źródła i zaimportowanie nowego.
Lista hierarchiczna
Usunięto błąd, który powodował, że identyfikatory rekordów zaznaczonych w sekcji typu lista na liście hierarchicznej nie były dostępne w kontekście formularza. W związku z naprawą zmodyfikowano także działanie kreatora listy dla listy hierarchicznej. Obecnie kolumna klucza głównego ani kolumna hierarchii nie muszą być jawnie dodane w drzewie kolumn listy.
Lista wielowyboru
Poprawiono błąd w treści etykiety opcji zaznacz wszystkie/odznacz wszystkie
dla listy wielowyboru i kontrolki interesariusza.
Podgląd załączników
Poprawiono błędne działanie sekcji podglądu załączników w przypadku, kiedy na formularzu jest kilka sekcji załączników dla różnych kategorii.
Lista rozwijana
Usunięto błąd, który powodował, że dla listy rozwijanej nie można było zapisać wartości klucza 0.
Porównywanie konfiguracji w migratorze
Usunięto błąd, który powodował, że migrator, pomimo wykrycia, że wybrane do porównania konfiguracje nie istnieją, próbował dokonać porównania.
Widoczność przycisku w trybie tylko do odczytu
Usunięto błąd, który powodował, że w przypadku ustawienia walidacji uprawnień formularza Zawężaj uprawnienia formularza ustawieniami dostępności
i ustawieniu dla przycisku sekcji opcji isVisible = 0 oraz isReadOnly = 1, ten przycisk był widoczny w trybie tylko do odczytu.
Słownik edytowalny
Usunięto błąd, który w określonych przypadkach powodował, że w kreatorze formularzy nie zapisywał się stan przełącznika Zezwalaj na wartości spoza listy
w konfiguracji kontrolki słownik edytowalny.
Pola wyboru uprawnień PBA
Poprawiono odświeżanie wyświetlania stanu pól wyboru na liście uprawnień PBA.
Znane problemy
Wtyczka Outlook
Akcje przypisane do przejścia workflow wykonywanego z poziomu wtyczki Outlook nie mają dostępu do parametrów systemowych z kontekstu formularza, to jest: FormCode, FormId, BusinessDocId i AppId. Planowane jest usunięcie problemu w jednym z kolejnych wydań nAxiom.