<p id='prepend'>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.</p>
<h3>RozÜφ°enφ WebML o manipulaci s daty</h3>
<p>Abychom mohli ve WebML modelovat aplikace, kterΘ umo₧≥ujφ manipulaci s daty, musφme ΦßsteΦn∞ rozÜφ°it navigaΦnφ model i model kompozice.</p>
<h4>RozÜφ°enφ kompoziΦnφho modelu</h4>
<p>Model kompozice je rozÜφ°en o novΘ units pojmenovanΘ <strong>operation units</strong>, 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∙:</p>
<div class='list'>
<ul>
<li>externφ operace, procedury</li>
<li>implicitnφ operace, slou₧φcφ pro manipulaci s daty vychßzejφcφ z datovΘho modelu WebML</li>
</ul>
</div>
<p><strong>Externφ operace</strong> 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.</p>
<p><strong>Implicitnφ operace</strong> 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:</p>
<div class='list'>
<ul>
<li><strong>Vytvo°enφ instance entity</strong> (create unit) û slou₧φ pro vytvo°enφ, vlo₧enφ novΘ instance, zßznamu p°φsluÜnΘ entity do databßze.</li>
<li><strong>Editace existujφcφ instance entity</strong> (modify unit) û jednß se o klasickou editaci instance, zßznamu.</li>
<li><strong>Smazßnφ instance entity</strong> (delete unit) û slou₧φ pro v²maz p°φsluÜnΘ instance, zßznamu.</li>
<li><strong>Vytvo°enφ vztahu mezi instancemi</strong> (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).</li>
<li><strong>Smazßnφ vztahu mezi instancemi</strong> (disconnect unit) û opak connect unit.</li>
</ul>
</div>
<h4>RozÜφ°enφ navigaΦnφho modelu</h4>
<p>NavigaΦnφ model je rozÜφ°en o notaci pro takzvanΘ <strong>OK links</strong> a <strong>KO links</strong>. 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ß°.</p>
<li>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.</li>
<li>Z operation unit m∙₧e vystupovat jeden, dva nebo ₧ßdn² netransportnφ odkaz, tedy jeden nebo ₧ßdn² OK link a jeden nebo ₧ßdn² KO link.</li>
<li>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.</li>
<li>Operation units nejsou souΦßstφ ₧ßdnΘ strßnky a samoz°ejm∞ nemajφ ₧ßdnΘ zobrazenφ. Jsou to jen abstraktnφ prvky webovΘ prezentace.</li>
</ul>
</div>
<h3>StruΦn² popis jednotliv²ch typ∙ operacφ</h3>
<p>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.</p>
<h4>Create unit</h4>
<p>Slou₧φ pro vytvo°enφ novΘ instance p°φsluÜnΘ entity. Pot°ebnΘ informace pro tuto unit jsou nßsledujφcφ:</p>
<div class='list'>
<ul>
<li>Entita, jejφ₧ instance se mß vytvo°it.</li>
<li>Hodnoty atribut∙ p°φsluÜnΘ instance. Obvykle p°ichßzejφ z entry unit.</li>
</ul>
</div>
<p>Zßkladnφ informacφ, kterou m∙₧eme vyu₧φt po ·sp∞ÜnΘm vykonßnφ operace, je OID vytvo°enΘ instance.</p>
<p>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ß°.</p>
<p>Slou₧φ pro modifikaci p°φsluÜnΘ instance entity. Pot°ebnΘ informace pro tuto unit jsou nßsledujφcφ:</p>
<div class='list'>
<ul>
<li>OID editovanΘ entity.</li>
<li>Hodnoty atribut∙ p°φsluÜnΘ instance. Obvykle p°ichßzejφ z entry unit, kterß je napojenß na data unit pomocφ transportnφho odkazu.</li>
</ul>
</div>
<p>Informaci, kterou m∙₧eme vyu₧φt po ·sp∞ÜnΘm i ne·sp∞ÜnΘm vykonßnφ operace, je op∞t OID editovanΘ instance.</p>
<p>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₧φ.</p>
<p>Slou₧φ pro smazßnφ jednΘ nebo vφce instancφ p°φsluÜnΘ entity. Pot°ebnΘ informace pro tuto unit jsou nßsledujφcφ:</p>
<div class='list'>
<ul>
<li>OID mazan²ch instancφ.</li>
</ul>
</div>
<p>OK link tΘto operace nep°enßÜφ ₧ßdnou kontextovou informaci. KO link tΘto operace p°enßÜφ OID ne·sp∞Ün∞ smazanΘ instance.</p>
<p>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₧φ.</p>
<p>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φ:</p>
<div class='list'>
<ul>
<li>Zdrojovß a cφlovß entita, jejich₧ instance budou propojeny.</li>
<li>Vztah mezi entitami, respektive role, podle kterΘ dojde k propojenφ instancφ.</li>
<li>Selektor, kter² definuje, jakΘ instance zdrojovΘ entity budou propojeny.</li>
<li>Selektor, kter² definuje, jakΘ instance cφlovΘ entity budou propojeny.</li>
</ul>
</div>
<p>Connect unit propojφ vÜechny dvojice instancφ, kterΘ odpovφdajφ ob∞ma selektor∙m.</p>
<p>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 <samp>prislusenstvi=true</samp>. Je pou₧ito vazby <samp>zbozi2zbozi</samp>. Connect unit tedy vytvß°φ instanci tΘto vazby.</p>
<p>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φ:</p>
<div class='list'>
<ul>
<li>Zdrojovß a cφlovß entita instancφ, mezi nimi₧ bude ruÜen vztah.</li>
<p>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.</p>
<p>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.</p>
<p>Pro p°edstavu, jak m∙₧e vypadat jednoduch² model administraΦnφho rozhranφ pro webovou prezentaci, p°iklßdßm <a href='podklady/zelenka/894/priklad.png' title='P°φklad modelu editaΦnφho rozhranφ'>obrßzek modelu editaΦnφho rozhranφ</a>, kter² p°edstavuje Φßst administraΦnφho rozhranφ jednoduchΘho elektronickΘho obchodu, na kterΘm demonstruji mo₧nosti WebML.</p>
<p>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.</p>
<h3>Zßv∞r</h3>
<p>Po p°eΦtenφ tohoto Φlßnku jsme ji₧ schopni namodelovat <strong>kompletnφ webovou prezentaci</strong> 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.</p>
<p>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.</p>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3411'>Metadata a hlaviΦka pro XHTML dokument</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3400'>╚esk² programovacφ jazyk Flex a modFlex</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3386'>╚eskß sprßva socißlnφho zabezpeΦenφ on-line</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3412'>WebML - operace a manipulace s daty</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=1444'>Statistika p°φstup∙ v PHP - kalendß°</a></li>
</ul>
</div>
</div>
<div class='page-right-box cauldron'>
<h3>Diskuznφ kotel</h3>
<div class='page-right-box-in'>
<ul>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3400' title='(32 komentß°∙)'>╚esk² programovacφ jazyk Flex a modFlex</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3411' title='(25 komentß°∙)'>Metadata a hlaviΦka pro XHTML dokument</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3412' title='(10 komentß°∙)'>WebML - operace a manipulace s daty</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3418' title='(5 komentß°∙)'>Sprßva barev - Color Management System (CMS)</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3415' title='(4 komentß°∙)'>Sprßvce soubor∙ pomocφ DataGridu v ASP.NET - upload soubor∙</a></li>