Dynamické položky: pravidla, validace a AI
Sloupce proměnné typu Dynamické položky se mohou chovat podle podmínky: být povinné, jen ke čtení, skryté nebo jinak obarvené, mít výchozí hodnotu podle jiné proměnné, počítat se vzorcem a hlídat hodnotu buňky i součet sloupce. To vše se skládá v dialogu Nastavení sloupce, bez psaní kódu. Článek dále popisuje Zeptat se AI v editoru tabulky, úpravu celé definice v JSON a skript tabulky.
Článek navazuje na Proměnná Dynamické položky, kde najdete builder, typy sloupců a nastavení tabulky. Ukázky pocházejí z tabulky výdajů z pracovní cesty Expense items s proměnnými formuláře Paid with (paymentMethod: Company card / Own money), Exchange rate EUR/CZK (exchangeRate) a Approved budget (EUR) (tripBudget).
Jak pravidla fungují
Pravidlo má název, podmínky a výsledek (např. „Povinný“, barva pozadí, chybová hláška). Pravidel může být v jedné části víc; vyhodnocují se v pořadí a použije se první, jehož podmínky platí. Když neplatí žádné, platí základní nastavení nad pravidly.
| Prvek pravidla | K čemu slouží |
|---|---|
| Přidat pravidlo / Přidat formát / Přidat podmínku | Přidá nové pravidlo do části. |
| Název pravidla | Kliknutím na název ho přejmenujete. Název se zobrazuje v hláškách při uložení. |
| Přesunout (tři čárky) | Přetažením změníte pořadí pravidel, a tím i to, které platí dřív. |
| Rozbalit / Sbalit, Duplikovat, Smazat | Ikony v záhlaví pravidla. |
| Přidat podmínku, Přidat skupinu | Podmínky se skládají do skupin spojených a / nebo; skupiny lze vnořovat. |
Co lze v podmínce porovnávat
Každá podmínka má levou stranu, operátor a pravou stranu. Operátory se nabízejí podle typu levé strany: u textu rovná se, obsahuje, je v seznamu, je prázdné…, u čísel a dat navíc větší a menší, u seznamů je / není, u checkboxu jen rovná se / nerovná se.
| Operand | Co porovnává |
|---|---|
| Tento sloupec, Sloupec | Buňku vyhodnocovaného řádku: tohoto nebo jiného sloupce. |
| Proměnná | Proměnnou formuláře podle názvu (výběr ikonou { }). |
| Agregace | Sloupec proměnné typu Dynamické položky (i této tabulky) sloučený funkcí Součet, Průměr, Minimum, Maximum nebo Počet. |
| Kontext úkolu | Údaj aktuálního úkolu: řešitel, vlastník, termín, jazyk, název případu, šablona, stav úkolu a další. |
| Hodnota z dyn. tabulky | Hodnota sloupce prvního řádku dynamické tabulky, který odpovídá zadané hodnotě (sloupec porovnání, porovnávaná hodnota, sloupec výsledku). |
| Vzorec | Vypočtený výraz, stejně jako u vypočítané hodnoty. |
| Konstanta | Pevná hodnota. U proměnné typu seznam se nabídnou její hodnoty. |
Výchozí hodnota, styl, validace a vzorce se vyhodnocují pro každý řádek, takže mohou porovnávat buňky řádku. Viditelnost, zdroj dat a pravidla tabulky platí pro celý sloupec či tabulku; jejich builder buňky řádku nenabízí, porovnávejte proměnné nebo kontext úkolu.
Výchozí hodnota
Hodnota, se kterou začíná každý nově přidaný řádek. U checkboxu je to Ano/Ne, u ostatních typů hodnota, nebo tlačítkem { } odkaz na proměnnou šablony či jiný sloupec téhož řádku ({this.row.sloupec}). Datum může začínat relativním datem: dnes, včera, zítra, předchozí pracovní den, začátek a konec měsíce nebo roku ({this.date.today} apod.).
Podmíněná výchozí hodnota použije jinou hodnotu, když platí podmínka. V ukázce má každý nový řádek zaškrtnuté Reimburse, pokud uživatel platil z vlastních prostředků:

Vypočítaná hodnota
Část Nastavení vypočítané hodnoty mají sloupce typu Text a Číslo. Vzorec se skládá klikáním: Přidat operand přidá sloupec, proměnnou, agregaci nebo konstantu, barevný výběr před operandem určí operaci (+, −, ×, ÷). Přidat skupinu přidá závorku (nejvýš tři úrovně vnoření). Výraz se počítá zleva doprava bez přednosti násobení, pořadí určují jen skupiny. Textové sloupce umí jen spojovat texty. Datum a čas se počítají v minutách (12:30 = 750), takže Konec − Začátek dá minuty.

