WebML - operace a manipulace s daty
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ß°.
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₧φ.
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₧φ.
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.
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.
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.
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.