ellyo - web viewstruktura záznamu ukládaného pomocí formulářů...

34

Upload: vuongdien

Post on 05-Feb-2018

216 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1
Page 2: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

Ellyo – základní pojmy

ÚvodEllyo je aplikační Framework, který je určen pro vytváření internetových aplikací, prezentací a portálů, či případně klasických Windows aplikací pro správu informací. V systému vytvořeném pomocí Ellyo lze zakládat libovolné entity (např. osoba, článek, odkaz… atd.), spravovat uživatelská práva a role, vytvářet uživatelské skupiny, hledat pomocí fulltextového hledání ve všech záznamech, vytvářet a spravovat číselníky a zařazovat jednotlivé entity do těchto číselníků, vytvářet logické vazby mezi jednotlivými entitami,… atd.

Primárním účelem Ellya je usnadnění tvorby aplikací které pracující s daty, k nimž je potřeba řídit přístup pomocí uživatelských práv a rolí.

Ellyo je zcela nezávislé na GUI – grafickém vzhledu výsledné aplikace, lze jej přizpůsobit jakýmkoliv požadavkům. Výsledná aplikace, ať už webová či Windows, může používat jednotlivé fragmenty Ellya. Části, které nevyhovují pro danou aplikaci, mohou být vyměněny.

O tomto dokumentuTento dokument si nebere za úkol detailně popsat všechny detaily frameworku Ellyo. Je určen pouze jako základní materiál pro programátory a jako plnohodnotný materiál k administraci systému postavenému nad tímto frameworkem z uživatelského hlediska. Vysvětluje pojmy z jejich principiálního hlediska, nikoliv z hlediska implementačního.

ObsahEllyo – základní pojmy............................................................................................................................2

Úvod...................................................................................................................................................2

O tomto dokumentu...........................................................................................................................2

Schéma architektury Ellyo frameworku..............................................................................................4

Technický popis frameworku Ellyo.....................................................................................................4

Záznam...............................................................................................................................................5

Entita..................................................................................................................................................5

Osoba.................................................................................................................................................5

Uživatel...............................................................................................................................................5

Uživatelská skupina............................................................................................................................5

Uživatelské role a práva......................................................................................................................6

Uživatelská role..................................................................................................................................6

Zakázaná uživatelská role...................................................................................................................6

Uživatelské právo...............................................................................................................................7

www.ellyo.cz Stránka 2

Page 3: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

Mechanismus dědění rolí a práv........................................................................................................7

Systém zámků a klíčů..........................................................................................................................8

Databázové schéma uživatelských práv, skupin, rolí, klíčů a zámků...................................................9

Číselníky.............................................................................................................................................9

Přiřazení záznamu do číselníku.........................................................................................................10

Fulltext.............................................................................................................................................10

Logy..................................................................................................................................................11

Transakční logy.................................................................................................................................11

Položky redakčního systému............................................................................................................11

Vazby – asociace...............................................................................................................................11

Formuláře.........................................................................................................................................12

Tabulky používané formuláři........................................................................................................12

Záložka formuláře.........................................................................................................................13

Položka formuláře........................................................................................................................13

Zásuvné moduly...........................................................................................................................15

Kontrolní moduly..........................................................................................................................16

Validátory.....................................................................................................................................17

Tiskové sestavy - Reporty................................................................................................................18

1. Vytvoření (návrh) tiskové sestavy - naprogramování............................................................18

2. Použití tiskové sestavy – generování....................................................................................18

Tisková sestava.................................................................................................................................18

Ukázka jednoduché sestavy..........................................................................................................18

Ukázka sestavy, která používá zástupky (Seznam uživatelů I.).....................................................20

Modul tiskové sestavy......................................................................................................................20

Ukázka tiskového modulu.............................................................................................................21

Definice filtrů a řazení tiskové sestavy..........................................................................................21

Programování tiskových modulů v jazyce C#................................................................................22

Ukázka tiskového modulu, který je definován pomocí C#............................................................22

Výkonné použití vnořených modulů.............................................................................................23

Sekvence..........................................................................................................................................24

DataValue.........................................................................................................................................24

BlobValue.........................................................................................................................................24

Historie aplikace...............................................................................................................................24

www.ellyo.cz Stránka 3

Page 4: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

www.ellyo.cz Stránka 4

Page 5: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

Schéma architektury Ellyo frameworku

SERVERMS Windows Server 2003*,MS SQL Server 2005*,.NET Framework 4.0

______________* a novější

KLIENT - Internet Explorer 7.0, 8.0, Mozilla FireFox 2.0, 3.0 - HTML, CSS, JavaScript, XHTTP (Ajax)

Ellyo Systém zadavateleEllyo Core Ellyo Business App Businness Prezentační vrstva

Přístup do databáze, práce s daty, rolemi, právy, vazbami mezi objekty, FullText

Formuláře, číselníky, základní objekty (článek, soubor, odkaz, obrázek … atd.)

Objekty aplikace zadavatele – např. Projekt, výsledek, zaměstnanec .. atd., speciální funkčnost vyžadovaná zadavatelem

Internetová aplikaceOvlivnění vzhledu aplikace – Aspx, Ascx, MasterPages

WinForm aplikaceKlasická Windows aplikace -

HTML Stránka

Technický popis frameworku EllyoEllyo je sada knihoven postavených na technologii Microsoft .NET naprogramovaných v jazyce C#. Ellyo je ORM (Objektově relační mapper) doplněný o vzory a postupy, které jsou nejčastěji potřeba při tvorbě aplikací pracujících s informacemi. Jako databázová platforma je používán Microsoft SQL Server 2005 a novější.

Samotný framework je postaven na N-Vrstvé architektuře, kdy každá vrstva řeší danou problematiku. Jednotlivé vrstvy lze vzájemně kombinovat a lze používat pouze jednotlivé fragmenty z těchto vrstev. Výsledná aplikace je pak třívrstvá (zjednodušený pohled):

1) Základní vrstva (Ellyo): řeší komunikaci s databází, stará se o ukládání a vyzvedávání dat, řeší základní úlohy správy uživatelů, práv, rolí, vazeb, číselníků, fulltextu ..atd.

2) Vrstva App Bussiness: obsahuje objekty cílové aplikace zadavatele, řeší doménu (problematiku) koncové aplikace

Pozn.: obě tyto vrstvy jsou zcela nezávislé na grafickém rozhraní aplikace a lze je použít jak v internetové aplikaci tak např. v “tlustém” klientovi Windows – tj. Klasické Windows aplikaci.

