Překvapivě velká část formulářů potřebuje posbírat "několik kusů téhož". Položky faktury. Účastníky akce. Odpovědi v dotazníku, kde si uživatel přidá tolik řádků, kolik potřebuje. Body kontrolního seznamu u úkolu. Kontakty připojené k účtu. Nasnadě je odpověď "udělej z každého opakování samostatný objekt a použij podformulář" – a někdy je to odpověď správná, totiž když mají opakované položky vlastní identitu, vlastní oprávnění, vlastní historii. Často je ale nemají. Položky na této faktuře dávají smysl jen jako položky na této faktuře. Dělat z nich samostatný typ je zbytečné. Replikátor je lehčí varianta: opakující se skupina vstupů uložená přímo na nadřazeném záznamu, spravovaná přímo v místě, bez dalšího typu v datovém modelu.
Opakující se skupina je přesně to, co název říká. Část formuláře s jedním nebo více vstupními poli, kterou uživatel může přidat, odebrat a přetažením přeuspořádat. Každá přidaná instance je samostatná kopie sekce s vlastními hodnotami. Každé odebrání projde potvrzením smazání, aby náhodné kliknutí nezahodilo práci. Pořadí zůstává zachované – přetažením položky přeuspořádáte a nové pořadí se uloží s formulářem – což je důležité třeba u položek faktury, kde je pořadí součástí toho, na čem uživateli záleží.
Popisky jednotlivých položek dají každé opakované skupině smysluplný nadpis. "Položka 1", "Účastník 2", "Otázka 3" – nebo, chcete-li, popisek řízený výrazem nad poli dané skupiny, takže se nadpis karty účastníka změní na jméno účastníka, jakmile ho vyplní. Právě takové drobnosti udrží dlouhé replikátory přehledné: formulářem s dvanácti položkami se roluje mnohem příjemněji, když je každá pojmenovaná názvem produktu, a ne pořadovým číslem.
Výchozí stav lze nastavit. Replikátor může začínat prázdný – žádné položky, jen jediné tlačítko "přidat", které uživatele vyzve k začátku – nebo s jednou přednastavenou položkou, případně s několika. Při importu dat se výchozí stav může řídit existujícími daty: při úpravě záznamu se replikátor načte s položkami, které záznam už obsahuje. Nová položka se přidá na konec, změna pořadí se zaznamená při uložení a odebrání se podrží až do odeslání formuláře.
Kontrola vstupu uvnitř skupin používá standardní pravidla formuláře – minimum, maximum, délku, regulární výraz, povinnost – uplatněná na jednotlivé skupiny, ne na replikátor jako celek. U položky, které chybí množství, se zvýrazní pole množství u této položky s chybovou hláškou této položky; ostatních položek se to nedotkne. Právě tato kontrola po skupinách dělá replikátor použitelným ve formulářích s mnoha položkami: chyby jsou lokalizované a oprava jedné položky neruší ostatní.
Replikátor funguje stejně dobře na obou místech, kde je nejvíc potřeba. Formuláře nad objekty postavené běžným tvůrcem formulářů mohou obsahovat replikátory navázané na vlastnosti, které ukládají strukturovaná pole. Formuláře v Canvasu ve stránkovém nástroji Canvas je mohou obsahovat také, se stejným přetahováním a chováním popisků. Ta jednotnost se hodí: kdo se replikátor naučí na jednom místě, používá ho stejně i na druhém.
Šablony položek replikátoru jsou to, čím je strana Canvasu zajímavější. Šablona v Canvasu určuje přesně, jak každá opakovaná položka vypadá – ne jen "rámeček se vstupními poli", ale libovolné rozvržení, které stránkový nástroj Canvas umí. Tak formuláře s bohatým opakovaným obsahem nakonec vypadají promyšleně, ne genericky: každá karta položky může mít nadpisy, seskupení, podmíněná pole, vlastní ikonu i vlastní barevné akcenty. Šablona se v Canvasu vytvoří jednou a použije ji každá položka, kterou replikátor vykreslí.
Trvalost dat je drobný, ale důležitý detail: opakované položky přežijí obnovení stránky, přechody mezi modálními okny i nechtěné přepnutí záložky. Když uživatel pracuje na replikátoru s dvanácti položkami a prohlížeč se zavře, o práci nepřijde tak, jak by se mohlo stát u méně promyšleného řešení. To je podstatné, protože replikátory se objevují právě na formulářích, do kterých uživatel vložil skutečné úsilí – a přijít o tu práci je přesně ten nejhorší okamžik, kdy by měla platforma ukázat své slabiny.
Praktické vodítko, kdy sáhnout po replikátoru a kdy po souvisejícím typu: pokud opakované položky existují jen jako součást nadřazeného záznamu – nikde jinde se na ně neodkazuje, nemají vlastní oprávnění, vlastní auditní záznam a není potřeba je samostatně vyhledávat – je replikátor ten správný nástroj. Pokud jsou opakované položky plnohodnotnými záznamy – když má být položka dotazovatelná napříč fakturami, spravovaná zvlášť oprávněními a odkazovaná z jiných míst – měl by z nich být samostatný související typ a nadřazený formulář by měl použít vzor s podformulářem. Otázka zní: má podřízený záznam vlastní život? Pokud ano, udělejte z něj typ. Pokud ne, přenechte ho replikátoru.
Ukázka z praxe: položky faktury. Typ Faktura má standardní vlastnosti (zákazník, datum, stav) a k tomu replikátor položek. Každá skupina položky nese produkt, množství, jednotkovou cenu a spočítaný součet. Uživatel přidá tolik položek, kolik faktura potřebuje, přetažením je přeuspořádá a uloží. Celkový součet faktury se z položek replikátoru spočítá zobrazovacím výrazem. Žádný typ Položka v datovém modelu, žádná přeplácaná záložka se zpětnými vazbami, žádné nastavování oprávnění navíc. Jen formulář, který odpovídá tvaru faktury.
Ukázka z praxe: anketa v Canvasu s opakujícími se otázkami. Formulář ankety v Canvasu má replikátor pro záznamy a každý záznam používá vlastní šablonu položky, která nastyluje otázku i prostor pro odpověď. Účastníci vyplní tolik odpovědí, kolik chtějí, replikátor je vizuálně udrží v pořádku a obslužná logika po odeslání uloží posbírané odpovědi na správné místo. Celé je to poskládané z bloků Canvasu a replikátoru – žádné skripty nejsou potřeba.
Na obou místech patří replikátor k funkcím, které se po objevení stanou součástí každého formuláře, jaký implementátor postaví. Je jednoduchý, přímočarý a zvládá celou třídu vzorů, které dřív vyžadovaly samostatný typ a pečlivě sladěný podformulář.