• No results found

Dialogové okno pro výb r asu a data

In document Liberec 2014 Jakub Jirouš (Page 42-47)

U editace hodnot reprezentovaných pomocí množinového datového typu ENUM je vždy zobrazena aktuální nabídka hodnot, které lze nastavit. Nabídka je tvo ena prost ed-nictvím formulá ového prvku typu select box a hodnoty jsou získávány ze struktury dané tabulky, kde je jejich p esné zn ní definované. Obdobn je realizovaná i editace datového typu SET. Nabídka všech hodnot je shodn získávána ze struktury tabulky, ale je zobra-zována pomocí formulá ových prvk check box, u kterých je možné zaškrtnout více položek sou asn .

Možnost editace datových typ typu BINARY nebo BLOB, obsahující binární data, není v této aplikaci implementovaná. Stávající editace ostatních datových typ je prová-d na pomocí AJAX požaprová-davk . Tohoto zp sobu by nebylo možné u eprová-ditace velkých binárních soubor docílit, protože AJAX požadavky jsou pro p enos dat limitované. Celý zp sob editace by musel být zm n n, ímž by se narušil dosavadní koncept pro vytvo ení jednoduché a rychlé aplikace. Docházelo by ke zpomalení v d sledku odesílání velkého množství dat prost ednictvím HTTP požadavku.

Pokud je ve struktu e sloupce nastaveno, že nesmí obsahovat nulovou hodnotu, for-mulá ovému prvku je nastaven valida ní atribut, který nedovolí odeslání forfor-mulá e d íve, než je daný prvek vypln n tzv. required.

V p ípad , že je provád na editace nad sloupcem, jehož hodnota odpovídá klí ové hodnot , je pomocí formulá ového prvku select box uveden aktuální dostupný výpis na-stavitelných hodnot. Tímto zp sobem je provád na zm na závislostí jednotlivých ádk mezi tabulkami v databázi.

Po provedení všech pot ebných zm n a zajišt ní správného vypln ní všech formu-lá ových prvk díky nastaveným valida ním pravidl m je formuformu-lá odesformu-lán. Obslužná funkce zpracovávající odeslaný formulá používá funkci z modelové vrstvy, která vyko-nává SQL dotazy nad databází. Funkce z modelové vrstvy následn provede aktualizaci dat v p íslušné databázové tabulce. Aktualizace dat je následn provedena i v šablon vypisující data. Na záv r je viditelnost edita ního modal okna op t deaktivována.

6.12 SQL p íkazy

V aplikaci je možné krom akcí popsaných v p edchozích krocích provád t i zpra-cování libovolných SQL p íkaz .

Vstupním bodem sloužícím pro zadávání SQL dotaz je p íkazové okno tvo ené formulá ovým prvkem textarea. K následnému zpracování jsou použity metody obsažené v knihovn Nette\Database\Helpers.

( ! > ,5 ? - )*

P íkazové okno m že obsahovat více než jeden SQL p íkaz. V p ípad , že jich ob-sahuje více, musí být od sebe vzájemn odd leny st edníkem.

Zpracování p íkaz je provád no funkcí z modelové vrstvy, která daný p íkaz vy-koná nad aktuáln p ipojenou databází, nebo pouze nad samotným serverem. Zmi ovaná funkce vrací sadu výsledk Nette\Database\ResultSet, která je využita jako vstupní para-metr metody dumpResult. Metoda dumpResult se následn postará o vykreslení výsledku zpracovaného SQL p íkazu do HTML tabulky. Proto je její volání použito až v šablon .

public static dumpResult(Nette\Database\ResultSet $result)

Zdrojový kód 14: Definice metody pro zobrazování výsledku SQL p íkazu

( ! ! >,; ) 0 ? $

Krom samotného zpracovávání jsou veškeré SQL p íkazy vizuáln zobrazovány.

K zobrazování zpracovaných p íkaz se využívá metoda dumpSql, která jako vstupní pa-rametr p ejímá et zec obsahující všechny p íkazy z p íkazového okna. Výsledkem je zobrazení p íkaz se zvýrazn ním SQL syntaxe.

public static string dumpSql(string $sql, array $params = NULL)

Zdrojový kód 15: Definice metody pro zvýrazn ní SQL syntaxe

( ! @ - )*

