Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren Om eens wat ervaring op te doen met de Windows Azure Marketplace heb ik een publieke en gratis databron gekozen en hiermee een LightSwitch applicatie gebouwd. Omdat ik al enige ervaring met LightSwitch opgedaan had wist ik dat de OData koppeling die door LightSwich ondersteund wordt prima geschikt is om snel een applicatie in elkaar te klikken die Windows Azure Marketplace data consumeert. In dit voorbeeld maak ik gebruikt van Visual Studio 2012 Premium, LightSwitch 2.0 en data van de Rijksdienst voor het Wegverkeer (RDW). De RDW biedt deze data als test voor een periode van 1 jaar gratis aan als Proof of Concept.
Windows Azure Marketplace Met een Microsoft LiveID kun je jezelf registreren bij de Windows Azure Marketplace. Na de registratie kan data in de Windows Azure Marketplace, eventueel tegen betaling, gebruikt worden. Op het moment van schrijven worden 136 databronnen aangeboden. Het gebruik van de RDW data is gratis en kent als enige beperking dat er maximaal 50.000 transacties per maand toegestaan zijn. LightSwitch project Nadat Visual Studio 2012 gestart is kies ik voor een nieuw LightSwitch C# project.
Databron kiezen De eerste stap nadat een nieuw LightSwitch project is aangemaakt is het kiezen van een databron. Een LightSwitch applicatie is data-centric. Hierbij is er de keuze tussen het maken van een tabel of het koppelen aan een externe databron. Ik kies voor het laatste en kies vervolgens een OData service.
Klikken op Next geeft het scherm waar de OData Service gedefinieerd moet worden.
Hierbij wordt als endpoint de URL opgegeven die de RDW in de Windows Azure Marketplace gepubliceerd heeft. Bij het aanmaken van een account voor de Windows Azure Marketplace heb je een Klant-Id en een Primaire Accountsleutel ontvangen. Dit zijn respectievelijk je User name en Password van de OData Service. In dit geval volstaat een read-only verbinding omdat ik alleen data wil ophalen en inzien. Als het endpoint en de credentials correct ingevuld zijn worden vervolgens de entiteiten van de OData Service opgehaald en getoond.
In dit geval gebruikt de RDW 1 tabel met technische voertuiggegevens. Nu de brondata wizard doorlopen is bestaat er in het LightSwitch project één tabel. Het doel van deze applicatie is het opvragen van technische gegevens van een auto. Hierbij wil ik het kenteken als zoekveld gebruiken. Dit is geen out-of-the-box LightSwitch scenario waarbij typisch een scherm gebruikt wordt wat na openen een (complete) dataset ophaalt en toont. In dit geval wil ik initieel geen data ophalen en dit pas doen nadat de gebruiker een kenteken ingevoerd heeft. Om dit te bereiken definieer ik eerst een query dit aan deze wensen voldoet. Door rechts te klikken op te tabel en dan New Query te kiezen kan een nieuwe query gemaakt worden.
Hierbij specificeren we dat het veld Kenteken van de KENT_VRTG_O_DAT tabel overeen moet komen met een parameter die we ook Kenteken noemen. Omdat LightSwitch verschillende kleuren gebruikt voor databronvelden en parameters blijft het overzichtelijk…;-) Het scherm Vervolgens maken we een scherm aan dat we baseren op deze query en de tabeldata. Ik gebruik een List and Details Screen als basis voor dit scherm.
Klikken op OK maakt het scherm aan. Dit scherm toont default een tabel met entries uit de databron en wanneer één specifieke entry gekozen wordt de details van die entry in datavelden onder de tabel. In dit geval is dat ongewenst omdat ik de gegevens van precies één kenteken wil opvragen. Daarom verwijder ik de lijst van het scherm maar behoud ik het details gedeelte. Ook wil ik niet dat de applicatie bij het openen van dit scherm de OData Service van de RDW raadpleegt om gegevens van voertuigen op te halen. Om dit te voorkomen moeten een aantal properties van de query aangepast worden:
Zo moet: • Auto Execute Query uitgevinkt worden om te voorkomen dat er data opgevraagd wordt bij het openen van het scherm. • Support paging en Support sorting uitgezet worden omdat we toch maar één result per keer krijgen. • Support search uitgezet worden omdat ik alleen op kenteken wil zoeken en niet op andere voertuigkenmerken. Omdat ik eerder een query aangewezen heb als databron voor het scherm heeft LightSwitch een invuldveld (Kenteken) aangemaakt op het scherm (1):
Alleen een invulveld voor de Kenteken parameter volstaat niet. Er is ook een knop nodig om de query daadwerkelijk uit te voeren en de RDW voertuiggegevens op te vragen. Daarom voeg ik een Zoeken knop toe achter het invulveld (2). Door op het Kenteken veld rechts te klikken en dan Add Button te kiezen kan de methode bij het klikken op de knop gedefinieerd worden:
Om deze knop een actie uit te laten voeren moet de enige regel code van dit voorbeeld geschreven worden. Rechts klikken op de Zoeken knop en dan de Edit Execute Code optie kiezen opent een C# bestand: public partial class KentekenQueryListDetail { partial void Execute_Search_Execute() { // Write your code here. this.KentekenQuery.Load(); } }
Bovenstaande code voert de query uit. Hierbij wordt het ingevoerde kenteken in de edit box als parameter meegegeven. Het resultaat zijn alle technische gegevens van het voertuig met het opgegeven kenteken. Klaar En daarmee is de applicatie klaar. Met F5 wordt de applicatie gebouwd en start de debugger. Het scherm verschijnt. Na een kenteken (zonder streepjes) ingevuld te hebben en een druk op de Zoek knop worden de gegevens bij de RDW opgevraagd en in het scherm getoond.
Volgende keer Na wat spelen blijven er nog voldoende transacties over voor een vervolg.
De applicatie is nu klaar en draait lokaal op mijn computer. In mijn volgende post ga ik deze applicatie in Windows Azure deployen en wel in een Windows Azure Web Site.