| Pole | K čemu slouží |
|---|---|
| Vypočítaná hodnota | Vzorec sloupce. V ukázce Amount (CZK) = Amount (EUR) × proměnná exchangeRate. |
| Podmíněné vzorce | Jiný vzorec, když platí podmínka (např. jiná sazba pro jednu kategorii). |
| Povolit ruční přepsání | Uživatel může vypočtenou hodnotu přepsat. Ručně upravená buňka si hodnotu ponechá, vymazáním buňky se vypočtená hodnota obnoví. |
Vypočtený sloupec obvykle nastavte jako Ke čtení a u částek zapněte Přičíst do součtu; součtový řádek se přepočítá při každé změně. Vzorec, který by vytvořil cyklus (sloupec A počítá z B a B z A), TAS odmítne. Sloupec použitý ve vzorci nejde smazat.
Oprávnění
Základní režim buněk sloupce: Editovatelný, Povinný (úkol nejde splnit, dokud je buňka v některém řádku prázdná) nebo Ke čtení. Podmíněná oprávnění režim změní, když platí podmínka.
Například může být sloupec Zdůvodnění povinný jen u řádků s částkou nad 500 EUR. Povinnost se kontroluje při splnění úkolu, ne při průběžném uložení.
Viditelnost
Skryté sloupec ukládá, ale nezobrazuje. Podmíněná viditelnost sloupec skryje nebo zobrazí podle podmínky na proměnné nebo kontext úkolu. V ukázce zmizí Paid by, když se platilo z vlastních prostředků.

Styl a barvy podle podmínky

| Pole | K čemu slouží |
|---|---|
| Zarovnání | Vlevo, na střed, vpravo. |
| Šířka | Šířka sloupce v pixelech. |
| Barva textu, Barva pozadí | Výchozí, barvy systému (informace, upozornění, úspěch, hlavní barva, chyba; přizpůsobí se i tmavému režimu) nebo vlastní barva z palety. |
| Přidat formát | Pravidlo, které při splnění podmínky změní barvu textu, pozadí nebo zarovnání buňky. Nevyplněná pole ponechají vzhled sloupce. V ukázce se částka nad 500 EUR podbarví oranžově. |
Validace buněk

| Pole | K čemu slouží |
|---|---|
| Jedinečná hodnota | Žádné dva řádky nesmí mít v sloupci stejnou vyplněnou hodnotu. Není u checkboxu a souboru. |
| Validační vzor (regex) | Jen text a číslo. Regulární výraz, kterému musí hodnota odpovídat (např. ^[A-Z]{3}$). Po vyplnění se zobrazí Chybová hláška s jazykovými verzemi. |
| Přidat podmínku | Pravidlo validace: dokud podmínka platí, je řádek neplatný a pod buňkou se zobrazí chybová hláška. V ukázce „Enter an amount of at least 1 EUR.“ pro částku menší než 1. |
Chybové hlášky mají jazykové verze (Další varianty jazyků, AI překlad) a tlačítkem { } do nich vložíte hodnotu proměnné, která se dosadí za běhu.
Součet a jeho kontrola
Část Součet mají číselné sloupce. Přičíst do součtu zařadí sloupec do součtového řádku. Validace součtu pak hlídá součet sloupce: levá strana podmínky Součet je součet tohoto sloupce, pravou stranou bývá proměnná formuláře. Při splnění podmínky se pod součtem zobrazí chybová hláška. V ukázce tabulka upozorní, když výdaje překročí schválený rozpočet:

Podmíněný zdroj dat
Sloupce typu Uživatelé, Role, Org. struktura a Dynamická tabulka mají v části Hodnoty položku Podmíněný zdroj dat. Pravidlo při splnění podmínky nahradí zobrazované pole, filtr nebo řazení nabízených záznamů (u dynamické tabulky v rámci stejné tabulky). Zdroj platí pro celý sloupec, porovnávejte proto proměnné nebo kontext úkolu.
Pravidla tabulky
V dialogu Nastavení tabulky má každý přepínač ikonu trychtýře. Rozbalí pravidla, která přepínač podle podmínky zapnou nebo vypnou: například Povolit import ze souboru jen při platbě firemní kartou (obrázek v článku Proměnná Dynamické položky). Podmínky se vyhodnocují bez řádku.
Sledované proměnné určují, při změně kterých proměnných formuláře se pravidla a skript tabulky vyhodnotí znovu. Zařaďte sem každou proměnnou, kterou pravidla čtou (v ukázce paymentMethod, exchangeRate, tripBudget), a přiřaďte ji v úkolu pro zápis.
Jak pravidla vyzkoušet v náhledu
Náhled pod builderem pravidla vyhodnocuje průběžně. Pravidla nad buňkami řádku uvidíte hned: v ukázce se částka 1 240 EUR podbarvila oranžově a záhlaví Justification nese hvězdičku povinnosti.

Proměnné formuláře v náhledu hodnotu nemají. Pravidla a vzorce, které z nich čtou (přepočet na CZK, kontrola rozpočtu, výchozí Reimburse), proto vyzkoušejte v testovacím případu. Jak se tabulka chová uživateli, popisuje článek Tabulka dynamických položek ve formuláři.
Zeptat se AI
Tlačítko Zeptat se AI v editoru tabulky navrhne nové sloupce, vzorce, validace i pravidla viditelnosti. Zobrazí se administrátorovi u uložené proměnné, když je AI v Konfiguraci zapnutá (AI.enabled).
- Klikněte na Zeptat se AI. Otevře se AI chat s kontextem této proměnné (štítek Dynamic items s id proměnné) a začátkem zadání „Uprav tuto tabulku tak, aby…“.
- Česky nebo anglicky popište, co má tabulka umět, a odešlete.

- AI zná sloupce, pravidla i proměnné šablony. Za chvíli (v ukázce asi minutu) otevře dialog Zkontrolujte vygenerovaný kód: nahoře shrnutí změn, pod ním porovnání Aktuální a Vygenerováno. Přidané řádky jsou zelené, změněná místa ukazují značky v posuvníku.

- Použít vygenerovaný kód převezme návrh do builderu, Zrušit ho zahodí. Sloupce, které už existovaly, si ponechají své uložené hodnoty.
- Zkontrolujte výsledek v builderu a náhledu a proměnnou uložte. Bez uložení se nic nezmění.

V ukázce AI přidala sloupec Country se seznamem hodnot za Description a pravidlo, které dělá Receipt povinným nad 100 EUR. Stejné tlačítko je i u skriptu tabulky, viz níže a článek AI a kontrola kódu v editorech.
Definice v JSON
Přepínač Builder / JSON zobrazí celou definici jako JSON {"table": {...}, "columns": [...]}. Hodí se pro hromadné úpravy, kopírování sloupců mezi šablonami a pro nastavení, která builder nenabízí (odkaz v textu, ikona a barva položek seznamu).

- Ikona i otevře nápovědu: všechny vlastnosti tabulky a sloupců, pravidla, operandy, výrazy a příklad celé definice. Vedle je nabídka snippetů a celá obrazovka.
- Při opuštění editoru a při přepnutí zpět na builder se definice ověří proti schématu serveru. Neznámé vlastnosti (např. vlastnosti dynamických řádků jako
showAddRemove,side,runAfterConds) se odmítnou a hláška řekne, co přesně je špatně. S chybou se zpět do builderu nepřepnete. - Ponechte u sloupců jejich
id; podle něj si sloupec při přejmenování zachová hodnoty v případech.

Skript tabulky
Většinu chování pokryjí pravidla a vzorce. Pro zbytek má tabulka vlastní skript v JavaScriptu (sbalená část Skript). Tělo skriptu se spustí jednou; metody registrují pravidla, která se znovu spustí po každé změně tabulky (úprava buňky, nový, smazaný, duplikovaný, přesunutý nebo importovaný řádek) a po změně sledované proměnné.

| Metoda | K čemu slouží |
|---|---|
this.value(sloupec, řádek, hodnota) | Nastaví hodnotu buněk; řádky se číslují od 1, součet sloupce je sloupec-total. Hodnota může být funkce. |
this.deleteRow(funkce) | Smaže řádky, pro které funkce vrátí true. Poslední řádek se nesmaže. |
this.getDynTable(id, sloupce) | Načte řádky dynamické tabulky do this.dynTable. |
this.changeFormComponents(proměnná, hodnota) | Nastaví jinou proměnnou formuláře, např. součet tabulky. |
this.handleErrors(chyba) | Ohlásí chybu; ve formuláři zablokuje splnění úkolu, v náhledu ji zobrazí jako upozornění. |
K dispozici je také this.currentTask (v náhledu prázdný), this.language, this.lastChangedCell, Lodash jako _ a Api.request. Oproti dynamickým řádkům chybí this.changeDef, this.changeCell, this.task, this.formComponentsStyle, this.insertHtml a this.valueHtml: nastavení sloupců, povinnost a formátování buněk měňte pravidly. Podrobnosti a příklady jsou v nápovědě (ikona i).
Pod editorem jsou tlačítka Zkontrolovat kód, Naformátovat a Zeptat se AI. Skript v náhledu spustíte tlačítkem Obnovit nad náhledem. Práci s řádky ve výpočtech šablony popisuje článek API dynamických položek ve výpočtech (di).
Související: Proměnná Dynamické položky, Tabulka dynamických položek ve formuláři, API dynamických položek ve výpočtech (di), AI a kontrola kódu v editorech, Dynamické řádky: skript.