Licence
Offline licenční klíč (SPFXFC-) pro tenant nebo site collection. Ověření probíhá lokálně bez sítě.
Community a Pro
Bez platného klíče běží formulář v režimu Community (Free). Platný klíč odemkne Pro. Klíče vydává dodavatel produktu. Licence se ověřuje v prohlížeči podpisem klíče a nevolá žádnou externí službu.
| Vlastnost | Community | Pro |
|---|---|---|
Záložky ve formuláři (maxTabs) | 2 | bez omezení |
Aktivní pravidla (maxRules) | 3 | bez omezení |
Kaskádové lookupy (allowCascadingLookups) | ne | ano |
Vlastní skripty (allowCustomScripts) | ne | ano |
AI asistent v builderu (allowAiAssistant) | ne | ano |
| Vodoznak „Powered by FormCraft 365 (Community Free)“ v zápatí formuláře | zobrazen | skrytý |
Jak se licence uplatní
Limity se uplatňují jen v návrháři. Za běhu se nic neblokuje: formulář vyhodnotí všechna pravidla, zobrazí všechny záložky, použije kaskádové lookupy i skripty, i když konfigurace limity Community překračuje.
- Záložky a pravidla: na dosažený limit záložek ukazuje návrhář zakázané tlačítko, u pravidel nad limit varování a vypnuté přepínače.
- Kaskádové lookupy: v paletě je kaskádový lookup bez licence Pro zamčený (štítek Pro, nejde přidat tlačítkem ani přetažením) a v inspektoru lookupu nejde kaskáda zapnout (ovládací prvek Závisí na poli je zakázaný se štítkem Pro). U pole, které kaskádu už má, jde nastavení dál upravovat a kaskádu lze kdykoli zrušit. Kaskády, které už v konfiguraci jsou, zůstanou a jdou dál nastavovat; návrhář k nim zobrazí varování.
- Vlastní skripty: bez licence Pro je editor skriptů jen pro čtení se štítkem Pro. Existující skripty jdou zobrazit a běží dál, ale nejdou měnit. Skripty upravené jinde (JSON, import) návrhář jen ohlásí varováním.
- Banner pro návrháře: když konfigurace překračuje licenci Community, formulář nad sebou ukáže správcům formuláře (a jen jim) zprávu, co přesně překračuje (počet pravidel nebo záložek, kaskádové lookupy, skripty). Běžní uživatelé ji nevidí.
Zapnutí skriptů za běhu řídí nezávisle politika skriptů, ne licence.
Rozsah klíče
- Celý tenant: klíč platí na všech webech tenantu. Je vázán na ID tenantu (pole
tid). - Vybrané site collection: klíč obsahuje seznam ID site collection (pole
sid) a platí jen v nich včetně všech podwebů. Porovnává se ID site collection (ne ID webu), bez ohledu na velikost písmen.
Formát klíče
Klíč je text SPFXFC-<data>.<podpis>. Data jsou JSON v kódování base64url, podpis je ECDSA P-256 / SHA-256. V balíčku je jen veřejný klíč, takže klíč nelze vyrobit ani upravit bez dodavatele. Úprava jediného znaku podpis zneplatní. Obsah (verze v, tid, tier pro nebo trial, exp, iat, volitelně cust a sid) zobrazí dialog po vložení klíče.
tier: Pro (placená licence, obvykle na rok) nebo Trial (zkušební, obvykle 14 až 30 dní). Funkce jsou stejné.exp: poslední den platnosti včetně (do konce dne v UTC).
Co dodat dodavateli
Pro vystavení klíče dodavatel potřebuje ID tenantu a u klíče pro vybrané weby také ID site collection každého webu. Obě hodnoty zobrazí dialog licence v návrháři, každou s tlačítkem Kopírovat.
- Otevřete formulář seznamu a v návrháři (ozubené kolo, Nastavení formuláře) klikněte v záhlaví na Licence.
- Zkopírujte ID tenantu a ID site collection a pošlete je dodavateli spolu s požadovanou platností a jménem zákazníka.
- Pro víc site collection opakujte tento postup na webu každé z nich.
Zadání klíče v návrháři
- V návrháři klikněte v záhlaví na Licence (vedle štítku Community Free nebo PRO).
- Vložte klíč do pole Licenční klíč. Klíč se ověřuje už při psaní. Platný klíč ukáže zeleně tarif, datum platnosti, zákazníka a rozsah, neplatný ukáže důvod (viz Chybové hlášky).
- V části Uložit pro zvolte umístění (viz níže) a klikněte na Uložit klíč.
- Po úspěchu se zobrazí „Klíč byl uložen a licence aktualizována“ a štítek v záhlaví se změní na PRO.
Volba „Uložit pro“
| Volba | Kam se zapíše | Kdo smí |
|---|---|---|
| Celý tenant (vyžaduje admina App Catalogu) | Tenantová Storage Entity SpfxFormCustomizer_License v tenantovém App Catalogu | Správce tenantového App Catalogu |
| Tato site collection | Soubor SiteAssets/FormCustomizer/license.txt v kořenovém webu site collection (platí i pro podweby). Nemá-li uživatel práva do kořene, zapíše se do Site Assets aktuálního webu. | Vlastník webu (po zamčení úložiště jen vlastníci) |
- Nemáte-li práva admina App Catalogu, dialog sám přepne na „Tato site collection“ a ukáže příkaz pro správce tenantu.
- Klíč omezený na site collection uložený do tenantu se v ostatních site collection neaktivuje. Dialog na to upozorní.
- Po zamčení úložiště konfigurace smí licenční soubor zapsat jen vlastník webu. Ostatním dialog ukáže hlášku „Licenci do zamčené složky FormCustomizer mohou uložit jen vlastníci webu“. Čtení zůstává všem. Viz Oprávnění.
Tenantová Storage Entity (PowerShell)
Správce tenantového App Catalogu může klíč zapsat bez návrháře:
Connect-PnPOnline -Url "https://<tenant>.sharepoint.com/sites/appcatalog" -Interactive
Set-PnPStorageEntity -Key SpfxFormCustomizer_License -Value "SPFXFC-..." -Scope Tenant
# Odebrání
Remove-PnPStorageEntity -Key SpfxFormCustomizer_License
Stejný příkaz dialog zobrazí, když tenantový zápis z prohlížeče selže. Je tam i tlačítko Kopírovat příkaz.
Soubor v Site Assets
Volba „Tato site collection“ vytvoří (nebo přepíše) soubor license.txt s jediným řádkem, samotným klíčem. Soubor můžete vytvořit i ručně: nahrajte textový soubor license.txt do složky FormCustomizer knihovny Site Assets kořenového webu site collection. Klíč je podepsaný, takže na ochraně souboru z hlediska licence nezáleží.
Zápis do property bagu webu se nepoužívá. Moderní weby s NoScriptem (DenyAddAndCustomizePages) ho blokují i vlastníkům. Starý klíč v property bagu webu nebo seznamu se ještě čte, ale nový se tam nezapisuje.
Pořadí čtení a cache
Při otevření formuláře se klíč hledá v tomto pořadí, první platný klíč vyhrává:
- Tenantová Storage Entity
SpfxFormCustomizer_License. - Soubor
SiteAssets/FormCustomizer/license.txtv kořenovém webu site collection. - Totéž v aktuálním webu (jen pokud jde o podweb).
- Property bag webu (jen čtení, starší umístění).
- Property bag kořenové složky seznamu (starší umístění).
- Neplatný klíč v jednom místě (jiný tenant, vypršelý, špatný podpis) neblokuje další: čtení pokračuje a použije se první klíč, který projde.
- Cache: prohlížeč si na hodinu pamatuje jen surový text klíče (
localStorage, zvlášť pro tenant a site collection), aby se šetřily REST dotazy. Klíč se při každém načtení ověřuje znovu, takže vypršení platí okamžitě. - Výpadek čtení (síť, oprávnění) nikdy nezablokuje formulář. Při výpadku všech zdrojů se zkusí starší cache, jinak platí Community.
- Po změně klíče mimo návrhář (PowerShell, ruční soubor) může změna trvat až hodinu, nebo do vymazání klíčů
_fc_lic_*vlocalStorageprohlížeče.
Chování bez licence a po vypršení
- Chybějící, neplatný nebo vypršelý klíč = Community. Formulář nikdy nespadne a ukládání dat uživatelů není licencí ohroženo (fail-open).
- Návrhář po vypršení ukáže štítek Community Free, varování o překročení limitu (více než 2 záložky nebo 3 pravidla) a v zápatí formuláře se vrátí vodoznak. Stávající konfigurace se nemaže.
- Vypršelé právo na aktualizace (
upd): klíč s polemupdplatí jen pro balíčky vydané do tohoto data. Je-li balíček novější, jde o pravý klíč a návrhář pracuje v režimu Community (limity pravidel a záložek, bez skriptů a AI), ale zobrazí zákazníka a datum konce údržby s výzvou k obnovení (v záhlaví návrháře a v dialogu Licence). Hotové formuláře fungují dál a koncovým uživatelům se vodoznak „Community Free“ v tomto případě nezobrazuje. Starší klíče bezupdzůstávají platné. - V záhlaví návrháře a v dialogu Licence se zobrazuje zákazník, ID tenantu a platnost do.
meta.licensedToameta.tenantIdv uložené konfiguraci jsou jen informativní metadata (builder je při každém uložení přepíše aktuálními hodnotami, z importu se nepřenášejí); nejsou ochranou ani důkazem. - Revokace: zneužitý nebo uniklý klíč lze zneplatnit zapsáním jeho identifikátoru
kid(SHA-256 podepsaného obsahu) do seznamuREVOKED_LICENSE_KIDSv nové verzi balíčku. Klíč pak přestane platit po nasazení této verze, ne okamžitě na dálku (offline ověření). Jinak licenci ukončuje datumexp, proto se klíče vydávají s omezenou platností. Pro prodloužení vložte nový klíč stejným postupem.
Chybové hlášky
Dialog hlásí důvod, proč klíč nelze použít. Řešení hledejte podle textu:
| Hláška | Příčina a řešení |
|---|---|
| Neplatný formát klíče. | Klíč nezačíná SPFXFC-, je zkrácený nebo má poškozená data. Vložte celý klíč znovu, bez uvozovek a zalomení řádků, které mohl doplnit e-mail. |
| Podpis klíče je neplatný. | Klíč byl upraven nebo není od dodavatele. Případně prohlížeč neumí ověřit podpis (chybí Web Crypto, typicky nezabezpečený kontext). Požádejte dodavatele o nový klíč. |
| Nepodporovaná verze klíče. | Klíč je z novějšího formátu. Aktualizujte balíček řešení. |
| Klíč byl vydán pro jiný tenant. | ID tenantu v klíči nesouhlasí s tenantem, ve kterém formulář běží. Pošlete dodavateli ID tenantu z dialogu (tlačítko Kopírovat). |
| Klíč není určen pro tuto site collection. | Klíč obsahuje jiné site collection. Pošlete dodavateli ID site collection z dialogu a požádejte o doplnění. |
| Platnost klíče vypršela. | Datum exp už uplynulo. Požádejte o nový klíč. |
| Do tenantu nelze zapsat bez práv admina App Catalogu… | Uložte klíč do site collection, nebo předejte zobrazený příkaz Set-PnPStorageEntity správci tenantu. |
| Uložení klíče selhalo: … | Jiná chyba zápisu (např. nedostupná knihovna Site Assets). Použijte zobrazený příkaz nebo vytvořte license.txt ručně. |
Další postup při problémech: Řešení problémů, licence nebyla rozpoznána.