Opakující se tabulka
Tabulka s opakujícími se řádky uložená v jednom sloupci položky, s typovanými sloupci a souhrny.
Popis widgetu repeatingTable
Opakující se tabulka umožní uživateli zadat libovolný počet řádků se stejnými sloupci, například položky rozpočtu nebo řádky objednávky, a to přímo ve formuláři. Celá tabulka se ukládá do jednoho víceřádkového sloupce položky jako JSON. Na rozdíl od ostatních widgetů tedy není virtuální: je to režim zobrazení pole víceřádkového textu (Víceřádkový text). Součet vybraného sloupce se může automaticky propisovat do číselného pole.
Přidání do formuláře
- V SharePointu mějte ve spravovaném seznamu sloupec typu Více řádků textu (doporučujeme prostý text).
- V paletě na kartě Pole přetáhněte tento sloupec do sekce.
- V inspektoru u Režim zobrazení pole přepněte z Víceřádkový text na Tabulka (JSON). Návrhář vytvoří tři ukázkové sloupce (Položka, Počet, Cena se součtem).
- Sloupce upravte, přidejte vlastní a případně nastavte propisování součtu.
Přepnutím zpět na Víceřádkový text se pole stane obyčejným textovým polem. Nastavení tabulky zůstane v konfiguraci a po novém přepnutí se obnoví.
Nastavení v inspektoru
| Volba | Vlastnost | Význam | Výchozí |
|---|---|---|---|
| Režim zobrazení pole | fieldType | multiline (Víceřádkový text) nebo repeatingTable (Tabulka JSON). | multiline |
| Sloupce tabulky | repeatingTableConfig.columns[] | Seznam sloupců. Přidáte ho zadáním názvu, výběrem typu a tlačítkem „+“, odebrat ho lze ikonou koše, šipkami se mění pořadí. Povinný alespoň jeden sloupec. | Položka, Počet, Cena |
| Úprava sloupce | columns[].label, type, required, width, summary, options, defaultValue | Ikona tužky u sloupce otevře editor: popisek, typ, povinnost, šířka (60 až 600 px), souhrn v patičce (jen číselný sloupec), volby (typ výběr, jedna na řádek) a výchozí hodnota buňky. Klíč sloupce (key) se nemění, protože se podle něj ukládají data. | podle sloupce |
| Minimální a maximální počet řádků | repeatingTableConfig.minRows, maxRows | Minimum 0 až 100, maximum 1 až 500. Prázdné pole znamená bez omezení. Maximum se nikdy nenastaví pod minimum. | bez omezení |
| Text tlačítka Přidat řádek | repeatingTableConfig.addRowLabel | V jiném jazyce návrháře se uloží do překladů (repeatingAddRowLabel), stejně jako popisky sloupců (repeatingColumns). | Přidat řádek |
| Propisovat součet do pole | repeatingTableConfig.syncSumToField | Pole formuláře typu Číslo, Měna nebo Jeden řádek textu, do kterého se zapisuje součet sloupce. Viz Propisování součtu. Volba je v inspektoru vždy vidět; pokud ve formuláři není vhodné pole nebo tabulka nemá číselný sloupec, je zakázaná a vysvětlí proč. | žádné |
| Vlastní popisek, Popis, Šířka v sekci, Viditelné, Povinné, Jen pro čtení | customLabel, description, colSpan, defaultVisible, defaultRequired, defaultReadOnly | Společné volby polí. Popis se zobrazí pod popiskem. Povinná tabulka vyžaduje alespoň jeden řádek. |
Při přidání sloupce návrhář odvodí z názvu klíč (key), například „Cena celkem“ na cena_celkem, a postará se, aby byl unikátní. Číselný sloupec dostane součet v patičce.
Sloupce a typy
Každý sloupec má tyto vlastnosti:
| Vlastnost | Význam |
|---|---|
id | Interní identifikátor sloupce v návrháři. |
key | Klíč v JSON řádku. Musí začínat písmenem nebo _ a obsahovat jen písmena, číslice a _. V rámci tabulky musí být unikátní. Po přejmenování klíče se hodnoty v už uložených řádcích ztratí. |
label | Záhlaví sloupce. |
type | text (textové pole), number (číslo), date (výběr data, ukládá se RRRR-MM-DD), boolean (zaškrtávátko Ano/Ne), choice (rozbalovací výběr z options). |
required | Povinná buňka. U záhlaví se zobrazí hvězdička a validace odmítne řádek s prázdnou hodnotou. |
width | Šířka sloupce v pixelech (60 až 600). |
options | Seznam hodnot pro typ choice. |
defaultValue | Hodnota buňky v nově přidaném řádku. Bez ní: číslo 0, ano/ne ne, výběr první volba, jinak prázdné. |
summary | Souhrn v patičce: none, sum, avg, min, max, count. |
Inspektor umožňuje sloupec přidat, upravit všechny jeho vlastnosti, přesunout a odebrat; nastavuje také minRows, maxRows a addRowLabel. Při více číselných sloupcích lze u propisování součtu zvolit, který se sečte.
Souhrny
Souhrnný řádek je zobrazen pod daty, když alespoň jeden sloupec má souhrn a tabulka má alespoň jeden řádek. Buňka ukáže název souhrnu velkými písmeny a hodnotu, například SUM: 1250.
| Souhrn | Výsledek |
|---|---|
sum | součet číselných hodnot sloupce |
avg | průměr, zaokrouhlený na dvě desetinná místa |
min, max | nejmenší, největší hodnota |
count | počet řádků |
none | bez souhrnu |
Hodnoty, které nejsou číslo, se do souhrnu nezapočítají. Bez čísel je výsledek 0. První sloupec bez souhrnu v souhrnném řádku nese popisek „Celkem“.
Propisování součtu (syncSumToField)
Součet sloupce můžete automaticky zapisovat do pole formuláře typu Číslo, Měna nebo Jeden řádek textu, například CelkovyRozpocet. Nastavíte ho v inspektoru volbou Propisovat součet do pole. Návrhář přitom jako zdroj vybere první číselný sloupec tabulky; po zvolení cíle se zobrazí výběr Sloupec pro součet, kde zvolíte jiný číselný sloupec. Odpovídající JSON:
"syncSumToField": {
"sourceColumnKey": "castka",
"targetFieldInternalName": "CelkovyRozpocet"
}
- Součet se přepočítá a zapíše při každé úpravě uživatelem: změna buňky, přidání, smazání nebo přesun řádku. Při pouhém otevření formuláře se nezapisuje.
- Cílové pole se uloží do SharePointu i když má nastaveno „Jen pro čtení“. Hodí se uzamknout ho, aby součet nešlo přepsat ručně.
- Do součtu se počítají jen číselné hodnoty.
- Číselné a měnové cílové pole dostane číslo. Textové cílové pole dostane součet jako text bez oddělovačů tisíců a s desetinnou tečkou (například
1500.5), takže zůstane strojově čitelný. - Odstraníte-li cílové pole z formuláře, návrhář vazbu automaticky zruší.
- V režimu Zobrazení se nic nepřepočítává.
Uložení: JSON a víceřádkový text
Hodnota pole je JSON pole objektů, v němž jsou klíče sloupců, například:
[
{ "nazev": "Licence", "pocet": 5, "cena": 1200 },
{ "nazev": "Školení", "pocet": 1, "cena": 8000 }
]
- Do SharePointu se ukládá jako text v jednom víceřádkovém sloupci. Sloupec tedy čtete i v seznamu a v exportu jako JSON.
- Při načtení se tolerují prázdná hodnota,
[]a text obalený HTML značkami, který vytvoří formátovaný text (Enhanced Rich Text). Neplatný JSON se bere jako prázdná tabulka. - Nový řádek obsahuje všechny sloupce s výchozími hodnotami. Řádky starší než sloupce, které jste přidali později, klíč nového sloupce nemají a zobrazí se prázdné.
- Do sloupce, který je omezený na 255 znaků (jednořádkový text), tabulku neukládejte. Použijte vždy Více řádků textu.
Neplatný JSON ve sloupci se zobrazí jako prázdná tabulka. Pokud uživatel přidá řádek a uloží, původní text se přepíše. Do sloupce proto nezapisujte ručně.
Chování za běhu
- Nový, Úprava: tabulka s vstupními prvky podle typu sloupců. V záhlaví je tlačítko přidání řádku (popisek
addRowLabel, výchozí „Přidat řádek“), totéž tlačítko je i pod tabulkou. Každý řádek má šipky nahoru a dolů a koš. Prázdná tabulka ukáže nápovědu „Žádné řádky. Klikněte na …“. - maxRows: po dosažení počtu tlačítka přidání zmizí. minRows: při tomto počtu je koš neaktivní.
- Zobrazení: tabulka jen pro čtení bez ovládacích prvků, hodnoty ano/ne jako „Ano“ a „Ne“. Prázdná tabulka ukáže „Žádné řádky“.
- Validace při uložení: počítají se řádky, které existují v hodnotě (nově přidaný řádek s výchozími prázdnými buňkami se počítá). Hodnota se validuje stejně, ať je uložená jako JSON řetězec, nebo pole.
- Povinná tabulka: musí mít aspoň jeden řádek (nebo aspoň
minRows, pokud je větší); platímaxRowsa povinné sloupce v každém řádku. - Nepovinná tabulka: smí zůstat prázdná (0 řádků je vždy v pořádku). Jakmile má aspoň jeden řádek, platí
maxRowsa povinné sloupce v každém řádku aminRowsve smyslu „žádný řádek, nebo aspoňminRows“.
- Povinná tabulka: musí mít aspoň jeden řádek (nebo aspoň
- Pole se ukládá jako ostatní pole položky (v režimu Úprava jen když ho uživatel změnil) a lze ho měnit pravidly.
Překlady textů
Přeložit lze popisek (customLabel), popis (description), text tlačítka přidání řádku (repeatingAddRowLabel) a záhlaví sloupců (repeatingColumns, klíčem je key nebo id sloupce). Volby sloupce typu choice se nepřekládají. Viz Překlady a vícejazyčnost.
Pravidla a skripty
Tabulka je běžné pole, platí pro ni například:
- setVisible, setRequired, setReadOnly: zobrazí, vyžaduje nebo zamkne tabulku.
- setValue: zapíše do tabulky celý JSON text (hodnota musí být platné JSON pole, například jako šablona řádků).
- Hodnota tabulky je JSON text, takže se pro podmínky pravidel nehodí. Podmiňujte pravidla číselným polem, do kterého se propisuje součet.
Příklad konfigurace (JSON)
{
"internalName": "RozpocetPolozky",
"customLabel": "Položky rozpočtu",
"description": "Součet sloupce Částka se propisuje do pole Celkový rozpočet.",
"fieldType": "repeatingTable",
"colSpan": 12,
"repeatingTableConfig": {
"addRowLabel": "Přidat položku",
"minRows": 1,
"maxRows": 50,
"syncSumToField": {
"sourceColumnKey": "castka",
"targetFieldInternalName": "CelkovyRozpocet"
},
"columns": [
{ "id": "col_nazev", "key": "nazev", "label": "Název", "type": "text", "required": true, "width": 260 },
{ "id": "col_typ", "key": "typ", "label": "Typ nákladu", "type": "choice",
"options": ["Práce", "Dodavatel", "Licence"], "defaultValue": "Práce" },
{ "id": "col_castka", "key": "castka", "label": "Částka (Kč)", "type": "number",
"required": true, "defaultValue": 0, "summary": "sum" },
{ "id": "col_schvaleno", "key": "schvaleno", "label": "Schváleno", "type": "boolean" }
]
}
}
Omezení a tipy
- Tabulka je určená pro desítky řádků. Počet je omezen
maxRows(nejvýše 500) a velikostí víceřádkového sloupce. - V SharePointu se nad sloupcem nedá filtrovat ani počítat po řádcích. Pro přehledy použijte propsaný součet, nebo samostatný seznam a widget Související položky.
- Schéma vyžaduje alespoň jeden sloupec a unikátní klíče. Jinak konfigurace neprojde validací.
- Zrušení sloupce neodstraní jeho hodnoty z už uložených řádků, jen se přestanou zobrazovat.
- Zámek „Jen pro čtení“ tabulku zamkne pro úpravy a součet se v takovém stavu nepřepočítává.