Související položky
Podmřížka souvisejících položek z jiného seznamu, propojená přes cizí klíč.
Popis widgetu relatedItems
Widget zobrazí v tabulce položky z jiného seznamu, které patří k aktuální položce (vztah 1:N): například úkoly projektu nebo řádky objednávky. Propojení určuje cizí klíč, tedy sloupec v cílovém seznamu, jehož hodnota se rovná klíči aktuální položky. Je to virtuální widget: data zůstávají v cílovém seznamu a do aktuální položky se nic neukládá. Podobný widget pro soubory je Související dokumenty.
Přidání do formuláře
- Na kartě Widgety v levé paletě vyberte Související položky (podtitul „Widget · 1:N záznamy“) a přetáhněte ho do sekce, nebo klikněte na „+“.
- V inspektoru zvolte Cílový seznam. Nabízejí se seznamy webu (běžné seznamy, ne knihovny).
- Zvolte Vazební sloupec v cílovém seznamu (cizí klíč).
- Zaškrtněte Zobrazené sloupce v tabulce a podle potřeby je přejmenujte.
Dokud není vybrán seznam a vazební sloupec, widget ve formuláři zobrazí „Widget není plně nakonfigurován“.
Nastavení v inspektoru
| Volba | Vlastnost | Význam | Výchozí |
|---|---|---|---|
| Cílový seznam | targetListId, targetListTitle | Seznam, ze kterého se čtou položky. Změna seznamu vynuluje vazební sloupec, zobrazené sloupce, odkaz a řazení. | nevybráno |
| Zdrojový klíč v tomto formuláři | sourceKeyField | @itemId (ID aktuální položky) nebo interní název pole formuláře, jehož hodnota se hledá v cizím klíči. Viz Klíč a cizí klíč. | @itemId |
| Vazební sloupec v cílovém seznamu | foreignKeyField | Sloupec cílového seznamu, podle kterého se filtruje. | nevybráno |
| Zobrazené sloupce v tabulce | viewFields | Sloupce tabulky. Blok Dostupné sloupce (s vyhledáváním) slouží k zaškrtnutí, sloupec se přidá na konec. Blok Zobrazené sloupce má v každém řádku pořadí (přetažení myší nebo šipky), vlastní název (columnLabels), formát buněk a křížek pro odebrání. Poslední sloupec nelze odebrat. | ["Title"] |
| Sloupec s odkazem na detail položky | linkToItemField | Který ze zobrazených sloupců je odkaz. Kliknutí otevře detail položky v dialogu. Bez odkazu je jen text. | bez odkazu |
| Výchozí řazení v tabulce | defaultSortField, defaultSortDirection | Sloupec a směr (asc vzestupně A-Z, desc sestupně Z-A) při otevření. | bez řazení, asc |
| Povolit rychlé vyhledávání / filtr v tabulce | enableSearch | Zobrazí nad tabulkou pole „Filtrovat položky…“. | ano |
| Povolit tlačítko „+ Nová položka“ | allowAddNew | Přidá do záhlaví tlačítko Nová položka. | ne |
| Vlastní popisek | customLabel | Titulek widgetu. Když chybí, použije se název cílového seznamu, jinak „Související položky“. | „Související položky“ |
| Šířka v sekci, Viditelné, Jen pro čtení | colSpan, defaultVisible, defaultReadOnly | Společné volby. Jen pro čtení skryje tlačítko Nová položka. | 12, ano, ne |
Zobrazené sloupce typu Osoba a Vyhledávání (i vícehodnotové), které zadáte v konfiguraci ručně nebo přes AI, widget načte přes $expand a ukáže jejich text (jméno osoby, hodnotu vyhledávání, u více hodnot oddělené čárkou). Dřív takový sloupec skončil chybou HTTP 400. Auditní sloupce (Vytvořil, Změnil, Vytvořeno, Změněno, ID, Přílohy) jsou v nabídce na konci pod oddělovačem „Systémové sloupce“.
Nabídka zobrazených sloupců obsahuje sloupce typu text, výběr, číslo, vyhledávání (i vícehodnotové), osoba (i vícehodnotová), datum, ano/ne a počítadlo; technické a skryté sloupce se nenabízejí a za názvem je uveden typ sloupce. Nabídka vazebního sloupce zůstává omezená na výchozí sadu sloupců. Počet načtených řádků (rowLimit, 1 až 100, nový widget má 25) nastavuje v inspektoru v poli „Maximální počet záznamů“ (hodnota se ořízne na rozsah 1 až 100).
Vizuální formát sloupců
Ve velkém konfiguračním okně widgetu (záložka Sloupce) lze v bloku Zobrazené sloupce zvolit u každého sloupce Formát přímo v jeho řádku (šipka na konci řádku rozbalí podrobnosti, najednou je rozbalený jeden řádek). Nastavení se ukládá do columnFormatting podle interního názvu sloupce. Bez formátu, nebo když hodnota formátu nevyhovuje (například text v ukazateli), se zobrazí prostý text. Výsledek uvidíte v náhledu dole v okně: zobrazí se tlačítkem Zobrazit náhled a po dalších úpravách ho aktualizujete tlačítkem Obnovit náhled (dokud to neuděláte, upozorní, že neodpovídá posledním změnám).
| Formát | Možnosti | Chování |
|---|---|---|
badge Štítek | badgeOptions (hodnota, barva, ikona), defaultColor | Barevný štítek s viditelným textem. Řádky hodnot se předvyplní z voleb sloupce, jinak je lze přidat ručně. Vícehodnotové volby dají sadu štítků. Barvy jsou jen pojmenované (modrá, zelená, žlutá, červená, motiv, šedá), bez vlastních HEX. |
progressBar Ukazatel | max, maxField, showValue, unit, color | Vodorovný ukazatel s číslem a jednotkou. Maximum je sloupec stejného řádku (maxField), jinak pevné max, jinak 100. |
dateAlert Termín | highlightPastDue (výchozí ano), daysAheadWarning, statusField + neutralIfStatusIn | Prošlý termín je červený a má text „Po termínu“, blížící se termín žlutý s textem „Brzy vyprší“. Když je stav řádku v seznamu neutrálních stavů, varování se nezobrazí. Dnešek se porovnává podle kalendářního dne bez posunu o časové pásmo. |
persona Osoba | showEmailAction | Jméno s avatarem z iniciál (bez fotografie) a volitelný odkaz mailto: na e-mail osoby. |
Sloupce použité jako maxField nebo statusField se načtou i tehdy, když se v tabulce nezobrazují.
Filtr souvisejících položek
Na záložce Filtr velkého konfiguračního okna můžete k vazbě na položku přidat další podmínky, například zobrazit jen aktivní nebo jen vaše položky.
- Kořenový přepínač: položka musí splňovat všechny podmínky (AND) nebo alespoň jednu podmínku (OR).
- Podmínka: sloupec cílového seznamu, operátor (rovná se, nerovná se, větší/menší, obsahuje text, začíná na) a hodnota. U osoby a vyhledávání je k dispozici jen rovná se a nerovná se (porovnává se podle ID). Nabídka operátorů se řídí typem sloupce.
- Zdroj hodnoty: pevná hodnota (text, číslo, Ano/Ne, datum nebo volba ze sloupce), pole z tohoto formuláře (po změně pole se tabulka přenačte; prázdná hodnota pole podmínku vynechá), token Dnes s posunem ve dnech (například -30) nebo Přihlášený uživatel.
- Skupiny: tlačítko + Přidat skupinu vloží odsazenou skupinu s vlastním AND/OR (nejvýše 8 úrovní). Prázdná skupina se ignoruje.
- Výsledný OData filtr se pod tvůrcem zobrazuje živě; neplatná podmínka ukáže chybu a uložení nezablokuje, ale widget za běhu místo dat zobrazí chybu filtru.
Expertní režim: přepínač Přímý OData výraz zobrazí textové pole pro vlastní OData fragment (například Stav eq 'Hotovo'). Spojí se přes AND s vizuálním filtrem i vazbou na položku. Určeno jen pro návrháře; výraz se nekontroluje, nevkládejte do něj hodnoty zadané uživateli.
U seznamů s více než 5 000 položkami musí být indexované i sloupce použité ve filtru, jinak SharePoint dotaz odmítne (viz níže).
Klíč a cizí klíč
Widget hledá v cílovém seznamu položky, kde vazební sloupec = hodnota zdrojového klíče. Zdrojový klíč je buď ID aktuální položky (@itemId, obvyklé), nebo hodnota jiného pole formuláře (například Zakazka, pak nemusí být položka uložená). Typ vazebního sloupce widget pozná sám a sestaví správný filtr:
| Typ vazebního sloupce | Porovnání |
|---|---|
Vyhledávání (Lookup), také vícenásobné, osoba | podle ID vybrané položky (SloupecId = n) |
| Číslo, Počítadlo, Celé číslo, Měna | číselná rovnost (Sloupec = n) |
| Text, Výběr | textová rovnost (Sloupec = 'n') |
| Nerozpoznaný typ | zkusí postupně všechny tři způsoby |
Hodnota klíče z pole typu vyhledávání, osoba nebo metadata se převede na ID (u osoby a vyhledávání) nebo na identifikátor termu. Při klíči ID se filtruje přímo podle ID.
Neindexovaný vazební sloupec (limit 5 000 položek)
SharePoint odmítne filtrovat seznam s více než 5 000 položkami podle sloupce, který není indexovaný (List View Threshold). Widget tomu předchází:
- V návrháři: po výběru vazebního sloupce widget ověří, zda je indexovaný a kolik má seznam položek. Pokud je sloupec neindexovaný a seznam má přes 5 000 položek, zobrazí se varování „Sloupec … není indexovaný“ a tlačítko Zaindexovat sloupec. Tlačítko sloupec v SharePointu zaindexuje (vyžaduje oprávnění správce seznamu) a varování po úspěchu zmizí.
- Za běhu: v takovém případě se dotaz vůbec neodešle a widget místo dat zobrazí chybu „Sloupec „…“ není indexovaný. U seznamů s více než 5 000 položkami musí být indexovaný. Požádejte vlastníka seznamu o jeho indexaci.“ Stejná hláška se zobrazí, když SharePoint vrátí chybu prahové hodnoty.
- Sloupec
IDje vždy indexovaný, tam se nic neřeší. Když se nepodaří zjistit indexaci nebo počet položek, dotaz se pustí a rozhodne SharePoint.
U velkých seznamů zaindexujte vazební sloupec předem (Nastavení seznamu, Indexované sloupce), nebo použijte tlačítko v návrháři.
Chování za běhu
- Nový: pokud je zdrojový klíč
@itemId, položka ještě nemá ID. Widget ukáže informaci „Související záznamy budou dostupné po prvním uložení položky“ a tlačítko Nová položka skryje. Při jiném zdrojovém klíči se data načtou hned, jakmile pole klíče obsahuje hodnotu. - Úprava: načte se až
rowLimitřádků (výchozí 25) a v záhlaví je počet, tlačítko Obnovit a případně Nová položka. Změna zdrojového pole vyvolá nové načtení. - Zobrazení: stejná tabulka, ale bez tlačítka Nová položka. Widget formulář nikdy neoznačí za změněný.
- Tlačítko Nová položka otevře formulář nové položky cílového seznamu v nové záložce. Po uložení tam klikněte na tlačítko Obnovit záznamy, tabulka se neaktualizuje sama.
- Řazení a filtr: kliknutím na záhlaví sloupce řadíte (opakovaným kliknutím měníte směr, číselné hodnoty se řadí jako čísla). Filtr prohledá všechny zobrazené sloupce a ukáže „Nalezeno: x z y“. Funguje jen nad načtenými řádky.
- Šířka sloupců se mění tažením pravého okraje záhlaví (jen do zavření formuláře).
- Odkaz na detail: sloupec
linkToItemFieldotevře detail položky v dialogu uvnitř formuláře. Když v dialogu položku upravíte a uložíte, dialog se zavře a tabulka se obnoví. - Prázdná hodnota se zobrazí jako „—“, hodnota typu objekt (například vyhledávání) jako text JSON.
Překlady textů
Titulek (customLabel) a popisky sloupců (columnLabels, klíčem je interní název sloupce) se překládají. Pevné texty widgetu (filtr, tlačítka, hlášky) se přepínají podle jazyka formuláře samy. Viz Překlady a vícejazyčnost.
Pravidla a skripty
- setVisible: zobrazí nebo skryje celý widget, například jen pro schválené žádosti.
- setReadOnly: skryje tlačítko Nová položka.
- Data widgetu pravidla nemění. Pokud je zdrojovým klíčem jiné pole formuláře, widget se po jeho změně (i pravidlem) sám znovu načte.
Příklad konfigurace (JSON)
{
"internalName": "widget_related_ukoly",
"customLabel": "Úkoly projektu",
"fieldType": "relatedItems",
"colSpan": 12,
"defaultVisible": true,
"relatedItemsConfig": {
"targetListId": "00000000-0000-0000-0000-000000000000",
"targetListTitle": "Úkoly",
"foreignKeyField": "Projekt",
"sourceKeyField": "@itemId",
"viewFields": ["Title", "Stav", "Termin"],
"columnLabels": { "Title": "Úkol", "Stav": "Stav", "Termin": "Termín" },
"linkToItemField": "Title",
"defaultSortField": "Termin",
"defaultSortDirection": "asc",
"enableSearch": true,
"rowLimit": 25,
"allowAddNew": true
}
}
Do targetListId patří identifikátor seznamu (GUID). V návrháři ho vyberete ze seznamu, ručně ho dosazujte jen při psaní JSON.
Omezení a tipy
- Načte se nejvýše
rowLimitřádků (nejvýše 100) bez stránkování. Filtr i řazení pracují jen s nimi, takže u velkých vazeb se může stát, že hledaný řádek není vidět. Dotaz na server řazení neobsahuje, výchozí řazení se uplatní až v tabulce nad načtenými řádky. - Bez zobrazených sloupců se vrátí
Title. Bez přejmenování se v záhlaví ukáže interní název sloupce, ne zobrazovaný název, proto sloupce přejmenujte. - Uživatel musí mít právo číst cílový seznam. Jinak widget zobrazí chybu z SharePointu.
- Widget je jen pro čtení dat: řádky nelze upravit ani smazat. Úpravu nabízí odkaz na detail.
- Widget se do položky neukládá, takže nemá vliv na ukládání ani na „změněný“ formulář.