Lekce 6 - Objekty systému ObjectGears - Třídy a Dotazy
V minulé lekci, Objekty systému ObjectGears - Model, jsme si popsali objekt Model, který je základní pro vytváření "aplikací" v systému ObjectGears.
Už víme něco o modelu, jakožto "aplikační schránce". Dnes se budeme věnovat třídám a dotazům. Tyto dva objekty mají dost společného a mají podobná nastavení. Proto si je popíšeme najednou.
Třída
Třída je objekt, do kterého se ukládají uživatelské záznamy. Jde o ekvivalent databázové tabulky. Každá třída má sloupce (text, číslo, datum, odkaz,...) a řádky.
Dotaz
Dotaz neobsahuje vlastní data jako třída, ale obsahuje předpis (SQL příkaz), který umožní získat data z jiných tříd či dotazů, transformovat je a vytvořit z nich vlastní záznamy, které si může uživatel zobrazit. Tyto záznamy se nikde neukládají. Načtení záznamů z tříd a dotazů a jejich transformace probíhá pokaždé, když se dotaz zobrazuje.
Zobrazení seznamu tříd/dotazů
Na seznam tříd se dostanete z levého menu Správa / Modely / Třídy, na dotazy pak Správa / Modely / Dotazy. Dále v detailu modelu je na toolbaru odkaz Třídy a Dotazy pro rychlé přepínání mezi třídami a dotazy:
Seznam tříd
Na seznamu tříd/dotazů je v horní části filtrovací blok. Vyhledávat můžete podle modelu nebo kódu/názvu třídy/dotazu. Vyberete model a tlačítkem Filtrovat spustíte daný filtr. Vždy tak vidíte třídy/dotazy pouze pro jeden vybraný model. Tlačítkem Vymazat filtr si zobrazíte všechny třídy/dotazy.
Na toolbaru jsou tlačítka:
- Nový - pro vytvoření nové třídy/dotazu
- Vytvořit číselníky – (jen u tříd) slouží pro hromadné vytváření podobných tříd
- Dotazy - (jen u tříd) pro rychlý přechod na dotazy stejného modelu
- Třídy - (jen u dotazů) pro rychlý přechod na třídy stejného modelu
Vytvořit číselníky
Na seznamu tříd je na toolbaru tlačítko Vytvořit číselníky. Tato funkce nám umožní hromadně vytvořit třídy, které mají podobnou strukturu, například číselníky. Po kliknutí na tlačítko se zobrazí stránka, kde do pole Hodnoty pro číselníky zadáte na každý řádek kód a název pro jednu třídu. Hodnoty oddělte středníkem takto:
stav;Stavy úkolů sekce;Sekce úkolů
Pomocí checkboxů pod tímto polem vyberte předdefinované sloupce, které se mají do každé třídy vytvořit. Kliknutím na tlačítko Vytvořit číselníky se požadované třídy i se sloupci vytvoří. Tato funkce je vhodná právě pro číselníky, které většinou obsahují jen sloupce id, kód, název a příznak povoleno, či některou z těchto kombinací. Díky přednastaveným sloupcům tak vytvoříte kompletní třídy nebo alespoň část tříd velmi rychle. Specifické sloupce si pak již doplníte po jednom:
Hromadné vytvoření číselníků.
Nová třída
Kliknutím na tlačítko Nový na seznamu tříd se zobrazí stránka pro zadání nové třídy. Nastavení třídy má mnoho parametrů, my si ale popíšeme jen ty nejdůležitější. Na ostatní se dostaneme v některém dalším díle, až budeme popisovat další funkcionalitu a objekty systému ObjectGears.
Sekce Základní vlastnosti
Sekce se nachází v záložce Základní vlastnosti a má následující pole k vyplnění:
- Model – Model, ve kterém bude třída vytvořena.
- Kód – Kód třídy pro práci ve skriptech.
- Jméno – Název třídy, je možné jej zadat lokalizovaně.
- Poznámka – Poznámka pro vývojáře. Nikde se nezobrazuje.
Sekce Správa záznamů
Zde nastavíme operace, které budou moci uživatelé se třídou provádět pomocí GUI:
- Povolit vložení záznamů – uživatelé mohou vytvářet nové záznamy
- Povolit změny záznamů – uživatelé mohou měnit záznamy
- Povolit zobrazení seznamu dat – je povoleno zobrazení záznamů formou seznam záznamů
- Povolit zobrazení detailu dat – je povoleno zobrazení detailu jednoho vybraného záznamu
- Povolit zobrazení detailu dat v seznamu – je povoleno zobrazit detailní seznam záznamů (karty se všemi sloupci)
Detail nové třídy vypadá následovně:
Detail nové třídy
Dále máme k dispozici vybalovací menu, popíšeme si, co dělá každá položka z nich:
- Způsob mazání záznamů
- Fyzicky mazat záznamy – záznam bude kompletně vymazán z databáze
- Logické mazání záznamů – záznam bude pouze označen příznakem, že je smazán
- Nepovolit mazání záznamů – záznamy není možné mazat
- Typ dotazu před smazáním záznamů
- Bez potvrzení – smazání záznamu proběhne okamžitě po kliknutí na tlačítko Smazat
- S potvrzením – uživatel bude nejdříve dotázán, zda chce záznam opravdu smazat
- Povolit zobr. smazaných záznamů v seznamu – při povolení této položky bude v seznamu záznamu (v sekci s filtrem) zobrazen checkbox pro zobrazení i smazaných záznamů.
- Omezení mazání
- Bez omezení
- Záznam nelze smazat, pokud je odkazován – při nastaveném logickém mazání, před vlastním smazáním proběhne kontrola, zda na mazaný záznam není odkaz z jiné třídy. Při fyzickém mazání nelze záznam smazat, pokud na něj odkazuje jiný záznam. Nejprve je třeba smazat odkazující se záznam nebo ho aktualizovat, aby neodkazoval na záznam, který chceme smazat.
Záložka Role a zobrazení
V záložce Role a zobrazení můžeme nalézt tyto nastavení:
- Zobrazit ve výchozím menu – Pokud pro model použijete výchozí nastavení menu, pak při zaškrtnutí tohoto nastavení bude třída zobrazena v menu.
- Řadit dle sloupce X – Nastavení řazení se projeví při zobrazení seznamu záznamů. Řadit můžete dle libovolného sloupce a vzestupně nebo sestupně.
- Povolit navigaci na formuláři – Toto nastavení zobrazí v detailu jednoho záznamu navigační prvek, pomocí kterého můžete přecházet na předchozí a následující záznamy.
- Zobrazit číslování řádek v seznamu – V zobrazení seznamu záznamů bude každý řádek očíslován (od 1.).
Formát záznamu
Každý záznam má krátký popis (ShortDescription) a do něj je uložen textový popis záznamu. Ten může být složen z libovolných sloupců třídy daného záznamu. Definice určující, jak bude ShortDescription vytvořen, se zadává do pole Formát popisu. Tento ShortDescription se pak používá jako textový identifikátor záznamu, např. při výběru záznamů v ComboBoxech nebo vyhledávacích formulářích.
Do Formátu popisu se do dvou složených závorek {{…}} píší kódy sloupců, ze kterých chceme krátký popis vytvořit. Text mimo závorky bude vložen do výsledku také. Předpokládejme, že máme třídu se státy a se sloupci code a name. Pak můžeme vytvořit třeba tyto formáty:
{{column.code}}: {{column.name}} ČR: Česká republika {{column.code}} – {{column.name}} (Id:{{column.id}}) ČR - Česká republika (Id:100) {{column.name}} Česká republika
Pokud formát nevyplníme, tak bude zobrazeno FULLID, což je kombinace ID třídy a ID záznamu, které je jedinečné přes celou instanci systému ObjectGears. Pokud je ID třídy 100 a ID záznamu 200, pak by FULLID bylo <100-200>.
Sekce Seznam rolí
Zde si popíšeme pouze nastavení Role a Operace. ObjectGears umožňuje detailní nastavení oprávnění na jednotlivé záznamy využívající organizačních struktur a přebírání oprávnění z odkazovaných záznamů, ale o tom si povíme až někdy příště.
Pro každou roli můžeme vybrat operace, které chceme povolit. Tlačítkem Přidat roli ke třídě přiřadíme roli. Nezapomeňme nakonec ještě kliknout na tlačítko Uložit, aby se vše uložilo do databáze:
Záložka Doplňující nastavení
V této záložce máme zaškrtávací pole, popíšeme si pouze ty první dvě:
- Povolit hromadné změny – po zaškrtnutí bude moci uživatel (bude-li mít oprávnění) hromadně měnit více záznamů najednou
- Povolit hromadné smazání - tohle dělá to samé, ale namísto změny je bude moct mazat
Sekce Archivace
V této sekci můžeme nalézt další zaškrtávací pole:
- Povolit archivaci dat – po zaškrtnutí se budou všechny změny ve třídě logovat do archivační tabulky
- Zobrazit archivační tlačítko v seznamu dat – na stránce se seznamem záznamů bude tlačítko pro prohlížení archivních záznamů
- Zobrazit archivační tlačítko v detailu dat – na stránce s detailem záznamu bude tlačítko pro prohlížení archivních záznamů pro konkrétní záznam
Sekce vypadá takto:
Všimněte si, že pouhým zaškrtnutím checkboxu získáme historii změn ve třídě.
Zapnutá historie u tabulek, které se často mění může způsobit velmi rychlý nárůst velikosti databáze. Používejte tedy historii uvážlivě a jen tam, kde má opravdu smysl. V ObjectGears můžete využít také automatické čištění logů, které umožňuje nastavit promazávání starých záznamů.
Sekce Jedinečnost sloupců
V této sekci máme na výběr tři ComboBoxy a jedno textové pole:
- Sloupec 1, 2, 3 – nastavení kombinace až tří sloupců, které musejí být ve třídě jedinečné
- Popis chyby – textové hlášení, které se zobrazí uživateli při pokusu o uložení duplicitního záznamu
Sekce vypadá následovně:
Tato funkce je vhodná, pokud potřebujeme ve třídě nastavit jedinečnost záznamů podle 1-3 sloupců. Pokud má být jedinečnost složitější, pak máme k dispozici objekt Pravidla.
Toto je základní přehled vlastností, se kterými si prozatím vystačíme. Kliknutím na tlačítko Uložit už jen novou třídu uložíme do databáze.
Nový dotaz
Pro dotazy si popíšeme jen nastavení, která jsou specifická pro dotaz. Ostatní pole shodná se třídou zde přeskočíme.
Kliknutím na tlačítko Nový na seznamu dotazů se zobrazí stránka pro zadání nového dotazu.
Záložka Definice dotazu
SQL – SQL příkaz s definicí dotazu.
Příklad
Tento dotaz vrátí všechny role definované v systému ObjectGears:
SELECT * FROM Role r
Dotaz SQL odpovídá jazyku SQL používaném na SQL Serveru. Je zde ale několik odlišností.
Při odkazu na třídu nebo dotaz použijeme tento příkaz:
{{: class.kod_tridy :}} x {{: query.kod_dotazu :}} x
kde x
je pojmenování třídy/dotazu v SQL.
Jako názvy sloupců se nepoužívá vlastnost sloupce Sloupec v DB, ale Kód sloupce:
SELECT u.id, u.name FROM {{: class.ukol :}} u
V dotazech můžeme použít i klauzuli WITH
:
WITH u AS ( SELECT * FROM {{:class.ukol:}} uu ) /* ENDWITH */ SELECT u.id, u.name FROM u
V dotazech můžeme používat přímo tabulky z databáze, třídy (pomocí
{{: class.kod_tridy :}}
) nebo jiné dotazy (pomocí
{{: query.kod_dotazu :}}
).
Jako další proměnné lze v dotazu například:
{{:model.id:}}
– vloží ID aktuálního modelu, ve kterém je dotaz vytvořen{{:class.kod_tridy.id:}}
– vloží ID třídy{{:query.kod_dotaz.id:}}
– vloží ID dotazu{{app.parameter.kod_parametru}}
– vloží hodnotu aplikačního parametru{{model.name}}
– vloží název modelu{{model.code}}
– vloží kód modelu{{model.parameter.kod_parametru}}
– vloží hodnotu parametru z modelu{{column.kod_sloupce.name}}
– vloží název sloupce{{column.kod_sloupce}}
– vloží hodnotu ze sloupce pro aktuální záznam{{class.name}}
– vloží název třídy{{class.code}}
– vloží kód třídy{{query.name}}
– vloží název dotazu{{query.code}}
– vloží kód dotazu{{loginuser.id}}
– vloží ID přihlášeného uživatele. Pokud není nikdo přihlášen, pak je vloženo-1
.{{loginuser.fullname}}
– vloží celé jméno přihlášeného uživatele{{loginuser.account}}
– vloží účet přihlášeného uživatele{{loginuser.code}}
– vloží kód přihlášeného uživatele{{loginuser.email}}
– vloží email přihlášeného uživatele
Vkládání ID do dotazu pomocí výše uvedených formulí je vhodné, pokud v dotazu vytváříme např. URL. Hodnota tak bude dynamicky vytvořena, což je mnohem lepší, než když ID do dotazu napíšeme napevno. Později bychom jinak mohli mít problém při přenosu dotazu na jinou instanci systému ObjectGears (testovací, provozní,...), kde mohou být odlišné identifikátory (ID).
Před uložením dotazu je potřeba vyplnit model, kód, jméno a přiřadit role. Pak již jen stačí kliknout na tlačítko Uložit.
Smazání třídy/dotazu
Pro smazání třídy/dotazu slouží tlačítko Smazat. U složitějších modelů může být problém objekt smazat vzhledem k závislostem mezi objekty. Nemůžeme totiž smazat objekt, pokud se na něj odkazuje jiný objekt. Pro vyhledání závislostí pro daný objekt (zde třídu/dotaz) můžeme použít tlačítko dole na toolbaru Třída / Vazby objektu nebo Dotaz / Vazby objektu.
Přístupová oprávnění
Pro práci s třídami a dotazy musíme mít oprávnění administrátora nebo musíme být nastaveni jako IT vlastník na příslušném modelu. Pokud jsme administrátoři, pak vidíme všechny definované třídy. Jako IT vlastník vidíme jen třídy patřící do modelů, u kterých jsme nastaveni jako IT vlastník.
V další lekci, Objekty systému ObjectGears - Sloupce, si popíšeme sloupce pro třídu, tj. co jsou zač a jak je vytvořit.