UNIS 1.10.0

Obecná vylepšení

  • Hromadné akce nevyžadující zaškrtnutí záznamů se nyní zobrazují nad datovou tabulkou vedle akce Přidat. Jsou tedy na první pohled odlišeny od hromadných akcí pracujících výhradně nad zaškrtnutými záznamy.
  • Panel akcí a nástrojů nad datovou tabulkou se nyní lépe zobrazuje na malých displejích v mobilním zobrazení.
  • Vzhled akcí v rozevíracím menu je nyní konzistentní se vzhledem akcí mimo menu.
  • Popisek výchozí možnosti „vyberte“ (zejména v datovém formuláři) byl shledán jako matoucí, jelikož v mnoha případech není potřeba žádnou hodnotu vybrat. Jako vhodnější byl zvolen popisek „nevybráno“, který tolik neevokuje, že je nutně potřeba něco vybrat.

Optimalizace výkonu

  • Optimalizace kontroly oprávnění na jednotlivých sloupcích na stránce.
  • Optimalizace vytvoření stromové struktury menu, zefektivněno využití cache menu.
  • Optimalizace agregací dat na složitých stránkách.

Opravy

  • Oprava možného selhání zpětného přesměrování po odeslání formuláře.
  • Oprava chyby vyhledávání v menu, kdy hledání mohlo přestat reagovat při nalezení neoprávněné položky menu.
  • Oprava vykreslování rozbaleného menu akcí v prohlížeči Firefox, zejména při scrollování stránky.
  • Oprava nemožnosti změnit hodnotu v našeptávacím políčku formuláře, pokud je právě zvolená možnost příliš dlouhá pro zobrazení v modálním okně.
  • Oprava filtrování (formou výběru) ve víceřádkových hodnotách.

Administrační rozhraní

Rozbalit/zabalit seznam změn relevantní pro administrátory

Obecná vylepšení

  • Do nastavení sloupce přidána nová možnost „Max počet řádků textu“. Po dosažení maximálního počtu řádků je zbytek textu nahrazen trojtečkou. Toto nastavení je podporováno i na stránce typu detail, i na formátovaném textu. Po najetí myší na jakýkoli text v tomto sloupci bude uživateli zobrazen kompletní obsah ve vyskakovacím titulku.
  • Do nastavení sloupce přidána možnost „Formátovaný text (HTML)“, dosavadní možnost „Formátovaný text“ přejmenována na „Formátovaný text (Texy)“. Při označení sloupce jako HTML se následně ve filtrech správně zobrazí/filtrují znaky s diakritikou a výběrové filtry nezobrazují nadbytečné HTML tagy.
  • Do nastavení sloupce přidána možnost „Coalesce“, ovlivňující zda je automaticky voláno COALESCE nad parametry ve vzorci výpočtového sloupce. Výchozí chování nezměněno; vypnuto pod PostgreSQL a zapnuto pod MySQL.
  • Ve výrazu výpočtových sloupců se nyní zadávají jednoduché uvozovky bez zpětného lomítka. Pro vypsání uvozovky uvnitř stringu stačí použít dvě uvozovky za sebou, dle standardní syntaxe SQL.
  • Odlehčeno rozhraní seznamu stránek v administraci:
    • odstraněna nepoužívaná možnost smazání akcí stránky
    • odstraněn sloupec popisů stránek; popis nastaven jako vyskakovací title na sloupci Titulek
    • přeskládány ikony odkazů dle typického používání
  • Všechny systémové proměnné lze nově využít také v:
    • popisku sloupce
    • popisku menu
    • externím url menu
    • iframe url stránky
    • kdekoli v xlsx šabloně
  • Přepracována administrace filtru nad stránkou typu detail (karta):
    • oprava vertikálního zarovnání obsahu
    • administrační odkazy převedeny do standardního vzhledu šedých tlačítek
    • samotný filtr se nyní zobrazuje jako nativní select a obsahuje náhled skutečných dat filtru
    • odstraněny nadbytečné závorky okolo názvu stránky
  • V administraci sloupců lépe odlišen konec panelu nástrojů sloupce.
  • Z menu ozubeného kolečka odstraněna již zbytečná možnost „Aktualizovat vše krom KN“ (na PostgreSQL).

