LightSwitch i OData

Najveća novost o novoizašloj beta verziji LightSwitch-a (LightSwitch u Visual Studio 11 Beta) je definitivno podrška za OData. Razvojni tim za LightSwitch je zamijenio cjelokupan rad sa bazom umjesto dosadašnjeg WCF servisa u OData. LightSwitch može da radi dvojako sa OData:

  1. Konzumiranje OData podataka putem povezivanja na OData izvore podataka
  2. Izlaganje podataka iz LightSwitch aplikacije u OData obliku

Prikazaću oba scenarija na konkretnim primjerima.

LightSwitch, uveđenjem podrške za OData, više nije samo alat kojim možete kreirati aplikacije. To je za sada i alat za najjednostavniji način za izlaganja podataka i kontrole pristupa tim podacima putem OData. U tom slučaju, izlaganjem podataka putem OData feed-ova, putem sistema autentifikacije ili korišćenjem filtera u okviru LightSwitch možete kontrolisati pristup ovim podacima.

OData protokol

Open Data Protocol (OData) je Web protokol za upite nad podacima i izmjenu podataka. Protokol omogućava korisnicima upite nad podacima putem HTTP protokola i dobijanje rezultata u obliku Atom, JSON ili XML. Detalje o OData protokolu možete pronaći na sajtu odata.org.

Generalno, postoje dva različita tipa korisnika OData podataka:

  1. Generatori podataka (producers)
  2. Korisnici podataka (consumers)

Primjeri tehnologija koji rade sa OData protokolom:

  • Sharepoint izlaže svoje podatke (liste) putem OData servisa
  • SQL Server Reporting Services izlaže podatke kao OData servisi
  • PoverPivot (dodatak za Excel) ima mogućnost povezivanja na OData servise za kompleksnu analizu podataka
  • Razni servisi na netu koji nude određene podatke (Azure DataMarket na kojem generatori podataka nude razne informacije)

Povezivanje na OData Servis-konzumiranje OData podataka

Kao primjer izvora podataka koji izlaže svoje podatke putem OData servisa je primjer testne baze Northwind u read-only modu. Link za pristup podacima je http://services.odata.org/Northwind/Northwind.svc/

Povezivanje na izvor podataka bi tekao sledećim redoslijedom:

1. Izbor Odata Service kao izvor podataka:

ChooseDataSource

2. Unos podataka za konekciju sa servisom pri čemu je moguće odraditi test konekcije za dati servis:

EnterConnectionInfo

3. Testiranje konekcije izborom određenog entiteta koji je izložen putem OData servisa (ukoliko je konekcija uspješna, dobija se podatak o uspješnosti ostvarene konekcije):

ChooseEntityForTest

4.  Izbor entiteta za uvoz:

WhichEnitiesToImport

5. Uvozom podataka putem OData servisa kreiran je izvor podataka u okviru LS aplikacije:

NWDataSource

6. Kada imamo podatke, potrebni su nam ekrani za manipulaciju sa podacima. Prvi ekran (SearchCustomers) služi za pretragu svih klijenata (entitet Customers):

SearchScreen

7. Izborom klijenta preko prve kolone (Customer ID) prikazuju se detalji za klijenta (CustomerDetail) pri čemu su prikazane sve narudžbe iz eniteta Orders:

DetailScreen

Napomena: prilikom uvoza podataka iz OData servisa moguće je da nastane problem zbog veza koje se nalaze u izvoru podataka. Naime, LightSwitch ne podržava Many-to-Many relacije između eniteta te stoga ove veze ne mogu biti uvezene u LightSwitch aplikaciju.

Izlaganje podataka iz LightSwitch kao Odata servis

LightSwitch omogućava izlaganje  podataka (exposing data) putem OData feed-ova iz publish-ovane LightSwitch aplikacije (izlaganje se vrši iz srednjeg sloja LightSwitch aplikacije-middle tier). Bitno je napomenuti da ovo važi isključivo za Web aplikacije. Ovako priprepljeni podaci mogu biti korišćeni od strane aplikacije koja podržava standardni OData protokol. LightSwitch može da izlaže podatke kako iz lokalne baze (intrinsic database) tako i iz bilo koje druge baze koja je poslužila kao spoljni izvor podataka (attached database). Na ovaj način su mogući scenariji kao što su pregled podataka iz LightSwitch aplikacije na mobilnim uređajima ili na primjer u okviru Excel PivotTable izvještaja.

Da bi omogućili izlaganje podataka nije potrebno ništa posebno da uradimo da bi kreirali servis. LightSwitch automatski omogućava servise za izlaganje podataka putem OData protokola za sve kreirane izvore podataka u okviru aplikacije. Svaki izvor podataka postaje izvor Odata podataka (data service endpoint) pri čemu će automatski biti izloženi svi entiteti u okviru definisanog izvora podataka.

