Meeskond "GAP"
Liikmed
- Priit Siimo - projektijuht, kliendirakendus
- Peeter Paan - veebiteenus
- Andrus Reedla - veebiteenus, andmemudel
Planeering
- Arenduskeskond - Visual Studio 2010
- Kliendirakendus valmib Asp.net projektina
- Veebiteenus - WCF
- Andmebaasina kasutame SQL2008
- Andmemudeli koostamiseks kasutasime QSEE Superlite-i
- Meeskonna suhtlus vahendiks on Skype ning versioonihaldustarkvara TortoiseSVN ning MyVersionControl
Teenus
Tegemist on universaalse tarkvaraga hulgifirmadele. Näidiseks on võetud arvutikaupade hulgimüügiga tegelev firma, kellel on tosin edasimüüjat. Hulgifirmale valmistatakse tarkvara, mis võimaldab temal omakorda oma klientidele (arvutikaupade edasimüüjatele) pakkuda tootevaliku teenust.
St, et hulgifirma klient, ei pea hakkama ise oma veebilehele sisestama pakutavaid tooteid, vaid kasutab selleks hulgifirma poolt pakutavat teenust. Läbi teenuse on võimalik pärida kõik tellitavad tooted, koos piltide, kirjelduse, hindade ja muu vajalikuga.
Võit mõlemale poolele:
1. Edasimüüjad ei pea enam tegelema andmete uuendamisega ja nende kliendid saavad tellida alati kõige uuemaid tooteid.
2. Hulgimüüjal tekib suur konkurentsieelis võrreldes teiste pakkujatega.
Veebiteenused
Kasutajatega seotud meetodid:
- String GetData()
- ICollection<Product> GetProducts(int cat_id) - meetod tagastab listi vastava kategooria toodetega. Sisendparameetriks kategooria id.
- Product GetProduct(int id) - meetod tagastab toote info. Sisendparameetriks toote id.
- ICollection<Category> GetCategories() - meetod tagastab tootegruppide listi.
- ICollection<Comment> GetProductComments(int prod_id) - meetod tagastab tootele lisatud kommentaarid. Sisendparameetriks toote id.
- void SetProductComment(Comment c) - meetod lisab tootele kommentaari.
Administreerimisega seotd meetodid:
- void InsertProduct(Product p) - meetod lisab andmebaasi uue toote. Parameetriks lisatav toode.
- void UpdateProduct(Product p) - meetod uuendab andmebaasis toote infot. Parameetriks vaadeldav toode.
- void DeleteProduct(int prod_id) - meetod kustutab andmebaasist toote. Sisendparameetriks toote id.
- void InsertProductGroup(Category cat) - meetod lisab andmebaasi uue tootegrupi. Parameetriks lisatav tootegrupp.
- void DeleteProductGroup(int cat_id) - meetod kustutab tootegrupi andmebaasist. Sisendparameetriks tootegrupi id.
- int GetStatistic() - meetod tagastab üldise meetodite kasutamise statistika.
- Object GetStatistic(string name, string method) - meetod tagastab kliendi meetodite kasutamise statistika.
Kood
Veebiteenus [1]
Kliendirakendus [2]
Teenuse API [3]
Andmemudel
XML
<?xml version="1.0" encoding="utf-8"?>
<TeenusedKaubad>
<TeenusKaup>
<Nimetused>
<Nimetus keel =""></Nimetus>
</Nimetused>
<Kood></Kood>
<Kirjeldused>
<Kirjeldus>
<Keel></Keel>
<Tekst></Tekst>
</Kirjeldus>
</Kirjeldused>
<Hinnad>
<Hind>
<HinnaGrupp></HinnaGrupp>
<Valuuta></Valuuta>
<Vaartus></Vaartus>
</Hind>
</Hinnad>
<Kogus></Kogus>
<Grupid>
<Grupp></Grupp>
</Grupid>
<Parameetrid>
<Parameeter>
<Nimetus></Nimetus>
<Vaartus></Vaartus>
<Yhik></Yhik>
</Parameeter>
</Parameetrid>
<Pildid>
<Pilt>
<Nimi></Nimi>
<Aadress></Aadress>
</Pilt>
</Pildid>
<Kommentaarid>
<Kommentaar>
<Autor></Autor>
<Pealkiri></Pealkiri>
<Tekst></Tekst>
<Hinnang></Hinnang>
<Aeg>
<Aasta></Aasta>
<Kuu></Kuu>
<KuuPaev></KuuPaev>
<Tund></Tund>
<Minut></Minut>
</Aeg>
</Kommentaar>
</Kommentaarid>
</TeenusKaup>
</TeenusedKaubad>
XML Schema
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="TeenusedKaubad">
<xs:complexType>
<xs:sequence>
<xs:element name="TeenusKaup">
<xs:complexType>
<xs:sequence>
<xs:element name="Nimetused">
<xs:complexType>
<xs:sequence>
<xs:element name="Nimetus">
<xs:complexType>
<xs:attribute name="keel" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Kood" />
<xs:element name="Kirjeldused">
<xs:complexType>
<xs:sequence>
<xs:element name="Kirjeldus">
<xs:complexType>
<xs:sequence>
<xs:element name="Keel" />
<xs:element name="Tekst" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Hinnad">
<xs:complexType>
<xs:sequence>
<xs:element name="Hind">
<xs:complexType>
<xs:sequence>
<xs:element name="HinnaGrupp" />
<xs:element name="Valuuta" />
<xs:element name="Vaartus" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Kogus" />
<xs:element name="Grupid">
<xs:complexType>
<xs:sequence>
<xs:element name="Grupp" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Parameetrid">
<xs:complexType>
<xs:sequence>
<xs:element name="Parameeter">
<xs:complexType>
<xs:sequence>
<xs:element name="Nimetus" />
<xs:element name="Vaartus" />
<xs:element name="Yhik" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Pildid">
<xs:complexType>
<xs:sequence>
<xs:element name="Pilt">
<xs:complexType>
<xs:sequence>
<xs:element name="Nimi" />
<xs:element name="Aadress" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Kommentaarid">
<xs:complexType>
<xs:sequence>
<xs:element name="Kommentaar">
<xs:complexType>
<xs:sequence>
<xs:element name="Autor" />
<xs:element name="Pealkiri" />
<xs:element name="Tekst" />
<xs:element name="Hinnang" />
<xs:element name="Aeg">
<xs:complexType>
<xs:sequence>
<xs:element name="Aasta" />
<xs:element name="Kuu" />
<xs:element name="KuuPaev" />
<xs:element name="Tund" />
<xs:element name="Minut" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<head>
<style>
table{
font-family:"Verdana";
font-size:12;
border-width: 1px;
border-spacing: 0px;
border-style: outset;
border-color: green;
border-collapse: collapse;
}
th{
border-width: 2px;
padding: 4px;
border-style: hidden;
border-color: green;
background-color: #daa520;
-moz-border-radius: 4px 5px 4px 5px;
}
td{
border-width: 1px;
padding: 4px;
border-style: solid;
border-color: #f5f000;
background-color: #f5f5dc;
-moz-border-radius: 3px 3px 3px 3px;
}
.subTable{
border-width: 0px;
}
.nimetus {
font-weight: bold;
}
</style>
</head>
<h2>Kaubad poes</h2>
<table>
<tr>
<th>Tootegrupp</th>
<th>Toode</th>
<th>Toote kood</th>
<th>Kirjeldus</th>
<th>Hind</th>
<th>Kogus</th>
<th>Parameetrid</th>
<th>Kommentaarid</th>
</tr>
<xsl:for-each select="TeenusedKaubad/TeenusKaup">
<tr>
<td>
<xsl:for-each select="Grupid/Grupp">
/<xsl:value-of select="Nimetus
"/>
</xsl:for-each>
</td>
<td class="nimetus">
<xsl:for-each select="Nimetused">
<xsl:value-of select="Nimetus"/>
</xsl:for-each>
</td>
<td>
<xsl:value-of select="Kood"/>
</td>
<td>
<xsl:for-each select="Kirjeldused/Kirjeldus">
<table class ="subTable">
<tr>
<dt>
<xsl:value-of select="Tekst"/>
<!--(<xsl:value-of select="Keel"/>)-->
</dt>
</tr>
</table>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="Hinnad/Hind">
<table class ="subTable">
<tr>
<dt>
*<xsl:value-of select="HinnaGrupp"/>
<xsl:value-of select="Vaartus"/>
(<xsl:value-of select="Valuuta"/>)
</dt>
</tr>
</table>
</xsl:for-each>
</td>
<td align="center">
<xsl:value-of select="Kogus"/>
</td>
<td>
<xsl:for-each select="Parameetrid/Parameeter">
<table class ="subTable">
<tr>
<dt>
<xsl:value-of select="Nimetus"/>:
<xsl:value-of select="Vaartus"/>
<xsl:value-of select="Yhik"/>
</dt>
</tr>
</table>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="Kommentaarid/Kommentaar">
<table class ="subTable">
<tr>
<dt>
<xsl:value-of select="Pealkiri"/><br />
<xsl:value-of select="Tekst"/><br />
<xsl:value-of select="Autor"/>:
<xsl:value-of select="Aeg/Tund"/>:
<xsl:value-of select="Aeg/Minut"/>
<xsl:value-of select="Aeg/KuuPaev"/>/
<xsl:value-of select="Aeg/Kuu"/>/
<xsl:value-of select="Aeg/Aasta"/>
</dt>
</tr>
</table>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Esmases veebiteenuse versioonis kasutatav andmemudel
Klientrakendus
Teenuse API
Aruanne
Projekti käigus sai tehtud XML fail, veebiteenus ja klientrakendus. Alguses pidime tegema andmemudeli ja siis vastavalt sellele ka andmekihi, peale seda saime hakata tegelema veebiteenuse loomisega. Veebiteenuse tegemisel oli raske aru saada, mida teha on vaja. Mitu veebiteenuse versiooni tulid täisti valesti välja, lõpuks aga saime asjale õnneks pihta ja suutsime teha tõelise veebiteenuse, millel on ka eesmärk. Rakenduse loomisel kasutasime palju uusi tehnoloogiaid, milles ennem aimugi polnud, paljusi asju sai teha kõvasti lihtsamalt tänu nendele. Ise oleme tulemustega rahul, natuke kiireks küll läks aga kõik funktsionaalsus, mida me soovisime, sai valmis. Eriti hea on see, et veebiteenus tuli meil väga praktiline, seda saaks kohe hakata kasutama ja tänu sellele on võimalik saavutada konkurentsieelis.
Selgeks sai
- XMl failidega manageerimine
- Andmekihi ehitamine
- Natuke LINQut
- mõningad VS2010 võimalused töö hõlbustamiseks
- Veebiteenuste ehitamine ja nende debugimine
- Veebiteenuste kasutamine
- Rakenduste ehitamine veebiteenuse baasil
- Paljud uued tehnoloogiad