Sběr dat pomocí formulářů
Občas je potřeba získat od více lidí údaje, které mají víceméně pevnou podobu. Lze si představit třeba daňové přiznání nebo dotazník volebních preferencí. Pro tento účel lze buď využít speciálně vytvořený software, obvykle s webovým rozhraním, nebo zvolit nějaké univerzální řešení založené na obecných aplikacích a samostatných definicích formulářů.
Druhá z možností se v praxi vyskytuje v podobě různých proprietárních řešení, zhusta nasazovaných například ve státní správě. Vypadá to tak, že si uživatel pro vyplnění formuláře nainstaluje „vyplňovací“ aplikaci, formulář odešle buď přímo z aplikace, nebo například prostřednictvím ISDS, a následně se data zpracují v jiné aplikaci.
Jde to ale i jinak. W3C připravilo otevřený formát XForms, jenž je založen na jazyce XML a umožňuje vyplňování formulářů v aplikacích, které tento formát podporují. Takových aplikací je celá řada a patří k nim i kancelářské balíky Apache OpenOffice a LibreOffice.
V těchto kancelářských balících lze jak připravit formulář k vyplňování, tak ho následně vyplnit a odeslat data na server. Tam je samozřejmě potřeba mít připraveno nějaké zpracování, tedy například ukládání souborů k pozdějšímu použití nebo už přímo XML parser, jenž data zvaliduje, zpracuje a poté kupříkladu uloží do databáze.
Jak vytvořit formulář
Vytvoření XML formuláře je poměrně snadné a podobá se obecnému vytváření formulářů v dokumentech. Postup začíná založením nového dokumentu připraveného pro formulář. V nabídce se vybere Soubor › Nový › Dokument s XML formulářem.
Nový dokument s XML formulářem
Vznikne dokument programu Writer, který se ale od toho „obyčejného“ liší už na první pohled tím, že otevře panel pro správu formulářových dat (Datový navigátor). Po vytvoření je dokument přepnut do návrhového režimu.
Příprava dat
Nyní nadefinujeme, jak mají formulářová data vypadat. Dokument může obecně obsahovat více formulářů. Takovému formuláři se v terminologii XForms říká model (protože jde vlastně o datový model), dokument tedy může mít více modelů. Dalším důležitým pojmem je instance – ta obsahuje vlastní data. Standardně je v modelu jen jedna, ale občas se jich používá víc – typicky v případě, kdy je potřeba pro manipulaci s daty potřeba nějaká pomocná pole a s hlavní instancí nelze manipulovat, protože je nadefinována podle nějakého pevného schématu.
Po vytvoření dokumentu máme předvytvořen jeden model (nazvaný Model 1) a v něm je jedna instance (Instance 1). Vše je dobře vidět na panelu, tamtéž jsou i tlačítka pro vytváření nových modelů a instancí, stejně tak jako pro jejich modifikaci a odstraňování. Instanci lze také importovat ze souboru nebo URL, kde se nachází XML soubor s daty.
Formulářová pole se vytvářejí jako elementy a atributy pod nejvyšším elementem instance, který se jmenuje instanceData. Nelze ho přejmenovat, i když se aplikace tváří, že to lze (pokus však tiše selže). Elementy mohou samozřejmě tvořit strom, atributy nikoliv (příslušejí k elementu).
Chceme-li vytvořit například registrační formulář, který bude obsahovat několik osobních údajů a navíc ještě doplňující poznámku, založíme například element osoba a pod ním elementy jednotlivých údajů (případně to lze řešit i atributy). Další element bude obsahovat poznámku. Pracujeme na kartě dané instance (tedy zde Instance 1).
Tvorba datového modelu pro formulář
U každého elementu/atributu lze například nastavit, jakého typu bude, jakou bude mít výchozí hodnotu, zda bude povinný (a kdyžtak za jakých podmínek) a za jakých podmínek bude relevantní. Hodnota může být i jen ke čtení, může být vypočítávána nebo podléhat zvoleným omezením.
Nastavování vlastností elementu
Dále je potřeba nadefinovat, co se s daty udělá při odesílání. Na kartě Odeslání tedy přidáme nové odeslání. Vždy je potřeba vyplnit název, akci (URL, kam se mají data poslat) a metodu (většinou POST). Ostatní hodnoty se standardně ponechávají v původním stavu.
Nastavení odeslání formuláře
Návrh formuláře
Tím je hotova datová část a lze přejít ke grafickému návrhu formuláře. Lze použít v zásadě dvě cesty – vyjít z modelu a formulář si pak přizpůsobit, nebo se sestavit formulář a navázat ho na model. Každá má svá pro i proti, pracné jsou obě zhruba stejně.
Při postupu vycházejícím z modelu stačí myší přetahat jednotlivé datové položky na plochu dokumentu. Writer pro ně automaticky vytvoří formulářová pole a prováže je s daty. To lze udělat velmi rychle, pak ale přichází ta těžší část, spočívající v „učesání“ formuláře. Bez úprav totiž nevypadá vůbec hezky.
Formulář po přetahání položek myší
Často je potřeba pro každé pole rozpustit skupinu (Formát › Seskupit › Zrušit skupinu), protože jsou popisek a pole seskupeny a nelze s nimi jednotlivě pracovat. Následně je lze upravit co do rozměrů, polohy, ukotvení atd. Podobně jako pole je potřeba přetáhnout do dokumentu i odeslání – vznikne z něj odesílací tlačítko a i to lze samozřejmě upravit podle potřeby.
Výhodou tohoto postupu je, že snadno a rychle vytvoří správně fungující formulář, který ale může vyžadovat složitější grafické úpravy. Lze se ale vydat i jinou cestou. Pomocí tlačítek na panelu Ovládací prvky formuláře si připravit celý formulář a pak ho propojit s daty.
Toto propojování ale vyžaduje ještě jeden mezikrok, a to vytvoření vazeb. To se dělá v datovém navigátoru na kartě Vazby. Parametry vazby jsou stejné jako u datové položky, pozor ale na to, že se název položky musí zadat ručně (nelze ho vyhledat).
Správa vazeb na data
Potom už lze u jednotlivých formulářových polí funkcí Ovládací prvek... v kontextové nabídce otevřít dialog pro úpravu nastavení a tam na kartě Data vybrat model a vazbu. Vazební výraz se doplní automaticky (bude to název datové položky), datový typ rovněž.
Je potřeba vytvořit i tlačítko pro odeslání. Tomu se v dialogu na kartě Obecné nastaví parametr Činnost na hodnotu Odeslat formulář a parametr Odeslání pak podle názvu modelu a názvu příslušného odeslání.
Nastavení vlastností tlačítka
Vyplnění a odeslání formuláře
Aby šel formulář vyplnit a odeslat, musí být vypnutý režim návrhu (na panelu Ovládací prvky formuláře). Pak už stačí jen vyplnit formulářová pole, stisknout odesílací tlačítko a data se ve formě XML souboru odešlou na server. Pokud nebylo vyplněno povinné pole, bude červeně orámováno a při pokusu o odeslání Writer ohlásí neúplnost formuláře (nicméně jeho odeslání i tak dovolí).
Formulář v režimu pro vyplnění
Jak je to s definicí podle XForms
Dokument s formulářem se ukládá jako běžný dokument programu Writer (tedy do ODF; soubor má příponu .odt) a přímo do tohoto dokumentu se uloží i definice formuláře podle specifikace XForms. Kromě ručního vytažení zatím (jehož popis přesahuje rámec článku) neexistuje cesta, jak definici vyexportovat, ale ani naimportovat. Totéž se týká i formulářových dat – aktuálně je lze jen poslat na server, získat data přímo opět vyžaduje ruční manipulaci s daty.