Usnadněno přidávání datových zdrojů ke stránce

  • Umožněno filtrování a řazení dostupných zdrojových tabulek.
  • Do seznamu dostupných zdrojových tabulek přidán sloupec s počtem použití dané tabulky dle již připojených zdrojů dat.
  • Panel funkčních tlačítek v pravém horním rohu nyní zůstává připnutý a použitelný i při scrollování.
  • Při přechodu na seznam dostupných zdrojových tabulek přes funkční tlačítko „Dostupné tabulky“ se prohlížeč automaticky přepne do filtrovacího pole, aby uživatel mohl rovnou začít psát název tabulky pro vyhledání.

dostupné zdroje

Akce

  • Přidány pomocné popisky pro rozlišení administrace hromadných/ne-hromadných akcí.
  • Zvětšeny ikony v administračních panelech nástrojů pro jednotlivé prvky.
  • Widget one-to-many nyní podporuje „Skupiny akcí“ (massmenu).

Hromadné akce

  • V administraci hromadných akcí jsou nyní nezaškrtávací hromadné akce odlišeny výstražným vykřičníkem.
  • Šablona one-to-one nově podporuje všechny typy hromadných akcí. V této šabloně není zobrazení nezaškrtávacích hromadných akcí nijak odlišeno, jelikož akce všech typů jsou zobrazeny ve stejném řádku. Hromadné akce v šabloně one-to-one vždy obdrží relační data jako kdyby byl právě zobrazený záznam zaškrtnut.
  • Na stránce typu detail lze nyní posouvat hromadné akce pomocí drag & drop.
  • Šipky pro ruční posouvání hromadných akcí odstraněny.
  • Značně zmenšena velikost hromadných akcí v administraci.
  • Odstraněn zbytečně vykreslený řádek navíc, když stránka žádné hromadné akce nemá.
  • Pozadí tabulky hromadných akcí v administraci má nyní stejnou barvu jako na výsledné stránce.
  • Oprava zbytečně velkého odsazení řádku akcí v mobilním zobrazení aplikace.
  • Možnost přetahovat pořadí se nyní zobrazí pouze v případě, že existuje více než jedna hromadná akce.

Akce pracující nad jedním záznamem

  • Všechny typy ne-hromadných akcí mají nyní funkční administraci na různých typech stránky.
  • Inline akce lze upravovat i když datová tabulka nemá záznamy; akce se nyní zobrazují vždy nad tabulkou namísto v tabulce (pro všechny typy stránek).

nová administrace akcí

Log událostí

Vytvořeno grafické rozhraní pro log událostí, přístupné přes ozubené kolečko pod názvem „Log událostí“, nebo také ze stránky „Databáze & server“ (v tomto případě je log vyfiltrován pouze na události typu sync).

V grafickém rozhraní jsou pro zjednodušení zobrazeny pouze události se stavem ok (zelené podbarvení) nebo fail (červené podbarvení).

Do tabulky je vždy načteno posledních 500 událostí, ve kterých lze interaktivně filtrovat. Momentálně není nabízena možnost vytáhnout z databáze jiný počet událostí.

User Agent je zobrazován ve zkrácené podobě, avšak po najetí myší se zobrazí kompletní string.

Log událostí

Role oprávnění a skupiny uživatelů

Současné „skupiny oprávnění“ přejmenovány na „role oprávnění“.
Nově zavedeny „skupiny uživatelů“, které představují uskupení nemající přímo nastavena žádná práva. Lze je však přiřadit do rolí oprávnění, podobně jako dosud jednotlivé uživatele.

  • Administrační sekce „Uživatelské skupiny“ přejmenována na „Uživatelské role & skupiny“. Rozhraní značně rozšířeno pro přehlednou práci s uživatelskými skupinami.
  • Při najetí na detail uživatele v záhlaví se nyní zobrazí kromě seznamu rolí také seznam skupin.
  • Formulář rolí nyní zobrazuje nabídku rodičovských rolí v přehlednějším stromovém zobrazení.
  • Formulář rolí nyní nedovolí nastavit jako rodičovskou roli právě upravovanou roli.
  • Formulář rolí nyní vypisuje případné chyby červeně namísto zeleně.

Rozlišení vývojového prostředí, moduly

Implementovány 4 typy prostředí; dev (vývoj), int (integrace), prep (preprodukce), prod (produkce).
Aplikace nemůže být několika typů prostředí zároveň. Není však nutné, aby pro daný typ aplikace všechna prostředí existovala.
Veškeré nastavení okolo prostředí probíhá na úrovni configu v nové sekci environment.