3) Vrstva grafického rozhraní, nejčastěji reprezentována internetovými stránkami naprogramovaných v nějakém .NET jazyce (např. C# - .NET ASPX) anebo např. Windows formuláři Windows aplikace, či konsolovou aplikací. Jako rozhraní lze použít i např. skriptovací jazyk Microsoft PowerShell to např. v případě potřeby automatizovaných úloh běžících na Windows Serveru.

www.ellyo.cz Stránka 5

XHTTP, AJAX

Page 6: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

ZáznamZáznamem je myšlena jedna řádka v databázi. Ellyo pracuje tak, že každý záznam má své, v celé databázi unikátní, identifikační číslo (ID). Nabývá hodnot 1 až N, kde N je 32bitové celé číslo (int32). Každý záznam je tedy identifikovatelný a dohledatelný pouze pomocí jeho ID. Záznam je základním stavebním kamenem systému Ellyo, je reprezentován třídou Ellyo.db.rmBaseObject. Všechny ostatní třídy jsou potomky této třídy. Všechny záznamy mají jako primární klíč toto ID. Seznam všech záznamů je uložen v tabulce rmIdentification. Záznam má svou platnost (sloupec isValid, je evidován datum vytvoření a poslední změny (created, lastupdate).

EntitaEntitou je myšlen typ záznamu. Např. jeden řádek v tabulce uživatelů (uživatel karel) je záznam. Jeho typem (třídou, entitou) je uživatel (rmUser). Z hlediska jazyka UML (Ellyo se snaží dodržovat terminologii tohoto jazyka) je objekt instancí třídy. Pro zjednodušení můžeme prohlásit, že pojmy Entita, Třída a Tabulka jsou zde stejného významu. Jedna řádka v tabulce reprezentuje objekt, tj. záznam = objekt (zjednodušeno). Seznam všech entit (tabulek) je uveden v tabulce rmEntity a je reprezentován třídou Ellyo.db.rmEntity. Entita záznamu lze zjistit z tabulky rmIdentification, kde ID0 je IDčko záznamu a EntityID je IDčko entity.

OsobaJedna fyzická osoba (má, měla nebo bude mít svůj ekvivalent v reálném světě). Osoba je vytvářena vždy až ve vrstvě App Businness a reflektuje požadavky zadavatele.

UživatelUživatelem je myšlena virtuální entita, tj. jeden přihlašovací údaj. Jedna fyzická osoba může mít v systému vytvořeno více uživatelů (kteří mohou mít různé role a práva). Uživatel je reprezentován třídou Ellyo.db.rmUser a řádkem v tabulce rmUser. Při založení uživatele je automaticky vytvořena uživatelská skupina (tzv. Primary UserGroup), do které je uživatel přiřazen. Do skupiny Primary UserGroup již nemůže být přirazen žádný jiný uživatel. Unikátním údajem uživatele je [Name], tedy přihlašovací jméno (vlastnictví uživatele je potvrzováno znalostí hesla)

Uživatelská skupinaUživatelská skupina je entita, která umožňuje sdružovat různé uživatele. Jeden uživatel může být členem 1 až N skupin (automaticky je členem skupiny Primary UserGroup), v každé však maximálně jednou. Jednotlivé skupiny nelze zanořovat (tj. vkládat do sebe). Uživatelská skupina je reprezentována třídou Ellyo.db.rmUserGroup a řádkem v tabulce rmUserGroup. Unikátním údajem uživatelské skupiny je [Code], pokud není zadán, je systémem vygenerován automaticky. Pro zjištění uživatelů a jejich zařazení do skupin je možno použít následující VIEW:

Název VIEW FunkcewrmUserUserGroups Vrací seznam skupin a seznam uživatelů do těchto skupin zařazených

Přiřazení uživatele do skupinu je prováděno vytvořením asociace typu User-UserGroup nebo User-UserPrimaryUserGroup (viz. asociace).

www.ellyo.cz Stránka 6

Page 7: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

Uživatelské role a právaUživatelské role a práva řeší přístup k funkcím výsledné aplikace a k jednotlivým záznamům, se kterými aplikace pracuje. Uživatelské role ani práva nejsou nikdy nastavována k jednotlivým uživatelům. Jsou vždy nastavovány skupinám uživatelům. Říkáme-li, že nastavujeme uživatelské právo nebo roli nějakému uživateli, myslíme tím, že nastavujeme uživatelské právo nebo roli uživatelské skupině, ve které je pouze on sám (tzv. Primary UserGroup). Z uživatelského hlediska je tento fakt skrýván, pro pochopení všech souvislostí je však důležitý. Definice toho, jak může uživatel nakládat s daným záznamem, je dána průnikem rolí a práv a to jak nastavených přímo uživateli tak zděděných (více viz mechanismus dědění rolí a práv). Pro zjištění práv uživatele na daný záznam lze použít následující VIEW:

Název VIEW FunkcewrmUserIDViewRights Vrací seznam ID záznamů (ID0) a UserID uživatelů, kteří mohou daný

záznam zobrazitwrmUserIDEditRights Vrací seznam ID záznamů (ID0) a UserID uživatelů, kteří mohou daný

záznam editovatwrmUserIDAdminRights Vrací seznam ID záznamů (ID0) a UserID uživatelů, kteří mohou daný

záznam administrovatwrmUserIDDeleteRights Vrací seznam ID záznamů (ID0) a UserID uživatelů, kteří mohou daný

záznam smazatwrmUserIDRights Vrací seznam všech ID v systému a všech UserID uživatelů spolu se všemi

právy, které má daný uživatel na daný záznam – toto VIEW je třeba používat obezřetně (z výkonnostních důvodů)

Uživatelská roleUživatelské role popisují (povolují) přístup jednotlivých uživatelů k funkcím systému (aplikace). Ellyo obsahuje základní sadu uživatelských rolí (např. smí vytvořit záznam, smí vstoupit do administrace, apod.), které jsou vždy rozšířeny na základě analýzy (a požadavků zákazníka). Výsledný program je pak vytvořen tak, že uživatel smí použít ty funkce, které jsou mu pomocí uživatelských rolí povoleny. Uživatelská role je reprezentována třídou Ellyo.db.rmUserRole, na úrovni databáze je abstrakcí položky číselníku UserRole, tj. je uložena v tabulce rmCategory, kde CategoryGroupID je cizí klíč do rmCategoryGroup, kde Code = ‘UserRole’. Unikátním údajem uživatelské skupiny je [Code] (stejně jako u položky číselníku), pokud není zadán, je systémem automaticky vygenerován. Pro práci s rolemi lze použít následující VIEW:

Název VIEW FunkcewrmUserIDRoles Vrací seznam uživatelů a rolí, které daný uživatel má nastavenywrmUserIDForbiddenRoles

Vrací seznam zakázaných rolí pro dané uživatele

Uživatelské role lze nastavovat nejen uživatelům, ale i uživatelským skupinám, ze kterých jsou pak role děděny (více viz mechanismus dědění rolí a práv).

Zakázaná uživatelská rolePokud je uživatel členem uživatelské skupiny, která má nastavenou uživatelskou roli, kterou chceme jednomu danému uživateli zakázat (vytvořit pro něj výjimku), použijeme institut zakázané uživatelské

www.ellyo.cz Stránka 7

Page 8: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

role. Pokud má uživatel zakázanou uživatelskou roli, je ignorována tato role zděděná z uživatelských skupin nebo speciálních uživatelů (např. LoggedUser). Upozornění: zakázané uživatelské není v tuto chvíli možno nastavovat pomocí aplikace Ellyo WebAdministrátor, lze je nastavit pouze pomocí Ellyo Core vrstvy programově. Zakázaná role je vytvořena pomocí asociace typu [ForbiddenUserRole].

Uživatelské právoUživatelské právo definuje způsob, jakým může daný uživatel pracovat s jedním daným záznamem. Uživatel může k danému záznamu nabývat těchto práv:

- View: má právo si daný záznam zobrazit (toto právo je obecně používáno i pro tisk)- Edit: má právo daný záznam upravit – editovat- Delete: má právo daný záznam smazat- Admin: má právo administrovat daný záznam, tj. přidělovat práva na tento záznam dalším

uživatelům.- Add: má právo přidávat jiné záznamy pod tento záznam (zatím není toto právo používáno)

Uživatelské právo je reprezentováno třídou Ellyo.db.rmUserRights, v databázi pak 1..N řádkem v tabulce rmUserRights.

Nastavené právo může mít nastavenu platnost (od-do). Je tedy možné nastavit přístup k danému záznamu s časovým omezením. Tato funkce je v Ellyo zavedena, není však zatím výrazně podporována.

Mechanismus dědění rolí a právV Ellyo existují tito speciální uživatelé:

- Nepřihlášený uživatel ( GGuest ) : jedná se o osobu, která nemá uživatelský přístup k aplikaci, tj. nemá vytvořeného uživatele. Z bezpečnostního důvodu může tento uživatel získat pouze právo VIEW na dané záznamy (roli může získat libovolnou). Tento uživatel má status hosta, který pouze prohlíží a nemusí se přihlásit. Pokud je nastaveno právo na nějaký záznam tomuto uživateli, uvidí jej osoby - návštěvníci aplikace (resp. stránek) pouze do okamžiku dokud se nepřihlásí.

- Všichni uživatelé ( Guest ) : všichni uživatelé, tj. i ti, kteří nejsou přihlášeni (tj. všichni GGuest a LoggedUser). Pokud je nastaveno nějaké právo pro tohoto uživatele, získávají automaticky toto právo všichni uživatelé (i ti co nejsou přihlášení). Z bezpečnostního důvodu je možno tomuto uživateli přiřazovat pouze právo VIEW pro jednotlivé záznamy.

- Přihlášený uživatel ( LoggedUser ) : pokud je nastaveno nějaké právo nebo role tomuto uživateli, získávají automaticky toto právo všichni uživatelé v systému, kteří se mohou přihlásit.

Uživatelská práva a role jsou děděny následujícím způsobem:

Guest LoggedUser UserGroup UserGuest LoggedUser UserGuest User

Tj. uživatel LoggedUser (přihlášený uživatel) získává automaticky všechna práva a role nastavené uživateli Guest (všichni), jakákoliv skupina (UserGroup) získává automaticky všechna práva a role

www.ellyo.cz Stránka 8

Page 9: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

nastavené uživateli LoggedUser (nebo uživateli Guest). Jakýkoliv uživatel získává automaticky všechna práva a role nastavené uživatelské skupině (UserGroup), ve které je členem, anebo práva a role nastavená uživatelům LoggedUser a Guest (uživatel nemusí být členem žádné skupiny, aby získal práva nastavená pro LoggedUser a Guest).

Systém zámků a klíčůZámky a klíče rozšiřují systém práv o další úroveň. Pokud je potřeba omezit práva na daný záznam aniž by však byly fyzicky zrušena práva samotná, je možné na záznam použít zámek, tj. jej zamknout. V okamžiku zamknutí zámku jsou systémem nastavená práva ignorována, resp. jsou ignorována všechna práva kromě VIEW (práva prohlížet). V případě odemknutí (smazání zámku nebo vypršení platnosti) jsou dříve nastavená práva obnovena, resp. již nejsou systémem ignorována. Zámek je reprezentován třídou Ellyo.db.rmLock, v databázi řádkem v tabulce rmLock.

V okamžiku zamknutí není možno se záznamem manipulovat (editovat, mazat, administrovat). Pokud je však potřeba možnost manipulace někomu přidělit, říkáme, že přidělujeme klíče (k danému zámku). Klíče k danému zámku mohou být přiděleny uživatelským skupinám na dané právo. Přidělíme-li tedy klíč k právu EDIT dané skupině, znamená to, že pro danou skupinu uživatelů a dané právo zámek neplatí, tj. platí standardní systém práv. Pokud přidělíme klíč k právu EDIT skupině uživatelů, která nemá právo EDIT na daný záznam, neznamená to, že by tímto právo získala. Klíč je reprezentován třídou Ellyo.dm.rmLockKey, v databázi pak řádkem v tabulce rmLockKey.

www.ellyo.cz Stránka 9

Page 10: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

Databázové schéma uživatelských práv, skupin, rolí, klíčů a zámků

ČíselníkyČíselník je entitou, která sdružuje položky číselníku. Slouží k evidování základních vlastností číselníku. Za číselník je obecně považován jakýkoliv záznam, který obsahuje skupinu pod-záznamů (položek číselníku), které jsou seznamového typu. Číselníky je vhodné použít, je-li v systému potřebovat

www.ellyo.cz Stránka 10

Page 11: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

vytvořit seznam, ve kterém je potřeba evidovat pouze názvy položek a jejich identifikační kódy (a případně popis). Je reprezentován třídou Ellyo.db.rmCategoryGroup, v databázi řádkem v tabulce rmCategoryGroup. Unikátním údajem je [Code], jestliže není zadán, je systémem vygenerován automaticky. Položka číselníku je reprezentována třídou Ellyo.db.rmCategory, v databázi řádkem v tabulce rmCategory. Unikátním údajem je [Code] v kombinaci s cizím klíčem CategoryGroupID (ID číselníku). Příkladem číselníku budiž např. Státy, Jazyky, Okresy ..atd. Příkladem položek budiž např. Česká Republika, Slovensko, Čeština, Slovenština, Beroun, Karlovy Vary ..atd.

Přiřazení záznamu do číselníkuLibovolný záznam v systému lze přiřadit k číselníku (resp. k položce číselníku). Podporovány jsou dva způsoby přiřazení:

- Kategorizace cizím klíčem: tj. záznam lze přiřadit k pouze jedné položce daného číselníku (tato možnost je používána např. u položek formuláře)

- Kategorizace pomocí vazební tabulky: tj. záznam lze přiřadit k libovolnému počtu položek daného číselníku . Toto řešení umožňuje i omezit platnost přiřazení záznamu k číselníku. Vazební tabulka je reprezentována třídou Ellyo.db.rmCategorization, v databázi pak řádkem v tabulce rmCategorization.

FulltextFulltextovým vyhledáváním je myšlena možnost nalézt záznam zařazený do fulltextového indexu pomocí libovolného slova uvedeném v daném záznamu. Nejznámější fulltextovou službou je hledání společnosti Google. Pokud je tedy do indexu přidán např. článek, který obsahuje např. slovo “ahoj“ na libovolné stránce článku, může být tento článek dohledán tímto slovem (nebo pouze jeho částí). Do Fulltextu může být zahrnut libovolný záznam. Fulltext poskytuje pouze základní funkce, neumí skloňovat, synonyma, hledaná slova nejsou vážena. Jedná se pouze o rychlé hledání v daném sloupečku anebo v celém záznamu. FullText je vytvářen asynchronním způsobem. Při uložení záznamu se uloží do fulltextu vždy pouze prvních pět slov z každého sloupce záznamu, a pokud záznam obsahuje více slov, je přidán do seznamu k asynchronnímu zpracování. Záznam je tedy okamžitě po uložení k dohledání a fulltextové indexování nezdržuje ukládání záznamů. Plné indexování probíhá v samostatném, paralelně běžícím, procesu. Implementace tohoto procesu se odvíjí od prostředí, ve kterém je aplikace nasazena. Může být realizována jako samostatné vlákno ve webové aplikaci běžící na IIS serveru anebo např. jako konsolová aplikace běžící na jiném stroji.

Fulltext je tvořen těmito tabulkami:

- flltStopWord: slova zde uvedená nejsou zařazována do fulltextu (zatím nepodporováno)- flltWaitingList: záznamy zde uvedené čekají na plné zaindexování do fulltextu- flltWordDictionary: slovník všech použitých slov- flltWordReference: referenční tabulka výskytu slov v daném záznamu (a sloupci)- flltWordPossition: definuje, na jaké pozici se nachází daná reference na slovo v daném

záznamu

www.ellyo.cz Stránka 11

Page 12: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

LogySystém umožňuje evidovat stavové informace, resp. tzv. logy k libovolnému záznamu systému. Do logů je ukládána např. historie vybraných záznamů, informace o práci uživatele v systému, informace o provedených operacích nad jednotlivými záznamy (např. vytvořen, změněn, smazán, změněn stav ..atd.). Log je reprezentován třídou Ellyo.db.rmLog, v databázi pak řádkem v tabulce rmLog.

Transakční logyPokud je potřeba uložit log dočasného charakteru o nějaké události, lze vytvořit log pomocí tzv. transakčního logu. Log je reprezentován třídou Ellyo.db.rmTransLog, v databázi pak řádkem rmTransLog. Transakční log je vhodný pro logy, které nemají přímý vliv na chod aplikace (např. statistika návštěvnosti). Transakční log má svou řadu IDček a lze z něho mazat bez vlivu na funkčnost aplikace.

Položky redakčního systémuEllyo neobsahuje ve svém základním provedení redakční systém, který by umožňoval evidování textů z důvodu prezentace např. na internetových stránkách. Protože však existuje potřeba umožnit uživatelsky (pomocí aplikace) měnit např. úvodní text aplikace, či jiné informační texty, byl do Ellya naimplementován fragment redakčního systému prostřednictvím tabulky rmRedactionItems (třída Ellyo.db.rmRedactionItem). Unikátním údajem je [Code]. Položka umožňuje uložit text, který má nadpis. V případě potřeby složitějšího redakčního systému je možno použít Ellyo WebPortál (viz. www.ellyo.cz).

Vazby – asociaceV případě potřeby vytvořit v aplikaci vazbu mezi dvěma objekty (entitami), je možno použít vazební tabulku rmAssociation (třída Ellyo.db.rmAssociation). Druh vazby je uložen v tabulce rmAssociationType (třída Ellyo.db.rmAssociationType). Tato tabulka nahrazuje veškeré jiné vazební tabulky, u kterých je potřeba evidovat pouze typ vazby a platnost. Ellyo obsahuje několik základních typů vazeb, které není možno smazat bez ztráty funkčnosti základní vrstvy Ellyo Core.

Typ asociace PopisUser-UserGroup Uživatel – Uživatelská skupina: přiřazení uživatele do uživatelské

skupinyUser-PrimaryUserGroup Uživatel – PrimaryUserGroup: přiřazení uživatele do jeho Primary

UserGroupTreeAssociation Stromová vazba mezi dvěma záznamy. Při vytvoření této vazby je

automaticky upravována rmAssTreeReference (stromová tabulka)ForbiddenUserRole Uživatel – zakázaná uživatelská role: definuje zakázanou

uživatelskou roli pro daného uživateleForm-Plugin Formulář – zásuvný modul: definuje zásuvné moduly, které jsou

používány pro operace s daným formulářemForm-Report Formulář – tisková sestava: definuje tiskové sestavy určené pro tisk

daného formulářefrmForm-frmVerification Formulář – kontrolní modul: definuje kontrolní modul, který je

použit pro kontroly na straně serveru u daného formuláře

www.ellyo.cz Stránka 12

Page 13: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

FormulářeFormuláře jsou mechanismem, který umožňuje uživatelsky měnit strukturu ukládaných entit v databázi. Obecně, pokud vznikne potřeba umožnit uživatelům aplikace měnit strukturu ukládaných záznamů (přidávat, měnit a mazat jednotlivá políčka), jsou použity formuláře. Formuláře jsou používány u typů záznamů, u kterých se předpokládá, že jejich struktura bude rozšířena resp. měněna v průběhu času. Formuláře jsou navrženy tak, aby bylo z jejich popisů možno automaticky v aplikaci vygenerovat stránku pro prohlížení i editaci. Formuláře jsou součástí programového prostoru (namespace) Ellyo.db.forms, tabulky v databázi mají prefix frm. Formulář je reprezentován na úrovni třídního diagramu třídou Ellyo.db.forms.frmForm, v databázi pak tabulkou frmForm.

Unikátním údajem u formuláře je sloupec [Code], pokud není zadán, je systémem generován automaticky. Podle kódu formuláře je následně automaticky v databázi vytvářena tabulka, do které jsou ukládány záznamy, jejichž strukturu daným formulář popisuje. Tato tabulka se jmenuje frmFormData_KódFormuláře. Je tedy bezpodmínečně nutné, aby kód byl zadán bez diakritiky a mezer.

Formuláře lze použít s výhodou i u záznamů, u kterých se nepředpokládá žádná změna a to z důvodů validačních a kontrolních mechanismů (viz zásuvné a kontrolní moduly a validátory), kterými jsou vybaveny.

Tabulky používané formuláři

Název tabulky PopisfrmForm FormulářefrmFormFlap Záložky formulářůfrmFormItem Položky formulářůfrmFormOrderBy Tabulka pro ukládání dat sloupců, které jsou používány pro

řazení (volba [isInOrderBy] u frmFormItem)frmFormPlugin Zásuvné moduly používané při ukládání formulářových datfrmFormValidator Validátory používané pro validaci formulářových záznamů na

straně klientafrmFormVerification Kontrolní moduly pro kontrolu formulářových záznamů na

straně serverufrmFormVerificationLog Logy o provedené kontrole daného záznamufrmFormVerificationLogItem Zkoušky provedené v rámci kontroly daného záznamufrmFormVerificationLogItemMessage Zprávy (nejčastěji chybové), které popisují průběh kontroly

v rámci dané zkouškyfrmFormData_KódFormuláře Uložená formulářová data. Všechny tabulky začínají prefixem

frmFormData_ , dále pak kódem formuláře, který popisuje strukturu daných záznamu.

Formuláře lze použít následujícími způsoby:

Typ formuláře PopisDatový formulář Popisuje strukturu jednoho záznamuVnořený datový formulář Popisuje strukturu záznamu, který může být v počtu 0..n vkládán

do jiného záznamuFiltr pro tiskové sestavy Popisuje vstupní uživatelské filtry pro tiskové sestavy + sloupečky

www.ellyo.cz Stránka 13

Page 14: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

pomocí kterých je možno danou sestavu řadit

Z důvodu zvýšené přehlednosti jsou formuláře sdružovány do skupin formulářů (číselník: Skupina formulářů, rmCategoryGroup.Code = FormCategoryGroup). Tento číselník je vytvořen automaticky při založení databáze.

Struktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a položek formuláře.

Záložka formulářeFormulář může obsahovat 1..n záložek, kde záložka sdružuje položky formuláře. Záložka je reprezentována třídou Ellyo.db.forms.frmFormFlap, v databázi tabulkou frmFormFlap. Pokud je potřeba vykreslit formulář, který neobsahuje žádnou záložku, jsou jeho položky ukládány na první záložku a v GUI se tato záložka nijak nereprezentuje (není zobrazována). Unikátním údajem záložky je [Code], pokud není zadán, je automaticky generován systémem.

Položka formulářePoložka formuláře definuje jedno políčko formuláře. Položka je vždy umístěna na nějaké záložce a to vždy na jedné. Unikátním údajem (v rámci jednoho formuláře) je [Column], tj. název sloupce. Podle tohoto názvu je v databázi automaticky pro daný formulář (tabulku) generován sloupec daného datového typu. Z tohoto důvodu je nutné zadávat název sloupce bez diakritiky a bez mezer. Pokud není vyplněn, je systémem generován automaticky. Položka formuláře je reprezentována třídou Ellyo.db.forms.frmFormItem, v databázi pak tabulkou frmFormItem.

Typy položek formulářeTyp Zkratka Databázový

typPopis

Ano/Ne Bit Bit Volba zvoleno/nezvoleno, v GUI reprezentováno checkboxem (zaškrtávátkem)

Číselník Category Int Možnost zvolit jednu položku z daného číselníku, v GUI reprezentováno DropDownListem (rozbalovacím výběrem), v databázi je automaticky vytvářen na tento sloupec cizí klíč do tabulky rmCategory (položka číselníku), IDčko číselníku je uloženo u položky formuláře ve sloupci ValueCode. Do sloupce DefaultValue je možno uložit IDčko položky číselníku.

Číslo (celé) Int Int Celočíselná hodnota (int32)Číslo (reálné) Double Numeric

(10,4)Reálné číslo

Datum Date DateTime Datum bez časuDatum a čas DateTime DateTime Datum a časFormulář Form -- Vnořený formulář, je reprezentován samostatnou

tabulkou. Ve vnořeném formuláři je Master záznam (jeho ID) uložen ve sloupci ID0.

HTML text HtmlText nText Umožní vložit libovolně dlouhý text, v GUI je většinou reprezentován nějakou formou HTML editoru

Nadpis sekce SectionHeader -- Slouží ke grafickému oddělení různých částí

www.ellyo.cz Stránka 14

Page 15: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

formuláře, resp. záložky formuláře. Další nadpis ukončuje předešlou sekci, pokud chcete ukončit sekci bez započnutí další sekce, vložte na dané místo nadpis sekce bez vyplněného titulku. V GUI je reprezentován např. HTML prvkem Fieldset.

SQL číselník Sql Int Výběr z jedné možnosti z předdefinovaného dotazu. V GUI je reprezentován DropDownListem anebo speciální komponentou. Více viz. SQL číselník – typ položky formuláře.

Text Text Varchar Umožní vložit omezeně dlouhý text, nadefinovaný počet znaků pak odpovídá definici sloupce VarChar v databázi. V GUI je pak reprezentován TextBoxem (jednořádkových inputem)

Více-řádkový text

MultiLineText Varchar Stejně jako Text, s tím rozdílem že je v GUI reprezentován HTML prvkem víceřádkový textbox (multiline input).

Doporučená pravidla pro pojmenovávání sloupců položek formuláře, kódů záložek a formulářůJe doporučeno stanovit jednotný způsob pojmenovávání položek formuláře, záložek a formulářů samotných. Zvyšuje to čitelnost výsledných kódů a urychluje to následující vývoj.

Doporučená pravidla:

- Používat maďarskou notaci (viz. např. http://en.wikipedia.org/wiki/Hungarian_notation), obecně zvyšuje přehlednost kódu

- Používat prefixy: například pokud máme tabulku projektů jmenující se isvProjekt, můžeme zvolit jako prefix např. prj, sloupečky pak budou pojmenovány prjNazev, prjKod .. atd. Využívání prefixů má výhodu při následném spojování více tabulek v jeden dotaz, kdy je potom jasné, z které tabulky daný sloupeček pochází.

- Při pojmenovávání položek formuláře, které ukládají ID záznamu (číselník, SQL číselník), používat jako koncovku znaky ID, celý název sloupce pak bude: prefixJmenoSloupceID, tj. např. prjTypProjektuID. Tomu, kdo pak bude následně prohlížet danou tabulku bude zřejmé, že se jedná o IDčko záznamu (tj. cizí klíč do jiné tabulky)

SQL číselník – typ položky formulářeSlouží jako možnost nadefinovat libovolný výběr pomocí SQL dotazu. Dotaz musí vracet povinně dva sloupce a to sloupec [Value]… obsahuje IDčko záznamu a sloupec [Text]… obsahuje textovou hodnotu záznamu. Textová hodnota je zobrazována uživateli, hodnota [Value] je ukládána do databáze a je povinně typu INT. V SQL dotazu je možno použít speciální zástupku @Search, místo které jsou pak následně doplněny uživatelem zadané znaky. Pokud je využita tato možnost, je nutné v GUI použít speciální komponentu SQL DropDownList (je součástí Ellyo.util), která funguje na podobném principu jako našeptávač portálu www.seznam.cz. Tato možnost je obzvláště vhodná pro SQL dotazy, které vracejí hodně řádků a nebylo by dobré z důvodu přehlednosti a přenesených dat je reprezentovat pomocí obyčejného DropDownListu.

www.ellyo.cz Stránka 15

Page 16: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

Ukázka SQL dotazu pro SQL číselníkselect OdborID [Value], Odbor_Nazev [Text] from wAppOdbor where Odbor_Nazev like @Search order by Odbor_Nazev(jednoduchý SQL dotaz který z tabulky (nebo VIEW) wAppOdbor zvolí buďto všechny odbory anebo odbory obsahující uživatelem zvolené znaky)

Upozornění: pokud je použita položka SQL číselník na formuláři, který slouží pouze jako vstupní filtr pro tiskové sestavy, pak není nutno ve [Value] v SQL dotazu vracet pouze IDčko (celé číslo), ale je možné vracet libovolnou unikátní hodnotu (unikátní v rámci SQL dotazu).

Obrázek 1 – ukázka SQL DropDownListu

Zásuvné modulyZásuvné moduly jsou mechanismem jak programově rozšířit funkcionalitu formulářů bez zásahu a opětovného kompilování aplikace. Jedná se o C# kód, který je automaticky kompilován systémem. Tento kód může obsahovat speciální metody, které jsou spouštěny systémem při určitých akcích. Tyto metody jsou spuštěny ve stejné transakci jako ostatní kód frameworku. Moduly jsou většinou koncipovány tak, že existuje seznam těchto modulů a ty jsou přiřazovány k jednotlivým daným formulářům. Na akce jednoho formuláře může být navázán libovolný počet modulů. Modul musí být naprogramován tak, že kód obsahuje třídu Plugin, která je potomkem třídy frmFormCPluginParent. Obsah třídy může být libovolný, pokud chcete vyvolat nějakou metodu při nějaké akci navázanou na daný formulář, je nutné aby byl tento modul přirazen k danému formuláři (asociace typu Form-Plugin) a metoda musí být obsažena v seznamu podporovaných metod (viz. níže).

Ukázka zásuvného moduluusing System;using System.Collections.Generic;using System.Text;

namespace Ellyo.db.forms.plugins{ /// <summary> /// ukazkova trida zasuvneho modulu - pluginu /// </summary> internal class Plugin : Ellyo.db.forms.plugins.frmFormCPluginParent { public int plgFDBeforeSave() { if (Context.GetValueAsInteger("ProjectID") == 11)

return -100003; // cislo chyby else

return 1;

www.ellyo.cz Stránka 16

Page 17: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

} }}(tento modul obsahuje speciální metodu, která je vyvolávána před uložením daného objektu, je použita proměnná Context, ve které je uložena aktuální instance ukládaného objektu, metoda vrací záporné číslo, pokud je ukládán objekt (projekt) s IDčkem 11. Pokud tedy metoda plgFDBeforeSave vrací záporné číslo, není vůbec spuštěno uložení objektu)

Speciální metody, které lze použít pro zásuvné modulyNázev metody PopisplgFDBeforeSave Spustí se vždy před začátkem ukládání objektuplgFDAfterSave Spustí se vždy po ukončení ukládání objektu

Zásuvné moduly mohou být použity i v jiných případech než při použití těchto speciálních metod. Jejich vyvolávání je pak nutné zajistit v App Businness vrstvě systému (viz Ellyo schéma). Stejně tak je možno tento seznam v této vrstvě libovolně rozšiřovat. Výkonnost systému zásuvných modulů je zajišťována třídou frmPluginManager (Ellyo.db.forms.plugins.frmPluginManager), která drží v paměti zkompilované moduly a svou podstatou by měla být Singleton. Obecně by zásuvné moduly měly být použity tam, kde se předpokládá časté (např. v čase) měnění funkcionality, které musí být dostupné z administrační části aplikace.

Kontrolní modulyKontrolní modul je speciální zásuvný modul, který na rozdíl od zásuvného modulu nemá na starost rozšíření funkcionality frameworku, ale kontrolu ukládaných dat. Jedná se opět o C# kód (kontrola tedy probíhá na straně serveru), který obsahuje jednu speciální metodu, která spouští v určený okamžik (často iniciováno uživatelem) kontrolu ukládaného záznamu. Informace o nalezených chybách jsou ukládány do tabulek frmFormVerificationLog a frmFormVerificationLogItem. Aplikace jsou obecně napsány tak, že nalezení chyby při kontrole nezpůsobí chybu při uložení (ale může to tak být), ale pouze je informace o neúspěšné kontrole zobrazena na nějaké speciální stránce. Kontrolní modul musí být naprogramován tak, že kód obsahuje třídu Verification, která je potomkem třídy frmFormCVerificationParent. Obsah třídy může být libovolný, po spuštění kontroly je vyvolávána metoda Run(). Pokud chcete kontrolovat objekty vytvářené na základě daného formuláře, je nutné, aby byl tento daný kontrolní modul byl přirazen k danému formuláři (asociace typu frmForm-frmVerification).

Ukázka kontrolního moduluusing System;using System.Collections.Generic;using System.Text;using Ellyo.db;using Ellyo.util;

namespace Ellyo.db.forms.verifications{ public class Verification : frmFormCVerificationParent { public override bool Run() { bool isOK = true;

www.ellyo.cz Stránka 17

Page 18: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

rmCategory myCat = new rmCategory(db); myCat.Load(Context.GetValueAsInteger("CatID")); if (myCat.Code == "M1") { isOK = false; AddMessage("Kategorie nemůže být M1"); } else if (myCat.Code == "M2") { isOK = false; AddMessage("Kategorie nemůže být ani M2"); }

return isOK; } }}(Tato kontrola zjistí z kontextu objektu IDčko číselníku, provede jeho načtení a následně odečtění hodnoty uložené v Code. Pokud je uložena hodnota M1 nebo M2, je zapsán chybový log (metoda AddMessage). Pokud je vše v pořádku, je vracena hodnota TRUE, jinak FALSE.)

Výsledkem kontroly je seznam zpráv, které mohou nabývat hodnot Warning (varování) nebo Error (Chyba) - metoda AddMessage je overloaded a může obsahovat typ zprávy. Obecně platí, že pokud při kontrole vznikne jediná zpráva typu Error, pak je celá kontrola neúspěšná, zprávy typu Warning jsou brány pouze jakou upozornění a jejich výskyt ještě nemusí znamenat neúspěch celé kontroly. To jestli dané typy zpráv způsobí úspěch nebo neúspěch celé kontroly je určeno tvůrcem kontrolního modulu, tj. tím, jaká je návratová hodnota celé kontroly (metody Run – true, false)

Výkonnost kontrolních modulů je zajištěna pomocí třídy frmVerificationManager (Ellyo.db.forms.verifications. frmVerificationManager), která drží v paměti zkompilované kontrolní moduly a svou podstatou by měla být Singleton.

ValidátoryValidátory jsou mechanismem, který umožňuje validaci (kontrolu) uživatelských vstupů na straně klienta (např. v internetovém prohlížeči). Validátor kontroluje, zda je daný údaj zadaný ve správném formátu, např. datum ve formátu YY-MM-DD, nebo rok ve tvaru YYYY. Validátor nemůže kontrolovat informace proti databázi (výjimkou je JavaScriptový validátor používající AJAX), jedná se o kontrolu formátu. Validátory jsou vytvořeny buďto jako regulární výraz anebo JavaScriptová funkce (zatím neimplementováno).

Ukázka validátoru^(?=[0-9]*[ASULKHEPCJBMTZ])(?=.*[0-9])[A-FH-NPR-VX-Z0-9]{5,7}$(tento validátor je regulární výraz, který kontroluje SPZ auta)

Seznam existujících validátorů je uveden v tabulce frmFormValidator (třída Ellyo.db.forms.frmFormValidator), u každé položky formuláře lze zvolit, který validátor použít pro její validaci.

Tiskové sestavy - ReportyEllyo obsahuje mocný nástroj k rychlému vytváření tiskových sestav. Problematika vytváření tiskových sestav obsahuje následující oblasti:

www.ellyo.cz Stránka 18

Page 19: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

1. Vytvoření (návrh) tiskové sestavy - naprogramováníProgramováním se rozumí definice grafického vzhledu tiskové sestavy a definice datového zdroje, ze kterého bude sestava čerpat. Sestavy jsou postavené na jazyce HTML (postačí základní znalost) pro definici vzhledu sestavy a na jazyce SQL (požadovaná znalost se odvíjí od složitosti problematiky) pro definici datového zdroje. Tvůrce sestavy je tedy svým profilem databázový specialista se základní znalostí HTML. U složitých sestav je umožněno vytvoření části sestavy v jazyce C#. Jedná se o případ sestav obsahujících složité výpočty anebo složité rozhodovací algoritmy, které nelze realizovat pomocí jazyka SQL. Sestavy jsou připraveny k použití okamžitě po jejich uložení, kód v jazyce C# je kompilován automaticky, není potřeba vystavovat novou verzi aplikace. Tiskové sestavy je možné do sebe libovolně zanořovat, části sestavy, které se opakují, je možno ukládat do tzv. tiskových modulů. V praxi je pak většinou tisková sestava vytvořena tak, že sama pouze definuje vzhled sestavy a výkonná část sestavy je soustředěna do modulů. U tiskových sestav je možno nadefinovat sadu filtrů a způsobů řazení, které mohou být pak na generovanou sestavou použity.

2. Použití tiskové sestavy – generováníPoužitím sestavy je myšleno uživatelské použití připravené sestavy, tj. volba filtrů, řazení a následné zobrazení sestavy. Od uživatele nejsou vyžadovány žádné další znalosti. Filtrem jsou myšleny omezující podmínky, které filtrují datový zdroj tiskové sestavy (např. pouze osoby z města Praha, nebo např. osoby začínající na kar). Řazením je myšleno, podle kterých sloupců datového zdroje bude sestava seřazena (např. podle příjmení nebo podle města kde daná osoba bydlí).

Tisková sestavaTisková sestava je definována svým názvem a popisem, v případě potřeby ještě svým unikátním kódem. V databázi je reprezentována řádkem v tabulce rmReport, na úrovní třídního diagramu pak třídou Ellyo.db.rmReport.

Ukázka jednoduché sestavy<h1>Tisková sestava</h1><p>Toto je ukázka jednoduché tiskové sestavy</p>(jedná se o HTML kód, který pouze zobrazí nadpis a jeden odstavec krátkého textu)

Tiskové sestavy mohou do sebe “natáhnout“ jiné tiskové sestavy anebo moduly tiskových sestav. Mohou být také formátovány pomocí tzv. zástupek, jejichž přehled je uveden v následující tabulce:

Zástupka Popis<#R:KodReportu> Na dané místo vloží jinou tiskovou sestavu, která je definována

daným kódem reportu (sestavy)<#M:KodModulu> Na dané místo vloží tiskový modul, který je definován daným

kódem<#P:NazevPromenne> Na dané místo vloží hodnotu z datového zdroje. Názvem

proměnné je myšleno jméno sloupečku v tabulce (resp. SQL dotazu), ze které je sestava plněna.

<#Count:KodModulu> Na dané místo vloží počet opakování modulu, který je definovaný daným kódem. Modul sám sebe zopakuje, pokud daný SQL dotaz obsahuje více řádků. Lze takto zjistit, kolik bude mít daná část sestavy řádků.

<#Sum:KodModulu.JmenoSloupce> Na dané místo vloží matematický součet hodnot z daného sloupce v daném modulu

www.ellyo.cz Stránka 19

Page 20: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

<#Format:asMoney> Zformátuje daný text do formátu peněz, tj. číslo 10250,50 zformátuje na 10 250,50. Jedná se o párovou značku, lze jí kombinovat s ostatními zástupkami.Př. použití:<#Format:asMoney>10250,50</#Format:asMoney><#Format:asMoney><#P:Cislo></#Format:asMoney>

<#INC></#INC><#DEC></#DEC>

Daný obsah navýší, resp. poníží o jedničku (párová značka)

<#ViewUserRole:KodUzivRole> Zobrazí obsah pouze pro uživatele, který má danou uživatelskou roli. Jedná se o párovou značku, lze jí kombinovat s ostatníma zástupkama (uživatelem je myšleno uživatel, který spustil generování sestavy, tj. toho kdo si danou sestavu zobrazuje).Př. použití:<#ViewUserRole:roleTajnyText>Tento text se zobrazí pouze uživatelům, kteří mají roli roleTajnyText </#ViewUserRole:roleTajnyText>

<#ViewFilter:KodFiltru> Zobrazí obsah pouze pokud je vyplněn vstupní filtr generované sestavy o daném kódu (resp. sloupci položky formuláře, který slouží jako filtrovací pro danou sestavu). Jedná se o párovou značku, lze jí kombinovat s ostatníma zástupkama.Př. použití:<#ViewFilter:chbZobrazitText>Tento text se zobrazí pouze uživatelům, kteří zaškrtnou volbu zobrazit text (položka filtr. Formuláře typu Ano/Ne). </#ViewFilter: chbZobrazitText >

<#ViewNotFilter:KodFiltru> Zobrazí obsah pouze pokud není vyplněn vstupní filtr generované sestavy o daném kódu (resp. sloupci položky formuláře, který slouží jako filtrovací pro danou sestavu). Jedná se o párovou značku, lze jí kombinovat s ostatníma zástupkama.Př. použití:<#ViewNotFilter:chbZobrazitText>Tento text se zobrazí pouze uživatelům, kteří nezaškrtnou volbu zobrazit text (položka filtr. Formuláře typu Ano/Ne). </#ViewNotFilter: chbZobrazitText >

<#HtmlToText > Převede formátovaný HTML obsah na prostý text. Jedná se o párovou značku, lze jí kombinovat s ostatníma zástupkama.Př. použití:<#HtmlToText >Dobrý den, <b>toto</b> je <u>formátovaný</u> text. </#HtmlToText > .. tento obsah bude převeden na “ Dobrý den, toto je formátovaný text. “Upozornění: tato funkce v případě dlouhých textů a častého použití (velkého počtu řádků v sestavě) může způsobit zpomalení generování sestavy (tj. větší zátěž serveru)

<#TrimTo:PocetZnaku> Omezí obsah na definovaný počet znaků. Pokud je obsah delší než daný počet znaků, je oříznut a jsou přidány dvě tečky na konec. Při najetí myši je obsah zobrazen celý. Jedná se o párovou značku, lze jí kombinovat s ostatníma zástupkama.Př. použití:<#TrimTo:6>Toto je dlouhý text. </#TrimTo:6> .. tento text bude oříznut na tvar “Toto j.. “

<#HtmlToTextTrimTo:PocetZnaku> Tato párová značka je kombinací značky HtmlToText a TrimTo.

www.ellyo.cz Stránka 20

Page 21: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

Její použití je výkonnější než použití značek samostatně, platí pro ní však stejné upozornění jako pro značku HtmlToText.

Ukázka sestavy, která používá zástupky (Seznam uživatelů I.)<h1>Seznam uživatelů</h1><p>Tato sestava zobrazuje seznam uživatelů</p><table> <thead> <tr> <td>Login uživatele</td> <td>Email</td> <td>Celé jméno uživatele</td> </tr> </thead> <tbody> <#M:rpmUzivatel> </tbody> <tfoot> <tr> <td colspan="3">Celkem zobrazeno <b><#Count:rpmUzivatel></b> uživatelů.</td> </tr> </tfoot></table><#M:rpmPatickaSestavy>(Jedná se o sestavu, která zobrazí nadpis a jednoduchý popis. Dále pak tabulku ze tří sloupců, kdy každý řádek tabulky je plněn pomocí modulu rpmUzivatel. V patičce tabulky je zobrazen počet řádků tabulky. Pozn.: rmpUzivatel je vytvořen tak, že obsahuje SQL dotaz pro seznam uživatelů a zopakuje tak sám sebe tolikrát, kolik je v databázi uživatelů. Ukázka tohoto modulu bude použita dále v textu. Ukázka používá ještě modul rpmPatickaSestavy, který může být pro všechny tiskové sestavy stejný a obsahuje např. datum a čas generování sestavy či jiný text.)

Tiskové sestavy mohou být zařazeny do různých skupin tiskových sestav (např. ekonomické přehledy, personální přehledy ..atd.). Skupina tiskových sestav je položkou číselníku “Skupiny tiskových sestav“ (kód: ReportCategoryGroup). Tento číselník je vytvářen automaticky a je součástí každé databáze pro aplikace postavenou nad Ellyo. Skupiny slouží pro přehlednější rozřazení sestav a jejich následné nabízení uživatelům. Zobrazování tiskových sestav (nebo skupin sestav) daným uživatelům (nebo skupinám uživatelů) může být řízeno právy.

Modul tiskové sestavyJe vhodné ty části tiskových sestav, které se opakují v rámci jedné sestavy anebo napříč více sestavami soustředit do tiskových modulů. Tiskové moduly lze také použít z důvodu zjednodušení dané tiskové sestavy. Moduly lze do sebe libovolně zanořovat, tj. jeden tiskový modul může obsahovat více jiných modulů, ale i např. (spíše teoreticky) tiskových sestav. Jsou použity stejné zástupky jako u tiskových sestav. Tiskový modul je reprezentován v databázi řádkem v tabulce rmReportModule, na úrovní diagramu tříd pak třídou Ellyo.db.rmReportModule.

Ukázka tiskového moduluHtml část

www.ellyo.cz Stránka 21

Page 22: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

<tr> <td><#P:UserName></td> <td><#P:UserEmail></td> <td><#P:UserFullName></td> </tr>

SQL dotaz

select [Name] as UserName, [Email] as UserEmail, [FullName] as UserFullName from rmUser

(Tento modul (rpmUzivatel) slouží jako 0..ntý řádek v tiskové sestavě “Seznam uživatelů I. “. Používá zástupky pro proměnné, které jsou v SQL dotazu jako sloupce. Tento modul tedy zopakuje sám sebe na výstup (tj. na místo, kde je umístěn) tolikrát, kolik obsahuje daný SQL dotaz řádků.)

Definice filtrů a řazení tiskové sestavyV tiskových sestavách je často třeba umožnit uživatelům výslednou sestavu filtrovat (omezovat řádky podle daného filtru) anebo řadit (vzestupně, sestupně podle daného sloupce). K definování vstupního filtru sestavy slouží formulář typu “Filtr tiskové sestavy“.

Formulář se použije tak, že se do něj na první záložku vkládají položky, které reprezentují daný filtr. Lze použít tyto typy položek formuláře: Ano/Ne, číselník, číslo (celé), číslo (reálné), datum, datum a čas, text, sql číselník. Pokud je u dané položky formuláře (filtru) zvoleno, že je povinná, je uživatel tuto položku před vygenerováním sestavy povinen vyplnit (tj. je to většinou řešeno tak, že aplikace nepovolí generování sestavy, dokud není vyplněn povinný filtr). Pokud je u položky zvoleno, že se podle ní i řadí, je nabízena i pro řazení dané sestavy. Je možné odškrtnout zobrazovat a ponechat řadit podle u dané položky. Pak tato položka slouží pouze jako filtr k řazení výsledné sestavy. I tyto položky (tj. filtry) je možné nabízet uživatelům podle systému práv. Tj. může existovat skupina, která má přístup k nějakým filtrům, ke kterým jiná skupina přístup nemá.

Je možné použít i tzv. rozšířený filtr, kdy jsou uživateli nabídnuty další filtry po ťuknutí na tlačítko více (nebo jemu obdobnému) v dané aplikaci postavené nad Ellyo. Tyto rozšířené filtry lze definovat pomocí položek formuláře na druhé záložce. Pokud tato záložka není vytvořena, nejsou uživateli nabídnuty rozšířené filtry.

Dalším krokem po nadefinování vstupního filtrovacího formuláře je úprava SQL dotazu tak, aby respektoval použité filtry. Filtry určené pro řazení není potřeba jakkoliv do SQL dotazu implementovat, jsou přidávány automaticky, pouze daný SQL dotaz musí obsahovat sloupce, podle kterých bude řazeno. Filtr je určen svým kódem (resp. sloupcem u položky formuláře).

Ukázka implementace vstupních filtrů do SQL dotazu (1)SQL dotaz

select [Name] as UserName, [Email] as UserEmail, [FullName] as UserFullName from rmUser as uziv where 1=1 --#IF_PrijmeniOsoby and uziv.PrijmeniOsoby like @PrijmeniOsoby + ’%’

www.ellyo.cz Stránka 22

Page 23: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

--#ENDIF_PrijmeniOsoby(Značky --#IF_ a --#ENDIF uvozují začátek a konec podmínky pro daný filtr. Položka formuláře musí mít kód (resp. sloupec) PrijmeniOsoby. Položka je v tomto případě typu Text. Pokud není před tiskem vyplněna, je při provádění SQL dotazu vypuštěna celá sekce mezi IF a ENDIF. Filtr tedy zobrazí pouze ty uživatele, kteří začínají na dané příjmení. Těchto filtrů může být nadefinováno libovolné množství.)

Ukázka implementace vstupních filtrů do SQL dotazu (2) - fulltextSQL dotaz

select fData.* from frmFormData_MojeData fDatawhere 1=1 and (select top 1 isValid from rmIdentification where ID0 = fData.ID) = 1

--#IF_VlHledat and exists ( select ref.ID0 from flltWordDictionary dict, flltWordReference ref where 1=1 and dict.Word like (select @VlHledat COLLATE SQL_Latin1_General_CP1251_CI_AS) + '%' and ref.WordID = dict.ID and ref.ID0 = fData.ID ) --#ENDIF_VlHledat(Složitější dotaz, který z tabulky frmFormData_MojeData vrací pouze platné záznamy, které existují i ve fulltextu – příkaz collate byl použit pro odstranění diakritiky v hledaném textu, protože ve fulltextu jsou uloženy záznamy bez diakritiky)

Programování tiskových modulů v jazyce C#Tiskové moduly lze naprogramovat i v jazyce C#. Pokud existuje definice v C#, je nejprve provedeno zpracování sekce HTML a následně spuštěn kód v C#. Kód v C# musí mít následující strukturu:

- Obsahuje public class, která se jmenuje rmReportCModule a je odvozena od Ellyo.db. rmReportCModuleParent.

- Třída obsahuje metodu public override string ToHtml(), která je spouštěna automaticky při generování sestavy.

Ukázka tiskového modulu, který je definován pomocí C#Html část

<tr> <td><#P:UserName></td> <td><#P:UserEmail></td> <td>$$$UzivCeleJmeno</td> </tr>

SQL dotaz

select [Name] as UserName, [Surname] as Prijmeni, [FirstName] as Jmeno from rmUser

C# část

www.ellyo.cz Stránka 23

Page 24: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

using System;using System.Collections.Generic;using System.Text;

namespace Ellyo.db{ public class rmReportCModule : rmReportCModuleParent { public override string ToHtml() { string sPrijmeni = Context.GetValueAsString("Prijmeni"); string sJmeno = Context.GetValueAsString("Jmeno"); string CeleJmeno = sPrijmeni + " " + sJmeno;

return ReportModule.HtmlBody.Replace("$$$UzivCeleJmeno",CeleJmeno); } }}(HTML část modulu reprezentuje jednu řádku v sestavě Seznam uživatelů I. Dotaz zopakuje daný modul tolikrát, kolik je uživatelů v databázi. Je provedena HTML část modulu, tj. zaměněny známé zástupky a následně je spuštěna metoda ToHtml() v C# části. Ta provede zjištění jména a příjmení uživatele, spojí je a následně zamění za vymyšlenou zástupku $$$UzivCeleJmeno.)

Třída rmReportCModule dědí ze třídy rmReportCModuleParent následující vlastnosti:

Vlastnost PopisContext Objekt typu Ellyo.db.rmBaseObject. Reprezentuje data jedné zpracovávané

řádky z daného SQL dotazu. Jednotlivá data lze vyčíst pomocí metod GetValue, GetValueAsString .. atd.

db Objekt typu Ellyo.db.rmDB. Reprezentuje databázové připojení. Lze jej použít pro přímý přístup do databáze

FilterData Objekt typu Ellyo.db.ReportFilterInfoHolder. Reprezentuje data z filtru.Report Objekt typu Ellyo.db.rmReport. Generovaná tisková sestava, resp. nejvyšší

nadřízená sestavaReportModule Objekt typu Ellyo.db.rmReportModule. Reprezentuje stav modulu

v okamžiku generování sestavy. V proměnné HtmlBody je uložena už zpracovaná HTML část modulu.

User Objekt typu rmUser. Reprezentuje uživatele, který spustil generování dané sestavy.

Více informací k jednotlivým objektům lze získat v programátorské dokumentaci k Ellyo (http://www.ellyo.cz/docs/class/).

Výkonné použití vnořených modulůTiskové moduly fungují tak, že sami sebe zopakují na výstup podle toho, kolik SQL dotaz vrací řádků. Někdy je ovšem potřeba vložit jeden modul do druhého, a pokud oba moduly obsahují SQL dotaz, vedlo by to k násobnému zatížení databáze (pro každou řádku hlavního modulu by se prováděl SQL dotaz podřízeného modulu). Proto umožňuje generátor sestav následující operaci: hlavní modul (rodičovský) obsahuje SQL dotaz, který je skalárním součinem SQL dotazu, který potřebuje pro své vykreslení a součinem SQL dotazu podřízeného (child) modulu. Tímto je datový zdroj kompletní a je pouze potřeba správně nastavit tyto vlastnosti:

www.ellyo.cz Stránka 24

Page 25: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

1) U rodičovského modulu definovat tzv. “Distinct sloupec“, což je sloupec (resp. sloupce), nad kterým bude proveden distinct. Distinct funguje tak, že nalezne první řádku daného sloupce, která obsahuje unikátní data (např. IDčko) a následující řádky s těmito daty zahodí. Na rozdíl od klasického distinct nad SQL databází, není výsledný DataSource omezen pouze na sloupce obsažené v definici distinctu, jsou vraceny všechny sloupce a data jsou brána z prvního nalezeného řádku. Je tedy vhodné si data setřídit dle potřeby pomocí OrderBy přímo v kódu SQL dotazu. Tímto je ze skalárního součinu vytvořen korektně datový zdroj pro rodičovský modul.

2) U vnořeného (child) modulu se select již nedefinuje nad databází, ale nad DataSource rodičovského modulu. Možnosti selectu jsou limitovány metodou Select, která je implementována nad objektem DataTable v .NET Frameworku. Jedná se v podstatě o jednoduché podmínky pro filtry, nelze použít join ani agregační funkce. Lze použít následující zástupky:

Zástupka Popis@UserID Bude nahrazena za ID uživatele, který generuje sestavu@ParentID Bude nahrazena za IDčko řádku, ze kterého je generován

rodičovský modul (lze nahradit zástupkou @Parent.ID)@Parent.KodSloupce Bude nahrazena za informaci uloženou v daném sloupci řádku,

ze kterého je generován rodičovský modul

Ukázka SQL dotazu nad DataSource rodičeFirmaID = @Parent.FirmaID and Pohlavi=’Male’(provede filtr nad DataSource rodičovského modulu, který zajistí zobrazení mužů z dané společnosti)

SekvenceSekvence jsou mechanismem jak zajistit řadu čísel (znaků), která je generována dle nějakého složitého pravidla. (tento text není kompletní)

DataValueV případě, že je potřeba k jednomu záznamu uložit nějakou hodnotu textového charakteru, která se nevyskytuje u žádného jiného záznamu (anebo u omezeného množství), je možné použít extenzivní tabulku rmDataValue. Motivací ke zřízení této tabulky byla datová (a paměťová) náročnost ukládání “řídkých“ informací do tabulek v SQL Serveru (do verze 2008), kde musel být vytvořen sloupec v tabulce navíc pro uložení informace pouze k jednomu řádku. Výhodou tohoto řešení je možnost nastavení platnosti této informace a řízení přístupu k dané informaci pomocí práv.

Data jsou reprezentována třídou Ellyo.db.rmDataValue a jsou ukládána do tabulky rmDataValue. V tabulce rmDataValue je pak sloupec [ID0] IDčko záznamu, ke kterému informace náleží a [Code] je název vlastnosti. Hodnota je uložena ve sloupci [Value].

www.ellyo.cz Stránka 25

Page 26: Ellyo -   Web viewStruktura záznamu ukládaného pomocí formulářů je popsána pomocí záložek a ... and dict.Word like (select @VlHledat COLLATE SQL_Latin1

Ellyo

BlobValueBlobValue slouží ke stejnému účelu jako DataValue s tím rozdílem, že je do této tabulky možno ukládat data v binární formě (např. obrázek). Je reprezentován třídou Ellyo.db.rmBlobValue, v databázi pak tabulkou rmBlobValue.

Historie aplikacermDB.appHistory – dopsat

Zásady pro vývoj Ellyo vrstvyTyto zásady se týkají úprav aplikačního kódu Ellyo

Nikdy nenapíšu (nebo neupravím) metodu do Ellyo, aniž bych zároveň nenapsal její Test Nikdy nenapíšu (nerozšířím) v Ellyo metodu, protože jí takto potřebuji jen na jednom

formuláři nějaké aplikace .. pokud si myslím, že se jedná o rozšíření obecné, dám to tam, ale nesmím změnit existující funkcionalitu a upozorním “klíčníka“.

Nezapomenu na komentáře

www.ellyo.cz Stránka 26