Takođe, sva poslovna logika kreirana nad entitetima će biti uzeta u obzir prilikom korišćenja OData servisa od strane klijenata koji pristupaju izloženom OData servisu.

Ukoliko kao primjer imamo aplikaciju sa dva izvora podataka:

  1. Lokalnu bazu (instinsic database-SQL Server Express) sa nazivom ApplicationData
  2. Spoljni izvor podataka (SQL Server 2008 R2 Express) sa nazivom TrainingCoursesData

pri čemu je podešeno da je aplikacija tipa Web, LightSwitch automatski izlaže oba izvora podataka sa sledećim nazivima:

DataSourceProducer

Dakle, naziv servisa odgovara nazivu izvora podatka u okviru LightSwitch aplikacije. Da bi mogli koristiti ova dva servisa i iz Debug moda (F5), pokrenućemo aplikaciju u Browser modu (Web):

OdataLinkFromProducer

preuzeti link aplikacije uključujući broj porta koji je zadužen za lokalnu instancu IIS (LightSwitch Server), otvoriti novi tab i dodati naziv izvora podataka TrainingCoursesData sa ekstenzijom svc. Kao rezultat dobijamo servis za spoljni izvor podataka sa svim definisanim entitetima:

ODataService

Kako možemo koristiti ove podatke?

Možemo kreirati novu LightSwitch aplikaciju te se vezati za TrainingCoursesData.svc (pod uslovom da je pokrenuta aplikacija ODataProducer u Web modu) tako što ćemo odabrati OData izvor podataka unoseći link:

http://localhost:56712/TrainingCoursesData.svc/

ConnectToODataProducer1

te odabrati sve entitete:

ConnectToODataProducer2

Kao rezultat, u drugoj LightSwitch aplikaciji ODataConsumer smo kao izvor podataka koristili OData servis:

ODataSource

Nad ovim podacima možemo izgraditi totalno novu aplikaciju, kao što bi to radili nad bilo kojim drugim izvorom podataka. Na ovaj način smo putem OData protokola podatke iz spoljnjeg izvora podataka izložili preko jedne LightSwitch aplikacije (ODataProducer) i koristili ove podatke putem druge LightSwitch apliakcije (ODataConsumer).

Drugi način korišćenja OData servisa je da možemo koristiti set upita nad OData servisom  ukoliko pravimo svoj klijent za pristup OData podacima. Kako je OData protokol REST-ful protokol baziran na AtomPub moguće je koristiti brojne upite nad podacima koristeći određena URI pravila kao što su:

1. http://localhost:57741/TrainingCoursesData.svc/Customers (pregled svih entiteta Customers)
2. http://localhost:57741/TrainingCoursesData.svc/Customers(3) (pregled samo entiteta Customers za primarnim ključem (kolona id) sa vrijednošću 3)
3. http://localhost:57741/TrainingCoursesData.svc/Customers(4)/Orders (pregled svih narudžbi za kurseve iz entiteta Orders za klijenta sa šifrom 4)

Rezultat URI upita:

UriQuery

Iz primjera 3 se vidi da upiti podržavaju i veze između entiteta. Do podataka dolazimo korišćenjem HTTP-GET zahtjeva pri čemu servis vraća feed sa svim rezultatima upita. Da bi bili u mogućnosti da vidimo rezultat upita tako što vršimo prozivanje OData servisa, potrebno je da u Internet Exploreru isključimo opciju Turn on feed reading view (Tools/Options/Content/Settings(Feed and Web Slices)).

Napomena: URI upiti su Case sensitive

Obratite pažnju da se prilikom svakog novog pokretanja Web aplikacije u Debug modu od strane LightSwitch Servera generiše novi port. Ako koristimo URI upite, onda je potrebno samo promijeniti port u upitu, a ako koristimo OData servis u okviru LightSwitch aplikacije kao spoljni izvor, potrebno je da odradimo update izvora podataka (opcija Update Datasource u okviru klijentskog projekta) kako bi se uzeo u obzir LocalHost Url.

Zaključak

Podrška za OData protokol u okviru LightSwitch-a daje potencijalno velike mogućnosti kako prilikom povezivanja podataka na OData izvore, ali isto tako i prilikom kreiranja servisa kojim se izlažu podaci iz LightSwitch aplikacije putem ODada servisa.

About Spaso Lazarevic

Spaso Lazarevic is Senior Software Developer working with Microsoft technologies. Leader of .NET User Group Bijeljina, speaker at Microsoft events, writter and blogger. Microsoft MVP for Visual C#.
This entry was posted in Programming and tagged , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s