Pro každý typ prostředí lze definovat URL vzdálené aplikace, která je daného typu prostředí. Vpravo nahoře v aplikaci se následně zobrazí přepínátko pro snadné přecházení mezi jednotlivými prostředími.

Pro typ prostředí int a prep lze dále definovat umístění jejich systémové databáze. Tato konfigurace má význam pro účely synchronizace systému mezi jednotlivými prostředími. Poslední konfigurační možností je excludedTables, jež lze nastavit pro int/prep/prod a určuje tabulky vyloučené ze synchronizace daného prostředí.

Moduly

Aplikační moduly představují možnost jak napojit jednu „modulární“ UNIS aplikaci do několika jiných UNIS aplikací.
Konfigurace modulů probíhá čistě přes config, v nové sekci modules.

Každý klíč modules představuje interní název modulu. Dále v jednotlivých modulech lze nakonfigurovat:

  • id – číslo, kterým musí začínat všechna systémová ID v daném modulu
  • title – popisek modulu
  • url – URL samotného modulu (jeho vlastní vývojové prostředí)
  • menuId – ID menu, do kterého má být následně nalita celá stromová struktura menu modulu
  • database – databázové umístění systému modulu
  • excludedTables – nemodulární tabulky, které nemají být použity při integraci modulu do jiné aplikace

V sekci Databáze & Server se nově zobrazuje tabulka se seznamem nadefinovaných modulů (pokud nějaké jsou).

Synchronizace prostředí

Veškerý vývoj aplikace musí vždy nutně probíhat v prostředí dev. Odtud je následně možné synchronizovat systém směrem na integraci nebo rovnou preprodukci (do databáze dle nastavení v configu, viz výše). Synchronizační tlačítko lze najít v sekci Databáze & Server. Při synchronizaci jsou přenesena pouze data, nikoli struktura tabulek, tzn. struktura na cílové straně musí být aktuální, aby synchronizace proběhla úspěšně. Synchronizují se všechny tabulky, které jsou nalezeny na obou stranách, s výjimkou tabulek vyloučených pomocí konfigurační možnosti excludedTables.

Pokud aplikace obsahuje nadefinované moduly, budou při synchronizace z dev vždy zaintegrovány do výsledné systémové databáze na int/prep.

Jakmile se aktuální změny dostanou na preprodukci (ať už z dev nebo int), následně je možné tyto změny načíst ze strany produkčních aplikací, kde se aktualizační tlačítko opět nachází v sekci Databáze & Server.

Použití dočasné tabulky při zpracování dat stránky

U stránek se složitější logikou nepoužívajících tableDataCache (např. kvůli parametrům závislých na uživateli) může dočasná tabulka značně zvýšit rychlost zpracování dotazů. Do formuláře nastavení stránky je nyní přidáno nastavení „Dočasná tabulka“ s možnostmi:

  • Nevytvářet – při zpracování dotazů stránky nebude nikdy použita dočasná tabulka, tedy stejné chování jako dosud. Toto je výchozí stav.
  • Dynamicky – při zpracování dotazů stránky bude použita dočasná tabulka ve vhodnou chvíli dle uvážení aplikace. Toto je doporučená možnost, ve většině případů kombinující výhody obou následujících možností (doporučená je pro stránky, kde má dočasná tabulka smysl, viz úvod).
  • Pro filtry, agregace a data – všechny tři relevantní dotazy stránky budou vždy pracovat nad dočasnou tabulkou.
  • Pro agregace a data, až po aplikaci filtrů – dočasná tabulka bude vždy vytvořena už s aplikovanými filtry, bude ji tedy možné využít pouze pro agregace a zobrazený dataset, nikoli pro získání unikátních hodnot filtrů.

Tato nová možnost databázové optimalizace je k dispozici v plném rozsahu pro PostgreSQL i MySQL/MariaDB.

Nativní ukotvení hlavičky datové tabulky pro Chrome/blink

Aktuální Chrome/blink (89) podporuje zapnutí nové implementace zobrazení tabulek, v němž je konečně zahrnuto funkční „sticky“ ukotvení tabulkových hlaviček. Nativní ukotvení znamená značnou optimalizaci rychlosti načítání stránek, zejména těch s větším objemem dat nebo na slabších uživatelských počítačích. Zároveň také znamená zaručenou konzistenci vykreslení správných šířek sloupců v hlavičce vs těle tabulky.

