Úvod

Funkce v šablonách

Konstanty v šablonách

Proměnné v šablonách

COM rozhraní

Pořadí volání šablon

Rozdíl mezi makrem a šablonou.


Funkce v šablonách
Funkce v šablonách a makrech

ForTable  Projede všechny tabulky.

ForAlterKey Projede všechny alternativní klíče, které patří aktuálni tabulce.

ForCol Projede všechny slupce, které patří aktuální tabulce.

ForPkCol Projede všechny sloupce tvořící primární klíč, které patří aktuální tabulce.

ForPFkCol

ForRelPk

ForIndex  Projede všechny indexy patřící aktuální tabulce.

ForIndexCol Projede všechny položky indexu patřící aktuálnímu indexu

ForParent

ForChild

ForDict  Projede všechny uživatelské typy v modelu.

ForTrigger  Projede všechny triggry v modelu.

ForProcedure  Projede všechny uložené procedury v modelu.

ForView  Projede všechny pohledy v modelu.

Template (NazevSablony)  Vyhodnotí šablonu s názvem NazevSablony

TemplateToFile(NazevSablony,NazevSouboru) Podobné jako Template, ale výsledek uloží do souboru. Používá se hlavně v HTML

reportech,

Macro (NazevMakra)  Vyhodnotí makro s názvem NazevMakra

If(podminka,vyraz1,vyraz2)  Vyhodnotí podmínku, pokud je pravdivá vrátí výraz1, pokud není pravdivá, vrátí výraz2.

pozn.Jde o funkci, vyhodnocuje oba výrazy, protože parametry funkce mají vyšší prioritu než funkce samotná.

Iff(podminka,vyraz1,vyraz2). Podobné jako if, ale mnohem efektivnější, nejedná se totiž o funkci, ale o makro. Vyhodnocuje jen ten výraz, který se opravdu použije. Používejte tehdy, pokud jsou "vyraz1" a "vyraz2" složitější.

Naprostá většina funkcí má 5 parametrů. Zde je jejich popis.

Dále

Konstanty v šablonách a makrech

Proměnné v šablonách a makrech

Rozdíl mezi makrem a šablonou

5 parametrů..

Pořadí volání šablon a maker a jejich viditelnost

Úvod.


Konstanty v šablonách
Konstanty v šablonách a makrech

Protože některé znaky v makrech a šablonách mají speciální význam, musíte je nahradit příslušnou konstantou.

C1  zavináč @

C2  procenta %

C3  levá složená závorka {

C4  pravá složená závorka }

C5  úvozovky "

C6  apostrof '  (většinou není nutno nahrazovat apostrof konstantou)

CR  nový řádek

TB  tabelátor

příklad:

Pokud chcete vygenerovat create table s názvem tabulky u uvozovkách:

Create table "t1" ( ...

pak musíte musíte napsat šablonu takto:

@fortable("" ,"", "create table %C5%%TableName%%C5%, "", "")

nebo

@fortable("", "", "create table " + C5 + TableName + C5, "", "")

Úvod.


Proměnné v šablonách
Proměnné v šablonách a makrech

DictName

TableName

EntName

ConstraintPkName

AlterKeyname

AlterKeyConstraintName

AlterKeyKeys

PkChildName

PkChildDefaultValue

PkParentName

AtrName

AtrDescription

AtrIsDict

ColName

ExistPk

AtrPkName

TypSQL

Type

Length

Decimal

NotNull

Check, CheckValue

Def, DefValue

IndexName

IndexExpr

IndexFilter

IndexFilterExist

Unique

Clustered

Desc

IndexColDesc

BeforeScript

AfterScript

UserTrigger

Trigger

TriggerName

Procedure

ProcedureName

View

ViewName

TableStorage

IndexStorage

CreatedDate

ModifiedDate

LDropTableGener

LDropTriggerGener

LTriggersGener

LTriggersUserGener

LBeforeScript

LAfterScript

LPkAsConstraint

LFkAsConstraint

LRefIntegGener

LIndexGener

LDropDomainGener

LDomainGener

LTableGener

LAlterKeysGener

LProceduresGener

LViewsGener

ProjectName

ModelName

AuthorName

Version

Company

DatabaseType

IsParent

IsChild

FRelName

RelName

ParentTableName

ChildTableName

ParentKeys

ChildKeys

ConstraintExist

Constraint,ConstraintCheck

ConstraintDefault

ConstraintAtrUnique

CheckExist

DefaultExist

Default, DefaultValue

DefExist

Def2Exist

Def2,Def2Value

LIndexExist

UniqueAtr

LPkGener

HtmlFileName

HtmlDirectory

Úvod.


Rozdíl mezi makrem a šablonou

V CASE Studiu jsou 2 druhy skriptu, makro a šablona

Makro se používá, pokud máte složitejší textový výraz s mnoha podmínkami (i vnořenými). Např. skript CreateTable je je napsán makro, protože je dost složitý,

cr+

"Create table %tablename% %tablestorage% ("+

forcol("", "", cr+tb+  if(AtrIsDict,macro(CreateAtrib2),macro(CreateAtrib)) , ",", "")+

if(existpk and lPkGener, ","+cr+if(lPkAsConstraint and (not Empty(ConstraintPkName)),"Constraint %ConstraintPkName%","")+ " Primary Key ("+forpkcol("", "", ColName, ",", ")"+cr) , cr )+

");"+cr+showmessage("Table %tablename%")

pozn. 4. a 5. řádek je v originále jeden řádek.

Je to v podstatě jeden textový výraz. Podobně byste to psali ve většině programovacích jazyků.

Všimněte si výrazu forcol("", "" ..... Vypadá to jako funkce, ale je tu rozdíl. Je v prioritě parametrů, ve funkci mají parametry obvykle vyšší prioritu než funkce samotná, zde je to naopak.. To znamená, že parametry se předávají jako kusy zdrojového kodu, a vyhodnocují se až uvnitř funkce. Např. ve forcol se vyhodnotí parametry pro všechny atributy v modelu. O parametrech více zde.

Uvnitř řetězce můžete použít proměnné, v tom se makro podobá šabloně.

př.

"Create table %tablename% %tablestorage% ("  ...

se chová stejně jako

"Create table " + tablename + " " + tablestorage + "("

Pozor, nesmíte do sebe zanořit 2 řetězce. Říďte se barvami. Pokud to jinak nejde, rozdělte makro na více maker.

Šablona se používá, pokud je výraz jednodušší a obsáhlejší. Je to v podstatě normální text, do kterého jsou vloženy výrazy k vyhodnocení. Např. skript CreateTriggerUpdate je napsán takto:

{lEntParUpdTrig or lEntChildUpdTrig}

/* Update trigger for %tablename% */

CREATE Trigger tu_%tablename% for %tablename% @showmessage("Trigger for %tablename% ")

before update as

@if(lEntParUpdRest or lEntChildUpdRest,"declare variable numrows integer;","")

begin

     @forchild( "", "", template(triggerparentupdate), "", "" )

     @forparent("", "", template(triggerchildupdate), "", "" )

end

^

Ve složených závorkách  je direktiva, uvnitř je logický výraz. Pokud parser na direktivu narazí, vyhodnotí ji. Pokud je výsledek pravdivý (true), parser pokračuje ve vyhodnocování šablony. Pokud je výsledek nepravdivý (false), parser začne přeskakovat řádky do té doby, dokud nenarazí na další direktivu příp. konec šablony. Direktiva musí být úplně vlevo u kraje, jinak je ignorována !!!.

Mezi znaky % jsou proměnné.

Vše mezi znaky % se pro změnu chová jako makro, můžete tam používat textové výrazy. Nezanořujte řetězce !!!.

Funkce se odlišují od ostatního textu tím, že je před ní znak @, zavináč. Uvnitř funkce se už zavináč nepoužívá, jednotlivé

parametry funkcí se chovají jako makra.

Jak se volají

Makro se volá

z jiného makra:

macro(NazevMakra)

ze šablony

@macro(NazevMakra)

Šablona se volá

z makra

template(NazevSablony)

z jiné sablony

@template(NazevSablony)

Úvod.


5 parametrů

Naprostá většina funkcí (hlavně ty, jejichž název začíná na FOR) má 5 parametru.

1. parametr, vyhodnotí se jenom pro prvni objekt.

2. parametr, vyhodnotí se pro všechny objekty kromě prvního.

3. parametr, vyhodnotí se pro úplně všechny objekty.

4. parametr, vyhodnotí se pro všechny objekty krome posledního.

5. parametr, vyhodnotí se jenom pro poslední objekt.

př:

ForCol("Create table %TableName% (", "", "%ColName% %TypSQL%",",%cr%", ")")

Zde máte hodně zjednodušený příklad výrazu pro vytvoření SQL skriptu Create Table.

V prvním parametru máte text "Create ....  Ten se vykoná jen jednou pro první sloupec. Končí levou závorkou.

Druhý parametr je prázdný.

Ve třetím parametru se vygeneruje název sloupce (atributu) a datový typ.

Všimněte si čtvrtého parametru, je v něm čárka a znak pro konec řádky. Protože se čtvrtý parametr vyhodnotí pro všechny sloupce kromě posledního, bude čárka za všemi sloupci kromě posledního.

V pátém parametru ke uzavírající pravá závorka.

Výsledek může vypadat takto:

Create table Adresar (

ico char(8),

dic char(15),

jmeno char(30),

prijmeni char(30) )

Úvod.


Pořadí volání šablon a maker a jejich viditelnost

Pokud je definováno více šablon nebo maker se stejný názvem, je voláno to s vyšší prioritou. Priority jsou seřazeny takto:

1. Šablony pro entity. Jsou uložené v modelu u entity, jsou viditelné jen z této entity.

2. Šablony pro Model. Jsou uloženy v modelu, jsou viditelné pouze z modelu.

3. Uživatelské šablony pro databází. Jsou uloženy v samostatném souboru, jsou viditelné pro všechny modely dané databáze.

4. Šablony pro databázi. Součást dodávky, jsou viditelné pro všechny modely dané databáze.

5. Systémové uživatelské šablony. Jsou uloženy v samostatném souboru, jsou viditelné pro všechny modely.

6. Systémové šablony. Součást dodávky, jsou viditelén pro všechny modely.

Systém hledá nejprve šablonu (makro) s nejvyšší prioritou, pokud ji nenajde, hleda tu s nižší prioritou.

Úvod.


COM rozhraní

IModel	Je přístupné vždy

ITable	Je přístupné uvnitř makra ForTable

IColumn  Je přístupné uvnitř maker ForCol,ForPkCol,ForPfkcol,ForRelPk

IDictType Je přistupné uvnitř makra ForDict, a také uvnitř maker ForCol, ForPkCol,ForPfkcol,ForRelPk, pokud ma atribut slovníkový typ.

IAlterKey	Je přístupné uvnitř makra ForAlterKey

IIndex	Je přístupné uvnitř makra ForIndex

IIndexCol	Je přístupné uvnitř makra ForIndexCol

IRelation	Je přístupné uvnitř maker ForParent, ForChild

ITrigger	Je přístupné uvnitř maker ForTrigger,ForTriggerr

IProcedure	Je přístupné uvnitř maker ForProcedure a ForProcedurer

IView	Je přístupné uvnitř maker ForView a ForViewr.

Pokud o přístup k rohzhraní, které v té době není přístupné, vyvolá chybové hlášení a ukončí zpracování šablon.

Více podrobností o struktuře rozhraní je v helpu tlb.hlp

Úvod.


ForTable

Prochází všechny tabulky v modelu.

Parametry.

Př: vypíše všechny tabulky

ForTable("","",TableName+cr,"","")

Úvod.


ForCol

Prochází všechny atributy v tabulce (entitě). Funguje pouze uvnitř makra ForTable.

Parametry

Př: Vypíše všechny tabulky a sloupce. Je zde vidět zanoření Forcol uvnitř ForTable

ForTable("", "", "Table %TableName%"+ForCol("", "", "Col %ColName%", "", ""), "", "")

Úvod.


ForDict

Prochází všechny slovníkové typy v modelu.

Parametry

Př. vypíše všechny slovníkové typy v modelu:

ForDict("","",DictName+cr,"","")

Úvod.


ForTrigger

Prochází všechny triggry v modelu.

Parametry

Úvod.


ForPkCol

Prochází všechny atributy, které jsou součástí primárního klíče aktuální entity. Funguje pouze uvnitř makra ForTable.

Parametry

Úvod.


ForPFkCol

Prochází všechny atributy, které jsou součástí primárního nebo cizího klíče aktuální entity. Funguje pouze uvnitř makra ForTable.

Parametry

Úvod.


ForIndex

Prochází všechny indexy v tabulce (entitě0. Je funkcní jen uvnitř makra ForTable.

Parametry

Úvod.


ForIndexCol

Prochází všechny položky indexu. Je funkční jen uvnitř makra ForIndex.

Parametry

Úvod.


ForRelPk

Prochází všechny atributy, kterými patří aktuální relaci. Je funkcní jen uvnitř maker ForParent a ForChild.

Parametry


TableName

Název tabulky. Je přístupný pouze uvnitř makra ForTable.

Jde o fyzický název, logický název je EntName.

Úvod.


DictName

Název slovníkového typu. Je dostupný v makru ForDict, a také v makrech:

ForCol

ForPkCol

ForPFkcol

ForRelPk

kde je součástí atributu.

Úvod.


EntName

Název entity. Je přístupný pouze uvnitř makra ForTable.

Jde o logický název, fyzický název je TableName.

Úvod.