Všechny zpracované SQL p íkazy, i v etn p íkaz jejichž syntaxe nebyla zcela správn , jsou evidovány po dobu p ipojení k databázovému serveru v historii p íkaz .

Do historie je ukládán vždy celý obsah p íkazového okna s rozd lením po jednotli-vých p íkazech podle po adí, v jakém bylo provád no jejich zpracovávání. Jako identifikátor je používán aktuální datum a as z doby zpracování. Jednotlivé uložené p í-kazy lze zp tn upravovat a v p ípad pot eby znovu vykonat. K dispozici je tla ítko, pomocí n hož je možné obsah celé historie nenávratn smazat.

6.13 Vizuální schéma databáze

Jednou z hlavních a nejd ležit jších ástí celé aplikace je tvorba vizuálního schéma databáze. Jelikož se jedná o pom rn náro nou operaci, byla k této innosti využita javascriptová knihovna pro tvorbu diagram v HTML5 pod názvem JointJS.

( # 4 , < <

Knihovna JointJS pro tvorbu diagram je pln interaktivní nástroj s podporou pro všechny moderní webové prohlíže e. Uvád ná knihovna není pouze kreslícím nástrojem, ale díky MVC architektu e dokáže z výsledného vykreslení odd lit jednotlivé prvky. Celé jádro knihovny JointJS je licencováno pod Mozilla Public License ve verzi 2. V základní nabídce je k dispozici n kolik p eddefinovaných stavebních prvk , kterých lze p i tvorb diagram i schémat využít [21].

Základním principem knihovny je vytvo ení hlavní kreslící plochy, do které budou jednotlivé prvky vykreslovány a umís ovány. Následn jsou vytvo eny jednotlivé kom-ponenty typu joint.shapes.devs.Model, které v p ípad vyvíjené aplikace p edstavují tabulky v databázi. Pomocí funkcí z modelové vrstvy jsou získávány všechny pot ebné údaje o databázi, jako název a struktura jednotlivých tabulek. Každá komponenta zastu-puje danou tabulku z databáze. Do každé komponenty jsou umíst ny tzv. porty s popiskem, které reprezentují sloupec v databázové tabulce. U každé komponenty bylo nutné upravit pozici umíst ní port , popisk a p edevším pozici, na které se bude kom-ponenta v kreslící ploše vykreslovat, aby se komkom-ponenta co nejvíce podobala databázové tabulce. Po vytvo ení všech komponent jsou vykresleny na kreslící plochu.

Po umíst ní komponent do kreslící plochy je realizována vizualizace vazeb mezi jednotlivými tabulkami. Op t je zde použita funkce z modelové vrstvy, která získává všechny údaje o využití cizích klí z tabulky KEY_COLUMN_USAGE z informa ní da-tabáze INFORMATION_SCHEMA. Každý port uvnit vytvo ené komponenty má sv j jednozna ný identifikátor, díky n muž lze p íslušnému portu nastavit na jakou kompo-nentou a jaký konkrétní port má být vykresleno spojení, p edstavující vazbu mezi jednotlivými sloupci databázových tabulek. Díky jednozna ným identifikátor m každé komponenty je možné vytvo it komponenty typu joint.dia.Link, p edstavující reali-zaci propojení dvou komponent typu joint.shapes.devs.Model, které jsou po svém vytvo ení taktéž vykresleny na kreslící plochu. Po vykreslení všech vytvo ených kompo-nent, do již existující kreslící plochy, vznikne výsledné požadované schéma databáze.

P i vytvá ení port v jednotlivé komponent typu joint.shapes.devs.Model, bylo v p vodním ešení realizováno obarvení jednotlivých port podle p íslušné skupiny datového typu sloupce v databázové tabulce. Obarvování m la na starosti ást ve zdrojo-vém kódu, u které se po testování zjistilo, že celý proces vykreslování schéma velmi zpož uje. Proces vykreslování schéma databáze se u složit jších databází, obsahujících velké množství vazeb mezi tabulkami, dostával až za hranici desítek vte in. Proto nebylo grafické zvýrazn ní jednotlivých port dle dané skupiny datového typu v aplikaci imple-mentováno a aplikace je schopná celé schéma databáze vykreslit až t ikrát rychleji oproti p vodnímu zamýšlenému ešení.

In document Liberec 2014 Jakub Jirouš (Page 42-47)