Prozatím je implementace na straně Chromu v experimentálním stavu a je tedy potřeba ji ručně aktivovat pod chrome://flags/#enable-table-ng

Na straně UNISu je nyní detekována tato nová implementace zobrazení tabulek (TableNG) a nativní ukotvení je automaticky využito, pokud je to na prohlížeči uživatele možné.

Opravy

  • Při drag & drop přesouvání sloupců nyní zůstávají šířky sloupců konzistentní a sloupce tedy „neuskakují“.
  • Pro akci spojení XLSX (mergexlsx) opraveno:
    • Vyhodnocení parametrů menu cílového odkazu na XLSX.
    • Vyhodnocení výchozích filtrů cílové stránky XLSX.
    • Vyhodnocení výchozího řazení cílové stránky XLSX.
    • Vyhodnocení podmíněného formátování cílové stránky XLSX.
    • Pokud při spojení XLSX některý sloupec nemá nastaven popis pro list, název listu se již nyní nenastaví na neplatný, ale jednoduše je ponechán původní název listu ze šablony.
  • Oprava zjištění IP uživatele při provozování aplikace přes proxy server.
  • Výchozí hodnota pro db stránky nyní zůstane prázdná (implicitní), když většina existujících stránek používá implicitní.
  • Akce typu hromadné mazání nyní dokáže předat zaškrtnutá ID do skriptu.
  • Oprava nefunkčnosti parametrů nad sloupci typu array, kvůli překladu WHERE do vnitřní části dotazu.
  • Oprava kopírování výchozích parametrů podmíněného formátování do vzdálené databáze.
  • Při hromadném přidávání jsou nyní správně ignorovány všechny konflikty unikátnosti i pod PostgreSQL.

Poznámky pro vývojaře

  • Při ukládání datového formuláře jsou nyní odchyceny obecně všechny exception, ne jen databázové.
  • Tabulka sys_priv_group přejmenována na sys_priv_role. Sloupec group_id v tabulkách sys_priv_users a sys_privileges přejmenován na role_id.
  • Přidána konfigurační možnost parameters.app.filters.autoLower, umožňující vypnout automatické volání LOWER nad filtrovanými sloupci (nepotřebné pokud má databáze nastaveno výchozí case-insensitive porovnávání).
  • Přidána konfigurační možnost parameters.app.filters.autoTrim, umožňující vypnout automatické volání TRIM nad filtrovanými sloupci.
  • Konfigurační možnost parameters.classes.app.authorizator nahrazena nastavením služby services.authorizator.
  • Značně refaktorován veškerý kód okolo uživatelů, rolí a autorizace.
  • Optimalizace indexů pro vytažení práv, stromu menu a logu událostí.
  • Knihovna jQuery aktualizována z 2.1.3 na 3.5.1, jQuery UI aktualizována z 1.10.3 na 1.12.1.
  • Explicitně nastaveno SameSite cookies na Lax, jelikož prohlížeče zřejmě v dohledné době začnou platnou hodnotu vyžadovat.

Vlastní systémové proměnné % v configu

V configu parametrů zavedena nová sekce client:

    client:
        fullName: '' # affects the %clientFullName system variable
        shortName: %client.fullName% # affects the %clientShortName system variable

        variables: # affects %clientVar system variables, each value will become available as %clientVarKeyName (case sensitive)

Do client.fullName lze zapsat celý název klienta, do client.shortName potom zkrácený název klienta, pokud nějaký je.

Mocným nástrojem je nové pole client.variables, do něhož lze definovat libovolný počet vlastních systémových proměnných klienta. Všechny tyto hodnoty jsou následně v aplikaci dostupné pod proměnnou %clientVar + název klíče v configu variables.
Pro lepší čitelnost je doporučováno začínat názvy klíčů v tomto poli velkým písmenem. Název klíče by neměl být obsažen v názvu žádného jiného klíče, jelikož nahrazení proměnných potom nemusí proběhnout správně (v závislosti na pořadí může být proměnná s kratším názvem zaměněna jako první a tím přepsat proměnnou s delším názvem).

Příklad vyplněné konfigurace:

    client:
        fullName: Ředitelství silnic a dálnic ČR # affects the %clientFullName system variable
        shortName: ŘSD # affects the %clientShortName system variable

        variables: # affects %clientVar system variables, each value will become available as %clientVarKeyName (case sensitive)
            MyCustomKey: 1234

V aplikaci bude následně použitelná proměnná %clientVarMyCustomKey s hodnotou 1234.