Předchozí články o WebML se zabývaly modelováním těch částí webové prezentace, jejichž jediným účelem je prezentovat data, nikoli s nimi manipulovat. Prezentace dat nám ovšem ve většině případů nestačí, i jednoduché aplikace vyžadují provádění nejrůznějších operací s daty (vkládání, editace a mazání záznamů). Tento článek se bude snažit představit základní principy modelování webových aplikací, jejichž účelem je manipulace s daty, tedy například systémy typu Content Management.

Rozšíření WebML o manipulaci s daty

Abychom mohli ve WebML modelovat aplikace, které umožňují manipulaci s daty, musíme částečně rozšířit navigační model i model kompozice.

Rozšíření kompozičního modelu

Model kompozice je rozšířen o nové units pojmenované operation units, které přestavují příslušnou operaci (akci), která je vyvolána jako výsledek navigace – tedy například kliknutím na odkaz vložit do nákupního košíku v elektronickém obchodě nebo odkaz smazat u položky zboží v administrační části elektronického obchodu. Tyto operace mohou být dvou druhů:

  • externí operace, procedury
  • implicitní operace, sloužící pro manipulaci s daty vycházející z datového modelu WebML

Externí operace nejsou logicky přímou součástí WebML. Tyto operace mohou být totiž libovolného typu. Může se jednat například o webovou službu, platební bránu nebo jiné externí operace. Tím je umožněno provázat naši aplikaci s externími službami. Tento typ operation units tedy pouze umožňuje přenos kontextové informace (parametrů) mimo naši webovou prezentaci.

Implicitní operace jsou nadefinovány přímo ve WebML a jedná se o klasické operace, potřebné pro plnohodnotnou manipulaci s daty. K dispozici máme následující operation units:

  • Vytvoření instance entity (create unit) – slouží pro vytvoření, vložení nové instance, záznamu příslušné entity do databáze.
  • Editace existující instance entity (modify unit) – jedná se o klasickou editaci instance, záznamu.
  • Smazání instance entity (delete unit) – slouží pro výmaz příslušné instance, záznamu.
  • Vytvoření vztahu mezi instancemi (connect unit) – slouží pro vytvoření nové instance vztahu mezi dvěma entitami. Jako konkrétní příklad mohu uvést přidání záznamu do vazební tabulky mezi dvě entity provázané vztahem M:N (například zboží se stává příslušenstvím pro jiné zboží v e-shopu).
  • Smazání vztahu mezi instancemi (disconnect unit) – opak connect unit.

Rozšíření navigačního modelu

Navigační model je rozšířen o notaci pro takzvané OK links a KO links. Každá operace provádí určitou akci, která může skončit úspěšně (OK link) nebo neúspěšně (KO link) a na základě tohoto výsledku může být aplikace přesměrována rozdílným způsobem. Například typický postup při zpracování webových formulářů je při úspěchu přesměrovat aplikaci na seznam vložených záznamů a při neúspěchu směrovat aplikaci zpět na vkládací formulář.

Základní pravidla pro modelování operací

Při definování operací musíme dodržovat několik důležitých pravidel:

  • Do operation unit může vstupovat jeden a více odkazů a alespoň jeden z nich nesmí být transportní. Důvod pro toto omezení je zřejmý. Operace musí být spuštěna nějakou akcí, tedy kliknutím na vybraný odkaz. Transportní odkaz ovšem slouží jen pro logické propojení jednotlivých units, proto musí do operation unit vstupovat alespoň jeden netransportní odkaz.
  • Z operation unit může vystupovat jeden, dva nebo žádný netransportní odkaz, tedy jeden nebo žádný OK link a jeden nebo žádný KO link.
  • Z operation unit může vystupovat libovolné množství transportních odkazů, které slouží pro logické propojení operace s dalšími operation nebo content units. To znamená, že výsledek operace může změnit naplnění nějaké content unit nebo může ovlivnit zpracování jiné operace, která je na tuto operaci navázána.
  • Operation units nejsou součástí žádné stránky a samozřejmě nemají žádné zobrazení. Jsou to jen abstraktní prvky webové prezentace.

Stručný popis jednotlivých typů operací

Následující odstavec se pokusí vysvětlit fungování těch operation units, které jsou implicitní součástí WebML a slouží pro manipulaci s daty z datového modelu.

Create unit

Slouží pro vytvoření nové instance příslušné entity. Potřebné informace pro tuto unit jsou následující:

  • Entita, jejíž instance se má vytvořit.
  • Hodnoty atributů příslušné instance. Obvykle přicházejí z entry unit.

Základní informací, kterou můžeme využít po úspěšném vykonání operace, je OID vytvořené instance.

Na obrázku č. 1 můžeme sledovat model pro vložení nové kategorie zboží. Create unit je propojena s vkládacím formulářem. Pokud vložení proběhne korektně, dostáváme se na seznam kategorií. Pokud vložení selže, vracíme se na původní formulář.

Create unit
Obrázek č. 1: Příklad použití create unit

Modify unit

Slouží pro modifikaci příslušné instance entity. Potřebné informace pro tuto unit jsou následující:

  • OID editované entity.
  • Hodnoty atributů příslušné instance. Obvykle přicházejí z entry unit, která je napojená na data unit pomocí transportního odkazu.

Informaci, kterou můžeme využít po úspěšném i neúspěšném vykonání operace, je opět OID editované instance.

Na obrázku č. 2 můžeme sledovat model pro editaci zboží. Modify unit je propojena s editačním formulářem, který získává data z databáze pomocí jedné data unit (zboží) a dvou multidata unit (číselník DPH a číselník kategorií zboží). Po neúspěšné akci se vracíme zpět na editační formulář. Po úspěšné akci jsme přesměrováni na seznam zboží.

Modify unit
Obrázek č. 2: Příklad použití modify unit

Delete unit

Slouží pro smazání jedné nebo více instancí příslušné entity. Potřebné informace pro tuto unit jsou následující:

  • OID mazaných instancí.

OK link této operace nepřenáší žádnou kontextovou informaci. KO link této operace přenáší OID neúspěšně smazané instance.

Na obrázku č. 3 můžeme sledovat model pro smazání zboží. Delete unit je provázána se seznamem zboží (index unit), ze které čerpá OID zboží, které má být smazáno. Po smazání zboží se vracíme na seznam zboží.

Delete unit
Obrázek č. 3: Příklad použití delete unit

Connect unit

Slouží k vytvoření instance vztahu mezi jednotlivými instancemi příslušných entit. Jednoduše řečeno, slouží k propojení dvou anebo více instancí mezi sebou. Funkci connect unit snad více osvětlí příklad (viz obrázek č. 4). Potřebné informace pro tuto unit jsou následující:

  • Zdrojová a cílová entita, jejichž instance budou propojeny.
  • Vztah mezi entitami, respektive role, podle které dojde k propojení instancí.
  • Selektor, který definuje, jaké instance zdrojové entity budou propojeny.
  • Selektor, který definuje, jaké instance cílové entity budou propojeny.

Connect unit propojí všechny dvojice instancí, které odpovídají oběma selektorům.

Na obrázku č. 4 můžeme vidět model pro přidávání příslušenství ke zboží. Příslušenstvím může být kterékoli jiné zboží, které má nastaven atribut prislusenstvi=true. Je použito vazby zbozi2zbozi. Connect unit tedy vytváří instanci této vazby.

Connect unit
Obrázek č. 4: Příklad použití connect unit

Disconnect unit

Slouží ke zrušení instance vztahu mezi instancemi příslušných entit. V podstatě tedy zruší vztah mezi vybranými objekty. Potřebné informace pro tuto unit jsou následující:

  • Zdrojová a cílová entita instancí, mezi nimiž bude rušen vztah.
  • Selektor, který určuje instance zdrojové entity.
  • Selektor, který určuje instance cílové entity.

Disconnect unit zruší vztah mezi všemi dvojicemi instancí, které odpovídají oběma selektorům.

Na obrázku č. 5 můžeme sledovat model pro odebrání příslušenství zboží. Jedná se o analogii příkladu z obrázku č. 4.

Disconnect unit
Obrázek č. 5: Příklad použití disconnect unit

Řetězy operací (Operation Chains)

Stejně tak, jako můžeme definovat jednu operaci, můžeme definovat více operací prováděných v sekvenci za sebou. Tento postup je pro WebML naprosto typický a používá se nejčastěji v případech, kdy vytváříme instanci nějaké entity, která má vztah s jinou entitou.

V našem ukázkovém e-shopu to může být vložení nového zboží do katalogu, kde musíme nejprve zboží vytvořit a poté svázat pomocí connect unit s příslušnou kategorií a sazbou DPH.

Řetěz operací
Obrázek č. 6: Příklad řetězu operací

Příklad modelu

Pro představu, jak může vypadat jednoduchý model administračního rozhraní pro webovou prezentaci, přikládám obrázek modelu editačního rozhraní, který představuje část administračního rozhraní jednoduchého elektronického obchodu, na kterém demonstruji možnosti WebML.

Na tomto obrázku je model, který umožňuje vkládat, mazat a editovat kategorie zboží a zboží v jednotlivých kategoriích. Všimněte si především, jakým způsobem se modelují formuláře, ve kterých se zpracovávají data z více než jedné entity. Například u editace a vkládání zboží do formuláře vstupují nejenom data z entity zboží ale také z entit dph a kategorie.

Závěr

Po přečtení tohoto článku jsme již schopni namodelovat kompletní webovou prezentaci včetně administrační obslužné části prezentace. Tím jsme dokončili popis všech modelů WebML, které dohromady tvoří komplexní model hypertextové aplikace.

V této fázi jsme se zabývali pouze modelem jako takovým, který není závislý na žádném implementačním prostředku. I když jsem pro tvorbu příkladů používal nástroj WebRatio, k vytvoření modelu podle metodiky WebML stačí pouze tužka a papír. Na základě těchto modelů můžete přejít do fáze implementace v jakémkoliv vývojovém prostředí a jazyce.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět