SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT...

56
Nummer 109 mei 2011 SDN Magazine verschijnt elk kwartaal en is een uitgave van Software Development Network www.sdn.nl IN DIT NUMMER O.A.: Betere code met C# code contracts < What's new in Rational Asset Analyzer Version 6.0 < Cloning ClientDataSet Cursors < Web Templates bouwen met Visual Studio < Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486

Transcript of SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT...

Page 1: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

Nummer 109 mei 2011 SDN Magazine verschijnt elk kwartaal en is een uitgave van Software Development Network

www.sdn.nl

IN DIT NUMMER O.A.:

Betere code met C# code contracts <

What's new in Rational Asset Analyzer Version 6.0 <

Cloning ClientDataSet Cursors <

Web Templates bouwen met Visual Studio <

Visual Studio LightSwitch: een intro voor ontwikkelaars <

SOFTWARE DEVELOPMENT NETWORK

MAGAZINE

109

ISSN: 2211-6486

Page 3: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

MAGAZINE

magazine voor software development 3

ColofonUitgave:Software Development NetworkNegentiende jaargangNo. 109 • mei 2011

Bestuur van SDN:Remi Caron, voorzitterRob Suurland, penningmeesterMarcel Meijer, secretaris

Redactie:Remi Caron en Marcel Meijer([email protected])

Aan dit magazine werd meegewerkt door:Aan dit magazine werd meegewerkt door:Roel Hans Bethlehem, Christiaan Heidema,Bob Swart, Stefan Kamphuis, Peter Donker,Maarten van Stam, Alexander Meijers, RemiCaron, Marcel Meijer en natuurlijk alle auteurs!

Listings:Zie de website www.sdn.nl voor eventuelesource files uit deze uitgave.

Contact:Software Development NetworkPostbus 506, 7100 AM WinterswijkTel. (085) 21 01 310Fax (085) 21 01 311E-mail: [email protected]

Vormgeving en opmaak:Reclamebureau Bij Dageraad, Winterswijkwww.bijdageraad.nl

©2011 Alle rechten voorbehouden. Niets uitdeze uitgave mag worden overgenomen opwelke wijze dan ook zonder voorafgaandeschriftelijke toestemming van SDN. Tenzijanders vermeld zijn artikelen op persoonlijketitel geschreven en verwoorden zij dus nietnoodzakelijkerwijs de mening van het be-stuur en/of de redactie. Alle in dit magazinegenoemde handelsmerken zijn het eigen-dom van hun respectievelijke eigenaren.

AdverteerdersBergler 2Xcess 10CSC 15Microsoft 26-27Barnsten Embarcadero 31Sogeti 34Achmea 454DotNet 53Macaw 56

Adverteren?Informatie over adverteren en de adverten-tietarieven kunt u vinden op www.sdn.nlonder de rubriek Magazine.

voorwoordBeste lezer,

Het voorjaar is goed begonnen. Tijdens de MIX 2011 conference in Las Vegas van

april zijn weer geweldige aankondigingen gedaan en nieuwe ontwikkelingen gemeld.

Een deel van deze nieuwe ontwikkelingen zijn inmiddels ook aanbod geweest tijdens

de DevDays 2011 (powered by TechDays) en ze zullen uiteraard ook aan bod komen

bij onze SDN events en in ons magazine. En het is nog eens geweldig weer geweest.

Wat wil een mens nog meer? Als dit niet een voorbode is van een lange hete zomer

en zwoel najaar, dan weet ik het niet meer. Voor ons Developers/User Experience

specialisten/Database goeroe’s/Architecten zijn er weer veel voldoende nieuwe

uitdagingen en nieuwe ontwikkelingen.

Ook dit magazine staat weer bol van de artikelen met uiteenlopende onderwerpen.

Zo is er een artikel over Code Contracts en begint Hassan een tweedelig artikel over

Lab Management. Maar ook de Information workers en met name de SharePoint

ontwikkelaars komen weer aan hun trekken met een artikel over de integratie tussen

SAP en SharePoint en hoe je Web templates voor SharePoint 2010 met Visual Stu-

dio . Naast de column Sander Hoogendoorn over Functional testing in Agile projects

en de vaste bijdrage van Michiel van Otegem over Windows Server AppFabric icm

Windows Communication Foundation en Windows Work Flow, is er ook een artikel

over BizTalk en AppFabric integratie mogelijkheden van Steef Jan Wiggers. Voor de

Delphi lezers uiteraard weer een artikel van Cary Jensen, dit keer over Cloning Client-

DataSet Cursors. Deze keer twee artikelen van het Core Systems front over de

nieuwigheden in Rational Asset Analyzer en C-functies in Cobol. Ernst Peter

Tamminga heeft voor de DotNetNuke gemeenschap een artikel geschreven over hoe

goed gebruik te maken van de DotNetNuke API. Als hekkesluiter hebben we een

mooi artikel over Visual Studio Lightswitch van Stefan Kamphuis. Als Lightswitch

insider weet hij alle ins en outs van het product, dus daar komt een vervolg op.

Verder hebben we allerlei korte en handig tips / weetjes / impressies en een kortes-

tand van zaken rond het Windows Phone 7 platform. Kortom weer genoeg te lezen.

Vanaf het volgende magazine zal de indeling van het magazine lichtelijk veranderen.

We zullen de artikelen dan groeperen volgens de aandachtsgebieden van de SDN:

Cloud, Mobile computing, Desktop en Web development. Voor deze aandachts –

gebieden is de redactie steeds op zoek naar korte artikelen, tips en verslagen. Dus

mocht je een leuk onderwerp weten of willen schrijven over iets, neem dan contact

op met [email protected].

Veel leesplezier en alvast een fijne zomer!

Marcel Meijer •

Page 4: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

MAGAZINE

Inhoud03 VoorwoordMarcel Meijer

04 Inhoudsopgave

04 Agenda

05 Betere code met C# code contracts Mark Blomsma

11 Leerwerktrajecten Software Ontwikkelaar en Test Engineer voor mensen met een Autisme Spectrum Stoornis

Frans Boumans

12 What's new in Rational Asset Analyzer Version 6.0

John Casey

16 Visual Studio Application Life Cycle ManagementLab Management concept Part (1/2)

Hassan Fadili

18 Cloning ClientDataSet CursorsCary Jensen

22 Succesvol ontsluiten van informatie en processen uit SAP in SharePoint

William van Strien & Marcel Kempers

25 Functional testing in agile projectsSander Hoogendoorn

28 Web Templates bouwen met Visual StudioPaul Pascha

32 Windows Server AppFabric + WCF + WF4 = BizTalk voor de armen

Michiel van Otegem

35 Drag and Drop deel 3: Bestanden slepen vanuit de Windows Explorer

Eric Roosendaal

36 How do I do that in the DotNetNuke API?

Ernst Peter Tamminga

39 BizTalk AppFabric Connect Uitbreiding integratie mogelijkheden

Steef Jan Wiggers

46 C-functies in COBOLChristiaan Heidema

50 Datums en tijden afbeeldenEric Roosendaal

51 Visual Studio LightSwitch: een intro voor ontwikkelaars

Stefan Kamphuis

SDN Event juni 2011 . . . . . . . . . . .17 juni

SharePoint Conference 2011 . .3 oktober

Developer Conference

Annaheim ‘11 . . . . . . . . . . .13 september

SDN Event December 2011 .9 december

Agenda 2011

Page 5: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET Mark Blomsma

magazine voor software development 5

Betere code met C# code contractsAls software ontwikkelaars, ofwel code kloppers, hebben we een creatief beroep. Ieder pro-bleem kan op meerdere manieren opgelost worden en elke ontwikkelaar brengt zijn eigen inzichten ervaringen in om tot een optimale implementatie te komen. Ervaring is goed. Maar ervaringis soms ook slecht. Ervaring kan leiden tot routine gedrag en tot onvoldoende nadenken overde code die je net hebt geschreven.

Het compileert, het werkt, je bent klaar. Je denkt lang niet altijd goedgenoeg na over de aannames die je doet bij het schrijven van eenfunctie. Werkt het meestal, maar soms niet? Bevatten de parameterswel de informatie die je verwacht? Soms moet er met een verse bliknaar de code gekeken worden om problemen te voorkomen in plaatsvan op te lossen. Een code review kan helpen met het voorkomen vanruntime errors, maar zou het niet mooi zijn als we onze code explici-ter kunnen maken in wat wordt verwacht, wat we aannemen en watwe beloven? Microsoft Code Contracts biedt een hulpmiddel voor hetmeer voorspelbaar maken van je code. Bovendien zul je merken dathet gebruik maken van dit hulpmiddel helpt met het werpen van eenverse blik op je code.

Wat is Microsoft Code Contracts?Microsoft Code Contract is een add-on die je kunt installeren in VisualStudio (het werkt overigens ook via de command line). Deze add-onbiedt vervolgens een taalagnostische manier om aannames in je codete formaliseren in een contract. Een contract kan betrekking hebbenop precondities, postcondities en “object invariants”. Een contract

werkt als documentatie voor je interne en externe API’s. Elke keer datje je code compileert wordt vervolgens gecontroleerd of je een contract naleeft, of breekt.

Installatie & configuratieNa installatie van code krijg je een extra configuratie tabblad in je projecten, zie figuur 1. De meeste opties spreken voor zich. Je kuntzowel runtime als static checking aanzetten. Hierover later meer.

Hoe zien contracts eruit? Precondities onder de loep.Voordat we in details gaan zullen we even kijken naar hoe een eenvoudig contract met alleen precondities eruit ziet. Neem bijvoor-beeld de volgende functie:

public double Delen (int getal, int deler)

{

return getal / deler;

}

Deze code is functioneel correct, maar we doen de aanname dat de‘deler’ parameter ongelijk is aan nul. Immers, delen door nul leidt toteen (onverwachte) DivideByZeroExpection. De volgende code is al eenhele verbetering, want nu krijgen we in ieder geval een betere foutmelding:

public double Delen( int getal, int deler )

{

if ( deler == 0 )

throw new ArgumentOutOfRangeException(

"deler",

"Deler mag niet nul zijn."

);

return getal / deler;

}

Het gooien van een exceptie gebeurt echter runtime terwijl we graag

Microsoft Code Contracts biedt eenhulpmiddel voor het meer voorspelbaarmaken van je code

Door defensieve code toe te voegenlijkt het al een beetje op een contract

Fig.1: Configuratie opties voor Code Contracts

Page 6: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

MAGAZINE

6

meer informatie willen hebben tijdens het compileren van de code. Ditis waar code contracts een oplossing bieden.

public double Delen( int getal, int deler )

{

Contract.Requires( deler != 0 );

return getal / deler;

}

Bovenstaande code definieert dat deler nooit nul mag zijn. Als delerwel nul is, dan is er een fout in de aanroepende code. Als we de functie nu toch aanroepen met de waarde nul voor deler, dan volgteen ContractException (het exacte type is System.Diagnostics.Con-tracts.__ContractsRuntime+ContractException). Wel informatief, maarniet erg fraai. Gelukkig is er een overload beschikbaar.

public double Delen( int getal, int deler )

{

Contract.Requires<ArgumentOutOfRangeException>(

deler != 0,

"Deler mag niet nul zijn."

);

return getal / deler;

}

We hebben nu een contract gedefinieerd waarbij we runtime hetzelfdegedrag hebben alsof we een ArgumentOutOfRangeException gooien,maar die het voordeel biedt dat we nu ook een compile time controle(static checking) kunnen uitvoeren.

Runtime checkingDe code die we hebben toegevoegd kunnen we gebruiken tijdens hetuitvoeren van ons programma controles uit te voeren. Doorsnee lijktme dit wenselijk, maar in sommige, performance kritische toepassin-gen is dit wellicht onwenselijk en kunnen we leven met de aannamedat de parameters voldoen aan het contract. Als alternatief kun je ervoor kiezen om tijdens het testen van je applicatie de runtime checkingaan te zetten, maar bij oplevering naar productie een build te makenwaarbij de runtime controle uitstaat.

Static checkingHet controleren van je code tijdens het compileren van je applicatie iswaar zaken interessant worden.

In figuur 1 kun je zien dat ik de optie “Show squigglies” aan heb staan.Dit betekent dat de Code Contracts add-on informatie gaat leveren inm’n code. Figuur 2 laat zien dat als ik een methode toevoeg die de re-gels van het contract niet naleeft dat ik direct feedback krijgt in devorm van squigglies (een nieuw woord voor de dikke Van Dale?). Door met de muis over de squigglies te bewegen wordt aanvullendeinformatie getoond.

Fig. 2: Intellisense squigglies maken het leven makkelijk

Behalve de squigglies krijg je overigens ook een warning als je het project compileert.Let op: Als je gebruik maakt van de optie ‘Treat warnings as errors’,dan is het goed om te weten dat de warnings die static checking genereert niet als error gezien worden.

PostconditiesTot nu hebben we gezien dat we met precondities in een contract kunnen vastleggen wat we verwachten van de ‘buitenwereld’ als zeonze functie willen aanroepen. Met code contracts kunnen we echterook afspraken maken over het resultaat van een functie.

Neem bijvoorbeeld de volgende code:

public int RandomDeler()

{

int g = new Random().Next( 100 );

return g;

}

public double Do()

{

int g = 10;

int d = RandomDeler();

return Delen( g, d );

}

Deze code levert nog steeds een waarschuwing op bij de aanroep van“Delen”. Er is immers geen garantie dat de functie RandomDeler nieteen nul teruggeeft.We kunnen de code voor RandomDeler verbeteren in:

public int RandomDeler()

{

int g = 0;

while ( g == 0 )

{

g = new Random().Next( 100 );

}

return g;

}

En nu kan iemand die een code review doet zien dat de deler nooit nulis, maar het is nog niet vastgelegd in een contract, en dus zal de aan-roep van “Delen” nog steeds een waarschuwing opleveren.

Het controleren van je code tijdens hetcompileren van je applicatie is waarzaken interessant worden

Met precondities in een contract kunnen vastleggen wat we verwachtenvan de ‘buitenwereld’

Page 7: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

magazine voor software development 7

Met behulp van Contract.Ensures kunnen we iets zeggen over het resultaat van de functie:

public int RandomDeler()

{

Contract.Ensures( Contract.Result<int>() != 0 );

int g = new Random().Next( 100 );

return g;

}

Als we bovenstaande method compileren, dan zien wat we wel ietsclaimen over het resultaat, maar de static checking functionaliteit isslim genoeg om te zien dat die claim niet altijd waar is. Door middelvan een waarschuwing bij het compileren, en natuurlijk ook de squig-glies zien we dat we niet aan het vastgelegde contract voldoen, zie figuur 3. We krijgen de melding “ensures unproven”, ofwel verzeke-ring onbewezen.

Fig. 3: Onbewezen contract

Als we de code verbeteren naar de eerdere fix, dan zitten we op hetgoede pad.

public int RandomDeler()

{

Contract.Ensures( Contract.Result<int>() != 0 );

int g = 0;

while ( g == 0 )

{

g = new Random().Next( 100 );

}

return g;

}

Met bovenstaande implementatie van RandomDeler() weet de Do()functie dat RandomDeler() nooit een nul zal opleveren en dus vervaltde waarschuwing bij de aanroep van Delen().

AannamesIn code doe je regelmatig aannames over de inhoud van variabelen.Stel dat in ons eerdere voorbeeld de RandomDeler(0 methode is geim-plementeerd door een externe partij en deze heeft geen code con-tracts geimplementeerd, maar we hebben de documentatie gelezenen er wordt nooit nul geretourneerd. We doen dan de aanname dat ditzo is en we willen de static checker hierover informeren zodat we geenonnodige waarschuwingen krijgen. De Contract.Assume method geeftje de mogelijkheid om je aanname te documenteren in je code.

public double Do()

{

int g = 10;

// RandomDeler wordt geimplementeerd door third party

int d = RandomDeler();

Contract.Assume( d != 0, "We nemen aan dat d nooit nul is."

);

return Delen( g, d );

}

Mocht bij het uitvoeren van de code de aanname onwaar zijn, danvolgt een exception met melding “We nemen aan dat d nooit nul is.”.

Object InvariantsTot nu toe hebben we gekeken naar contracten die iets zeggen overde precondities en postcondities van een functie. Soms wil je echtereen afspraak vastleggen over de staat van een object. Stel wat weeen punt met X en Y coordinaten hebben, maar het is een bijzonderpunt waarbij Y altijd groter moet zijn dan X. Onderstaande code laateen dergelijk class zien.

public class BijzonderPunt

{

public int X { get; set; }

public int Y { get; set; }

public BijzonderPunt(int x, int y)

{

Contract.Requires<ArgumentException>( y > x );

X = x;

Y = y;

}

}

Er is echter nog geen contract en hoewel we wel een contract hebbenafgesproken over de constructor is er niets wat ons let om de vol-gende code te schrijven:

public BijzonderPunt DoIets()

{

var bp = new BijzonderPunt(10, 20);

bp.X = 30;

return bp;

}

Om af te dwingen dat we bij bovenstaande code ook een waarschu-wing krijgen kunnen we een Contract Invariant Method toevoegen. Diteen is een private method, die we nooit direct moeten aanroepen,maar die de static checker gebruikt om instantie van de class te vali-deren. Onze class ziet er nu zo uit:

public class BijzonderPunt

{

public int X { get; set; }

public int Y { get; set; }

public BijzonderPunt(int x, int y)

{

Contract.Requires<ArgumentException>( y > x );

X = x;

Y = y;

}

[ContractInvariantMethod]

private void ClassContract()

Soms wil je echter een afspraak vast-leggen over de staat van een object

Page 8: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

MAGAZINE

{

Contract.Invariant( Y > X );

}

}

Door het toevoegen de ClassContract method, met daarop het ContractInvariantMethod attribuut zal de bp.X = 30; regel een waar-schuwing genereren.

Contracts en interfacesEen interface is een afspraak met de wereld om bepaalde functiona-liteit te implementeren. Met een contract kun je een verdieping van dieafspraak vastleggen.

Stel we hebben de volgende IRandom interface:

public interface IRandom

{

int RandomDeler();

}

Wat we eigenlijk willen op interface niveau de afspraak vastleggen datRandomDeler nooit nul retourneert. Ook hierin heeft code contractsvoorzien, en wel middels de ContractClass and ContractClassFor attributen. De code hieronder laat zien hoe het werkt.

[ContractClass( typeof( ContractForIRandom ) )]

public interface IRandom

{

int RandomDeler();

}

[ContractClassFor( typeof( IRandom ) )]

public class ContractForIRandom : IRandom

{

#region IRandom Members

public int RandomDeler()

{

Contract.Ensures( Contract.Result<int>() != 0 );

return default( int );

}

#endregion

}

public class MijnRandomizer : IRandom

{

#region IRandom Members

public int RandomDeler()

{

return 0;

}

#endregion

}

Door op het contract te verwijzen naar een contract class (en vreemdgenoeg moet er ook een verwijzing terug zijn) weet de static checkerdat er speciale contract regels gelden voor de method RandomDeler().De implementatie van IRandom door MijnRandomizer zal dan ook een

waarschuwing en squigglies genereren omdat het contract gebrokenwordt.

Altijd aan of uit?Code Contracts is iets dat wordt aan- of uitgezet op projectniveau.Maar soms wil je niet alle classes in een project laten controleren. Ditkan door op assemblyniveau de verificatie uit te zetten.

[assembly: Contracts.ContractVerification(false)]

Vervolgens kun je het per class of zelfs methode aanzetten door hetzelfde attribuut met de parameter ‘true’ te plaatsen.

[ContractVerification( true )]

public double Delen( int getal, int deler )

{

Contract.Requires<ArgumentOutOfRangeException>(

deler != 0,

"Deler mag niet nul zijn."

);

return getal / deler;

}

Tot slotCode contracts bieden een elegante manier om parameter checkingte implementeren. De code die je hiervoor implementeert kan vervol-gens door middel van static checking gebruikt worden om tijdens hetcompileren van je code al waarschuwingen te krijgen.Ik heb zelf gemerkt dat door het gebruik van code contracts ik op eenmeer defensieve manier naar m’n code kijk, niet alleen programmerenvoor wat het moet doen, maar ook op voorhand meer naar mogelijkeexcepties kijken; een soort code review zonder code reviewer.

Links• Microsoft Code Contracts : http://msdn.microsoft.com/en-us/

devlabs/dd491992.aspx (verkort: http://bit.ly/f5DYiR )• Download Microsoft Code Contracts :

http://research.microsoft.com/en-us/projects/contracts/(verkort: http://bit.ly/MePem ) •

Mark Blomsma

Mark Blomsma is een software ar-

chitect en eigenaar van Develop-

One Inc. (www.develop-one.com)

gevestigd in Lincoln, Maine, USA.

Hij is werkzaam bij Omnext

(www.omnext.net) als Microsoft

guru en verzorgt .NET trainingen

voor DevelopMentor (www.deve-

lop.com) . Hij is actief in de .NET

community als spreker en schrijver, bezoek zijn blog op

http://blog.develop-one.com.

8

Page 9: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

SDN > Update

TechEd EMEA 2011eruit, PDC 2011 erin of toch de SDC 2011!

Met het verdwijnen van TechEd EMEA 2011werd al druk gespeculeerd over een op han-den zijnde PDC (Professional DevelopersConference) . Zou het weer een ‘kleintje’worden zoals het afgelopen jaar op de Microsoft Campus of toch weer een fullblown PDC.Tijdens de MIX11 keynote kwam het hogewoord eruit en is aangekondigd dat voor2011 de PDC zal worden georganiseerd van13-16 September in Anaheim, California(USA).

Met de PDC niet naast de deur en een TechEd EMEA die voor dit jaar is afgezegd isonze eigen tweedaagse Software Develop-ment Conference 2011 een goed alternatief.Uiteraard zullen we er voor zorgen dat dehighlights van de PDC ook op de SDC zullenworden getoond maar zal er vooral weer eenkeur aan sprekers aanwezig zijn om je op dehoogte te brengen van de laatste technolo-gische ontwikkelingen zodat je weer een dikjaar vooruit kan!

IE9? Internet Explorer 10PlatformPreview 1!Internet Explorer 9 is nog niet vrijgegeven ofInternet Explorer 10 staat alweer voor de deur!Inmiddels staat na één van de vele aankondi-gingen op MIX11 Internet Explorer 10 PlatformPreview 1 al voor u klaar:http://ie.microsoft.com/testdrive/Info/Downloads/Default.htmlDeze Internet Explorer 10 Platform Preview 1is de eerste publieke preview van het IE10web platform. In deze release zit onder anderesupport voor CSS3 Flexbox, CSS3 GridAlignment, CSS3 Multi-column, CSS3 Gradients op achtergrond plaatjes en ECMA-Script5 Strict Mode.

Korte tijd geleden werd al bekend gemaakt dat TechEd EMEA2011 dit jaar niet door zou gaan. De verwachting was dat ditjaar TechEd EMEA 2011 wederom in Berlijn zou worden ge-houden maar men heeft besloten hier vanaf te zien en de vol-gende TechEd EMEA in de zomer van het volgende jaar teorganiseren in ons eigen vertrouwde landje en wel van 25-29juni in de RAI in Amsterdam.

Entity Framework 4.1gereleased11 April, iets eerder dan gepland, heeft het ADO.NET team bekend gemaakt dat “Microsoft ADO.NET Entity Framework4.1 AKA “EF 4.1” of “EF Magic Unicorn Edition” is vrijgegeven op het web (RTW). Entity Framework 4.1 bevat tweenieuwe features, de “DbContext API” om het coderen te vereenvoudigen en de “Code First” feature waarbij het EntityFramework kan worden gebruikt zonder eerst de databases aan te maken. De term “Code First” zegt het al, je begintmet de code en van daaruit kan de database structuur worden aangemaakt. Er zijn twee manieren om het Entity Fra-mework 4.1 te installeren. De eerste methode is de tot nu toe meest gebruikte en bekendste methode middels een stan-

daard stand alone installer en de tweede is eenvoor de dag van vandaag een relatief nieuwemethode namelijk via een zogenaamd NuGetPackage. Met deze laatste kan door gebruik temaken van het NuGet mechanisme op eenvou-dige wijze het Entity Framework aan jouw pro-jecten worden toegevoegd. Meer informatie enverwijzingen over het Entity Framework 4.1zijnte vinden op: http://blogs.msdn.com/b/ado-net/archive/ 2011/04/11/ef-4-1-released.aspx

17 juni 2011

SDEHet duurt nog even, maar over eenpaar weken staat de volgende SDEweer voor de deur. Het Delphi De-velopment Network heeft deze keero.a. Brian Long bereid gevonden omeen tweetal Delphi Prism sessies tegeven over het ontwikkelen van mo-biele toepassingen, met name voorde Android. Meer details, alsmedeinformatie over de sessies van deandere sprekers volgt binnenkort.

magazine voor software development 9

Page 10: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

XC E SSe x p e r t i s e c e n t e r

T: E:

Vacature DotNetNuke specialist/developer

XCESS = Dé DotNetNuke specialist in Nederland

-

-

XCESS zoekt nieuwe collega’s-

-

Jouw ervaring als IT professional-

Uitstekende arbeidsvoorwaarden

Is je interesse gewekt?

rre x p e r t i s e c e n t e e x p e r t i s e c e n t e

rr

tNukDotNe

eturaacVVact/dee specialistNuk

elopervt/de

SS = Dé DotNeCEX

t in Nederlande specialistNukSS = Dé DotNe

t/dee specialis

t in Nederland

eloper

-

-

t nieuwoekSS zCEX

sa’ollege ct nieuw

-

aring als IT prvJouw er

essionalofaring als IT pr

-

-

ende arbeidsektUits

denaarwoorvende arbeids

esse gertIs je in

t?ekweesse g

T:

E:

Page 11: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

GENERAL Frans Boumans

Opbouw van het leerwerktrajectNa een gedegen werving- en selectieproces, waarin de kandidatenmogelijk al voorgesteld worden bij een potentiële werkgever, start hettraject met een leerblok van 2 tot 3 maanden. In dit leerblok wordeneen assessment, de basisopleiding, de certificering en mogelijk depraktijk-leerdagen gecombineerd. Tevens vindt er een sollicitatietrai-ning plaats en wordt de deelnemer persoonlijk begeleid door een job-coach. Deze jobcoach brengt de werknemer en de werkplek in beelden zorgt voor een optimale match. De inhoud van de scholing metcertificering is afhankelijk van het traject: Reovict verzorgt nu 3 trajec-ten: Delphi programmeur,.NET Programmeur (C#, ASP.NET en Sha-repoint) en Test Engineer (ISTQB). Bij het Delphi traject verzorgt BobSwart – voorzitter Delphi sectie van de SDN – de Delphi trainingen.Na deze leerperiode krijgt de deelnemer een baan bij één van de aanhet traject deelnemende werkgevers. Matching vindt plaats middelseen zorgvuldig sollicitatieproces, wat mogelijk al gestart is voorafgaandaan de scholing. Het eerste contract bij de werkgever is een jaarcon-tract. Gedurende dit jaar wordt exclusieve jobcoaching ingezet. Ookde werkgever wordt begeleid bij het succesvol integreren van denieuwe werknemer. Tevens volgt de nieuwe werknemer gedurende ditjaar een vervolgopleiding, zodat ook de volgende stap in het leren enwerken gemaakt kan worden.

De kosten van het assessment, de scholing en de jobcoaching wor-den bij een baangarantie betaald door het UWV. Mogelijk kan aan dewerkgever een bijdrage in de kosten voor de vervolgscholing gevraagdworden. Bij het in dienst nemen van Wajongers heeft een werkgeverdiverse financiële voordelen. Reovict en Beekmans & Van de Ven kun-nen potentiéle werkgevers hierover informeren gezamenlijk inregelen.

AutismeAutisme is een ontwikkelingsstoornis die op een heel indringende wijzede ontplooiing van iemand beïnvloedt. Autisme is niet zichtbaar; hetgaat schuil achter een gewoon uiterlijk. Iedere persoon heeft zijn eigen

Reovict en Beekmans & Van de Ven organiseren samen met het UWV in Zuid-Oost Nederland leerwerktrajecten met een baangarantie voor ICT-functies, zoals Test engineer en Software Ontwikkelaar (programmeur). Hetleerwerktraject is voor hoogbegaafde en goed opgeleide mensen met eenAutisme Spectrum Stoornis, vaak behorende tot de Wajong-doelgroep. Het kennisniveau voor programmeur is MBO+ / HBO / WO. Vaak hebben dekandidaten al de nodige programmeerkennis en een beperkte ervaring.

Leerwerktrajecten SoftwareOntwikkelaar en Test Engineer

voor mensen met een Autisme Spectrum Stoornis

persoonlijkheid en karakter, zo ook mensen met autisme. Mensen metautisme zijn zeer geschikt voor operationele functies op het gebiedvan software testen en software ontwikkeling. Mensen met autismehebben de volgende kenmerken: ze hebben oog voor detail, ze werken nauwgezet, ze werken gestructureerd, ze kunnen goed individueel werken, ze hebben een hoog concentratievermogen, ze kunnen sterk focussen, ze beschikken over een groot doorzet-tingsvermogen en ze zijn super gemotiveerd.

Meer informatie over deze leerwerktrajecten in de ICT: Reovict, 040-2380845, www.reovict.nl Contactpersoon: Frans Bouwmans, 06-22200935, [email protected]

Frans Boumans

Frans Bouwmans, geb 1957 in So-

meren en nu wonende in Kelpen-

Oler. Gehuwd, 3 kinderen. Opleiding

tot wiskunde/informatica docent.

Arbeidsloopbaan gestart in het

onderwijs (MBO) als docent

wiskunde/infomatica, o.a. program-

meren in Basic en later Pascal.

Daarna ICT docent bij commerciële

opleiders. Huidige functie directeur, mede-eigenaar van Reovict

en IT-Profile. Al ruim 20 jaar actief op het gebied van ICT

opleidingen en ICT arbeidsmarkt. Creator van diverse leerwerk-

trajecten in de ICT voor diverse doelgroepen.

magazine voor software development 11

Page 12: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

CORESYSTEMS

John Casey

How this affects software analystsBecause documentation is out-of-date or does not exist, analystssearch the application source files to find the artifacts that will be affected by a change. However, determining which parts of an application to change based on the source files is time-consuming.Applications are built from a large number of artifacts, written in multiple programming languages, and stored as source files in multi-ple libraries in a variety of formats. Text scans typically find less than80% of the relevant artifacts. Those artifacts that are not found with atext scan must be determined manually by following artifact relations-hips. As a result, an analyst can spend many hours or even days to beable to estimate the cost of an application change and to plan thework and be at risk that some relevant artifact has not been discovered and changed.

How this affects software developersSoftware developers are similarly affected by the lack of good documentation and the complexity of the applications. Before theycan make the required changes, they must understand the programsto be changed — which data elements need to be changed and whichrelated components are needed for testing. Having to use text scansand then trace through source files are time-consuming for them too.As younger developers replace those who retire, the amount of application knowledge is concentrated in the remaining experiencedanalysts and developers. They are called upon more often to answersimple questions from new developers. As development teams shrink,there are fewer people to deal with the growing diversity and com-plexity of a company's business applications. The ability to captureand work with knowledge about application structure, relationships,and control flows, as well as the interdependencies with the databa-ses, transactions, and batch jobs become crucial.

How Rational Asset Analyzer helpsIBM Rational Asset Analyzer collects information about your main-frame and distributed applications from the many places that thesource files are stored and organizes this information in a single repo-sitory (see Figure1). This knowledge repository can give developers

Millions of lines of application code embody and enable the business processes that govern theday-to-day operations of today's enterprises. For enterprises to adapt to changing market conditions, their applications need to change at a similar pace. This has placed increased pressure on application development teams to deliver changes and enhancements in muchshorter time frames, with less business risk, and, more often today, with less-experienced developers.

What's new in Rational AssetAnalyzer Version 6.0

Application knowledge is concentratedon experienced analysts and developers

insight into an application's structure and its interactions with business data (Figure2).

Fig. 1: The knowledge repository is created from source files

As a result, your development teams can save considerable researchtime and gain greater confidence that the analysis is complete and ac-curate. Here are just a few of the typical questions that Rational AssetAnalyzer can answer:• Which components would be affected by a database change?• Which components do I need to test a program?• How does this particular program relate to other components?• Which components should we consider for remediation?

Fig. 2: Application insight examples

12

MAGAZINE

Page 13: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

CORESYSTEMS

By having more information to aid in the understanding of the existingapplication, including its data relationships and dependencies, youcan make changes and functional enhancements with fewer mistakes and with more focused and comprehensive testing, so youcan complete projects on time and within budget.

Additions and enhancements in Version 6.0In Version 6, Rational Asset Analyzer includes the following additionsand enhancements:• IBM® WebSphere® Studio Asset Analyzer renamed and realigned• Business rule mining for application modernization projects added• IBM® WebSphere® ILOG Business Rule Management System

integrated• A RESTful interface to access the application knowledge repository

added• The ability to scan IBM Rational Developer for System z remote

projects added• Unstructured symbol scanning added• User interface usability and performance improved

WebSphere Studio Asset Analyzer renamed and realignedWebSphere Studio Asset Analyzer is now functionally aligned with Rational Asset Analyzer, Version 6.0, and renamed as a separate edition, Rational Asset Analyzer for System z, Version 6.0. Both editions provide equivalent functions but this gives you a choice ofwhere z/OS application source files will be scanned.• Rational Asset Analyzer for System z enables z/OS applicationsource files to be scanned on the IBM® z/OS® platform, which iswhere these files normally reside. The resulting application informationis stored in IBM® DB2® for z/OS®, which is the DB2 environmentthat many users prefer.• Rational Asset Analyzer enables z/OS application source files tobe scanned on a Microsoft® Windows® system. Although this meansthat these source files must be downloaded before they can be scan-ned, scanning and subsequent access to the analyzer repository doesnot consume mainframe CPU cycles. This option is preferred whenyou have capacity-constrained mainframes. This option uses DB2 forWindows to store the application information.

Business rule-mining support addedTo ensure that a company can compete and survive, it must quicklyadapt the rules that govern business decisions to changes in the marketplace. In most situations, business decisions are made by usingrules encoded in the application source code and its databases. Beingable to identify where decisions are made in application source codeand what rules are being used is essential to many application modernization or consolidation projects.

Yet finding these business rules is not easy because of the way a program expresses a rule, using programming semantics and a varietyof names for the business data. This requires someone with a knowledge of the business and programming skills to be able to recognize the rules as expressed in a program. Organizing the rulesthat you find in order to make it easier to later find duplicate and conflicting rules or to complete modernization projects sooner is alsochallenging. Copy-and-paste into documents or spreadsheets is a typical solution that requires a lot of extra effort.

Version 6.0 of both editions adds support for mining business rules.You can use this new capability to quickly find, identify, and organizebusiness rules for follow-on remediation work. This business

rule-mining support is implemented as a natural extension to the assets that are already stored in the application knowledge repository.

To help you find the rules, you can define business terms that can beused to collect related data element names. As you map a data ele-ment name to a business term, Rational Asset Analyzer automaticallydiscovers related data elements by looking at the program logic. For example, in a Move statement, the target data element would berelated to the same business term associated with the source dataelement. The more a business term increases in data element scope,the more candidate rules the application can help you find.

To help you organize the candidate rules, you can map them to thebusiness activity and business process which they support (Figure 3).This provides a much more convenient, manageable, and useful wayof saving these relationships for later analysis, than using documentsand spreadsheets can.

Fig. 3: Find, identify, and organize business rules

WebSphere ILOG Business Rule Management System integratedAs Figure 4 shows, the Rational Asset Analyzer v6 editions integratewith the WebSphere ILOG Business Rule Management System(BRMS). This new capability gives you two options to share informa-tion:

You can import the ILOG BRMS vocabulary to get a consistent set ofbusiness terms that can be linked to the terms that the developersused in the source code.You can capture a mined business rule by using the integrated ILOGrule editors for validation and management within ILOG.

This cooperative support between Rational Asset Analyzer and Web -Sphere ILOG BRMS helps analysts and developers to be more productive and to finish business rules remediation projects sooner.

Fig. 4: Business rules integration overview

RESTful interface added to the knowledge repositoryRational Asset Analyzer captures a wealth of application knowledgethat is stored and organized in an IBM DB2 relational database.

magazine voor software development 13

Find duplicate and conflicting businessrules just by organizing them

Page 14: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

CORESYSTEMS

remote scans, such as scanning Java artifacts on a Windows serverfrom Rational Asset Analyzer for System z. Memory consumption isalso improved.Version 6 also includes components required for compiler-based scanning of COBOL and PL/I source code on Windows systems. Thisremoves the dependency of having Rational Developer for System zinstalled for compiler-based scanning.

You will notice additional user interface enhancements throughout Version 6, all of which are to respond to enhancement requests andto make the UI easier for you to use.

This article is also published on the internet at: http://www.ibm.com/developerworks/rational/products/raa/release.html •

John Casey

John Casey is an IT specialist who

focuses on IBM System z enterprise

modernization. He assists IBM

clients throughout the world in un-

derstanding and adopting IBM Ra-

tional application development

solutions for System Z users. During

his 31 years with IBM, John has

been involved in a variety of appli-

cation projects on distributed and

System z systems, and has written and conducted technical

workshops inside and outside of IBM.

Although this information is visible by using web- and Eclipse-baseddisplays, there is always more to learn and new ways to use the know-ledge. The power of this knowledge extends far beyond the interfacesprovided. To that end, the repository data schema was documentedin previous releases for access using DB2 and web services.

Version 6 provides a comprehensive RESTful interface. The RESTful interface, along with the published data schema, enables you to usethis information in many ways. For example, you can use it with yourown tools or as part of reporting and dashboard tools, such as IBM®Rational® Insight performance measurement and management software, as well as in broader analysis efforts, such as those providedby IBM® Cognos® business intelligence and financial performancemanagement software.

Rational Developer for System z remote project scanning addedThe Rational Asset Analyzer Eclipse integration plug-in makes it possible for IBM® Rational® Developer for System z® users to benefitfrom the Rational Asset Analyzer knowledge repositories, either localor remote, without leaving their working environment. A local RationalAsset Analyzer instance previously enabled those developers to scanworkstation source files that were part of a remediation project Enhancements to that plug-in in Version 6 make it possible to scan Rational Developer for System z remote projects in a local RationalAsset Analyzer instance. This means that developers will have accessto their project source files that are stored on z/OS. In addition, the integration plug-in is packaged with both editions of Rational AssetAnalyzer.

Unstructured symbol scanning introducedAlthough more effective analysis comes from having application know-ledge gathered and stored in context, there are times when this is notpossible. For example, you might have source code for which nolanguage scanner is available, or you might want to use source codecomments in your analysis. Some application knowledge can be obtained from unstructured data by using a text search. However, thatdoes not offer a convenient way of saving and using the information.

Distributed scanning support in Version 6 introduces an unstructuredsymbol scan option that you can use to gather symbols (programmingverbs, data element names, program names, comments) from any fileand store the symbol and its file name in the knowledge repository.By combining this knowledge with custom queries and relationshipanalysis, you get broader application knowledge and more useful analysis capabilities for unsupported languages.

User interface usability and performance improvedThe user experience is crucial when working with the amount and diversity of knowledge available with Rational Asset Analyzer and Rational Asset Analyzer for System z. Version 6 is part of ongoing workto improve the usability and, thus, the effectiveness of the web user interface. The new business rule-related dialog windows take advantage of Web 2.0 technologies to make the interactions more intuitive.

The Java™ 2 Platform, Enterprise Edition (J2EE) artifact analysis capabilities in the Rational Asset Analyzer V6 products are simplified:The manual steps to invoke the distributed scanner and identify thescan root are eliminated.

The Java artifacts can now be queued for analysis through the sameInventory wizard used for MVS artifacts, and the scan process startswithout the need for user intervention. Additionally, the analysis times for Java artifacts are significantly redu-ced. In IBM test environments, reductions were greater than 80%when performing local scans and as high as 95% when performing

MAGAZINE

14

Delphi DeveloperDays 2011

Een van de plaatsen om bovenstaand boek te bemachtigen is bijde Delphi Developer Days, met Cary Jensen en Marco Cantu dieop 15 en 16 mei in Amsterdam plaatsvinden (en eerder die maandook in Frankfurt). Gastsprekers zijn Bruno Fierens in Frankfurt, enBob Swart (voorzitter Delphi Development Network van de SDN) in Amsterdam. Zie http://www.delphideveloperdays.com/ voor meerinformatie (ik zal er ook mijn cursusboeken met korting aanbieden).

Page 15: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

with

93000employeesworking for

2500clientsin

94 countriesand

52 years of experience

software development holds no mysteries for us

with

30009

3000emplo

eesyemplo

orking fw

2500in

94

ororking f

2500clients

ountriesc

clients

and

52

xperiencears of ey

earsoftwelopmentvde

p

n

elopmentholds no

eriestsymor usf

op-quality softwers tCSC delivechnology serviction tormainf

t ideas, prs the beso harnesus te do amazing things. Find out morors. Wsect

e the we aro its clients. We tarop-quality softwe acrxperienc. Our eyompanes cechnology servic

om both the public and prives and solutions fractict ideas, prom.ct csc.e ae do amazing things. Find out mor

s leading independent orld’e the wtries enables s all indusose acr

e taom both the public and priv

Page 16: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

Het doel van Lab Management is, ontwikkel en testteams de mogelijkheid te bieden om te kunnen samenwerken, het buildprocesste optimaliseren en de inspannning voor het regressietesten te minimaliseren wat kosten besparing als positieve effect zal hebben.Lab Management maakt gebruik van System Center Virtual MachineManager (SCVMM) technologie.

Voor de goede orde en om verwaring te voorkomen, is Lab Management alleen ondersteunend bij X64 Bit systemen/platformen.

Visual Studio Application Life Cycle Management

Lab Management concept Part (1/2)

Fig. 1: Positie van Lab Management in VS ALM Concept

Lab Management: Wat is het en wat kun je ermee?Lab Management is niet anders dan een Virtuele omgeving waarin an-dere virtuele omgevingen VM’s gecreeerd kunnen worden met verschillende configuraties om daarin verschillende test types uit tekunnen voeren voor de te ontwikkelen Software Systemen. Lab Management is o.a. bedoeld om te gebruiken vanuit Visual Studio 2010 Test Professional waarmee de software tests uitgevoerdkunnen worden.

Lab Management is gebaseerd op Hyper-V en/of VMware technolo-gieën. In dit artikel wordt verder ingegaan op de benodigdheden enhoe je zo een Lab Management omgeving kunt opzetten op basis vanHyper-V technologie vanuit Microsoft.

Om Lab Management omgeving op te zetten, dient eerst de hardwarebeschikbaar te zijn waarop de Host geinstalleerd dient te worden. Aangezien Virtualisatie force hardware consumerende is, is het aan teraden om goed in kaart te brengen wat voor Hardware het best pastbij de organisatie die hiervan gebruik wilt gaan maken. Van essentielebelang hiervoor zijn, HDD ruimte, RAM geheugen en CPU gebruik.

Hassan Fadili

Met de komst van Visual Studio Application Life Cycle Management 2010,is een nieuw phenomeen geboren genaamd Lab Management naast TeamFoundation Server 2010 (TFS2010) en de Client Tools in de termen van Visual Studio 2010 Edities (VS 2010) namelijk (Ultimate, Premium, Professional en de Test suite genaamd Visual Studio 2010 Test Professionalook wel een als Microsoft Test Manager 2010 aangeduid).

Target- - - - - - -Startingpoint

Virtual Machine Virtual Machine Template

Scratch Using SCVMM Admin ConsoleCreate a VM on a host from a blank disk using SCVMM. Install OS, software, and agents in the VM.Shutdown the VM. Store the VM to a SCVMM library share that is used for Lab Management.(OR) Using Hyper-V ManagerCreate a VM from a blank disk using Hyper-V.Install software and agents in the VM. Export the VM to a SCVMM library share that is used for Lab Management. To do this, right click the VM in Hyper-V manager, and click on Export.Fix the ScopeOfResidence if the Hyper-V host is not Windows Server 2008 R2 (see Additional notes below).

Using SCVMM Admin ConsoleCreate a VM on a host from a blank disk using SCVMM. Install OS, software, and agents in the VM.Shutdown the VM. Create a template from the VM and select a library share that is used for Lab Management.

MAGAZINE

16

Page 17: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

Fig. 2: Lab Center omgeving

De host dient voorzien te zijn van Windows Server 2008 en/of Windows Server 2008 R2.

Bovenop het OS, dienen andere Software componenten geinstalleerdte worden op de Lab Management Host machine. Met Lab Management kunnen zowel Virtual Machines (VM’s) als Virtual Machine Templates gecreeerd worden.

Bovenstaand een overzicht van de benodigde software componen-ten voor de Lab Management bij het creëren van zowel VM’s als VMTemplates.

Conclusie:Wanneer een organisatie behoefte heeft aan een OTA omgeving, wattegenwoordig niet meer weg te denken is bij een professionele software bedrijf, is Lab Management een goede alternatief voor de fysieke Test/Acceptatie omgevingen die van toegevoegde waarde kanzijn om kwalitatief beter software op te leveren.

De meerwaarde van Lab Management zit hem in snapshoten, copieren en opnieuw inspoelen van de gecreeerde VM’s dan wel metverschillende configuraties om de benodigde testen te kunnen uitvoeren.

In het volgende artikel, zal diep ingegaan worden op het gebruik vanLab Management in combinatie met Visual Studio 2010 Test Profes-sional anders gezegd Microsoft Test Manager 2010 (MTM) en TeamFoundation Server 2010.

Referenties• Lab Management team Blog:

http://blogs.msdn.com/b/lab_management/• Lab Management op Microsoft MSDN site:

http://msdn.microsoft.com/en-us/vstudio/ee712698.aspx• Lab Management configureren voor het eerst keer:

http://msdn.microsoft.com/en-us/library/dd380687.aspx •

magazine voor software development 17

Hassan Fadili

Hassan Fadili is werkzaam als Free l-

ancer (ICT Consultants) Lead

Architect / Consultant en VS ALM

Consultant (MVP). Hassan is zeer

actief in de Community en mede be-

stuurslid van DotNed(.NET & VS

ALM UG NL) en VS ALM Track

Owner. Hassan houdt zijn blog op:

http://hassanfad001.blogspot.com

en te bereiken via: [email protected], hassan@

dotned.nl, [email protected] en/of

via Twitter op: @HassanFad

TIP:Project assemblies in de GACAls je in een project assemblies gebruikt die in de GAC staanen je zet hiervan de property “Copy Local “ op true, dan wor-den deze niet uit de GAC gehaald. Je zult ze dus zelf uit deGAC moeten halen en aan je project moeten toevoegen alscontent. Vooral van belang bij Windows Azure oplossingen.

Page 18: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

DELPHI Cary Jensen

This past winter I got around to writing a book about Delphi's Client-DataSet component. This book was published at the end of March,and is available now (there's a link at the end of this article). As a result, it seemed appropriate to replace the second part of the OTA article with one on ClientDataSets.

Today's article covers an interesting advanced feature of ClientDataSets called cloned cursors. Chapter 11 of my book provides anin-depth discussion of cloning ClientDataSet cursors, but I have refrained from repeating any material from that chapter. Instead, thisis a fresh article that I hope adds additional value above and beyondthe book's discussion. In addition, this article includes a look of severalvaluable new features introduced in some of the latest versions of Delphi, including anonymous methods and anonymous threads.

Overview of Cloned ClientDataSet CursorsCloning can mean very different things, when it comes to software. In some cases, such as in Delphi's TJSONObject (JavaScript ObjectNotation Object) and .NET's DataSet, a clone is a complete and separate copy of the original instance.

Cloned ClientDataSet cursors are different. A cloned ClientDataSetcursor is a new reference to an existing ClientDataSet's internal storage.

That internal storage has two parts: Data and Delta. Data is an OLEVariant that holds a ClientDataSet's data, in its current state, whichincludes any changes that have been made to that data since the datawas loaded into the ClientDataSet. Delta is also an OLEVariant, and itcontains the change cache. The change cache is a description of justthe changes that have been made to the data since it was loaded (solong as the change cache is being maintained, which is what happenswhen a ClientDataSet's LogChanges property is set to True, the default value).

That both Data and Delta are OLEVariants is important, in that OLEVariants are reference counted data structures. Importantly, whenthe last reference to an OLEVariant goes out of scope, it is removedfrom memory automatically, and this behavior plays an important rolein ClientDataSet cloned cursors.

Cloning a cursor involves two ClientDataSets, at a minimum, but caninclude many more than that. One of these ClientDataSets is thesource ClientDataSet, and it must be active. When a ClientDataSet isactive, it has a reference to a Data and Delta. Even then, Data and/orDelta may be empty, but they exist and can hold data. For example, ifthey are both empty to begin with, adding a record to the sourceClientDataSet will add one record to Data, as well as one to Delta.Data reflects the current state of the ClientDataSet's content with onerecord, and Delta reflects that one record was added.

The second ClientDataSet in a cloning operation is a ClientDataSetthat will receive the cloned cursor, and I will call this ClientDataSet thetarget. When a source ClientDataSet's cursor is cloned, the targetClientDataSet's Data and Delta properties refer to the Data and Deltaproperties of the cloned (source) ClientDataSet.

From that point on, and changes to Data (including index creation)and Delta are reflected in both the clone (target) and the original(source). That does not mean, however, that these ClientDataSets willbe exactly the same. Although both will refer to the same Data andDelta, there are many other properties that are independent. Specifi-cally, each ClientDataSet referring to a shared Data and Delta will main-tain their own values in the AppServer, Filter, Filtered, IndexName (orIndexFieldNames), MasterFields, MasterSource, OnFilterRecord, ProviderName, ReadOnly, RecNo (current record), and RemoteServerproperties.

You clone a ClientDataSet's cursor by calling CloneCursor from thetarget ClientDataSet. This method has the following signature:

procedure CloneCursor(Source :TCustomClientDataSet; Reset:

Boolean; KeepSettings: Boolean = False);

You pass at least two parameters to CloneCursor. The first argumentis a reference to the source ClientDataSet whose cursor you want toclone.

You use the second and third parameters to indicate whether the cloneshould adopt view-specific properties of the ClientDataSet it is cloning. If Reset is False and KeepSettings is True, the receiving

In the last issue of the SDN Magazine (#108) I provided you with an introduction to Delphi'sOpen Tools API (OTA). At the conclusion of that article I promised that I would follow up with asecond article showing you how to write a wizard for the Object Repository.

Since that article was published, Embarcadero has published a white paper by TMS software'sBruno Fierens. Bruno's paper is an in-depth look at Delphi's OTA, and it includes a discussionof creating Object Repository wizards. Rather than repeating that topic, albeit from my ownperspective, I decided to provide you with something new.

Cloning ClientDataSetCursors

MAGAZINE

18

Page 19: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

DELPHI

ClientDataSet will adopt the AppServer, Filter, Filtered, IndexName (or IndexFieldNames), MasterFields, MasterSource, OnFilterRecord,ProviderName, ReadOnly, and RemoteServer properties of the sourceClientDataSet. If you pass True in the second parameter (in which caseyou should pass False, the default, in the third parameter), the valuesof these properties in the clone will be reset to their default values.

Once a ClientDataSet has cloned another ClientDataSet, the twoClientDataSets will continue to refer to a common Data and Delta, untilone of them is closed or clones a different ClientDataSet. Importantly,their properties will remain independent, regardless of the values ofthe second and third parameters of CloneCursor. From that point on,each can use a different filter, range, current record, and so forth, andtherefore may reflect radically different views of the common datastore.

There is one exception to the above statement. If you clone a ClientDataSet that is filtered (Filter is True and Filtered is a Boolean expression limiting which records are displayed), and you pass a valueof False (no reset) in the second parameter of CloneCursor, the receiving ClientDataSet will also employ the filter and it cannot be removed. Under this situation, you can apply an additional filter to the clone, but you can never get back to a completely unfiltered view.This appears to be a bug. As a result, I recommend that you alwayspass True in the second parameter and manually apply properties fromthe source ClientDataSet to the target.

Once a source ClientDataSet is cloned, the target and the source areequal owners of the Data and Delta. Any one of them can post newchanges to Data, and can undo changes in Delta. When one of these ClientDataSets performs one of these actions, theresult is immediately apparent in both. Furthermore, closing one ofthese ClientDataSets has no effect on Data and Delta, unless it is thelast ClientDataSet that refers to Data and Delta, in which case Dataand Delta will be released.

As implied earlier in this article, cloning is not necessarily about twoClientDataSets. It is perfectly possible to clone a source ClientDataSet,and then use the target as the source of yet another clone, and so on.Once again, all ClientDataSets that point to the same Data and Deltaare equal. In other words, a source ClientDataSet has no special privileges with respect to the Data and Delta.

A Simple ExampleThe sample project SimpleClone demonstrates some basic elementsof a cloned cursor. The main form of this application is shown in Figure 1.

Fig. 1: The main form of the SimpleClone project

magazine voor software development 19

This project contains a ClientDataSet, named ClientDataSet1, whichis opened when the project runs and displayed in the upper DBGrid.When you click the button labeled Clone ClientDataSet1, ClientData-Set2 is cloned from ClientDataSet1, and displayed in the lowerDBGrid.

The following is the code that appears on the OnClick event handlerof the button labeled Clone ClientDataSet1.

procedure TForm1.CloneButtonClick(Sender: TObject);

begin

if ClientDataSet1.Active then

begin

ClientDataSet2.CloneCursor(ClientDataSet1, False, True);

CloneButton.Enabled := False;

CloseButton.Enabled := True;

end

else

raise Exception.Create('ClientDataSet1 not active. Cannot

clone');

end;

Fig. 2: Two ClientDataSets share Data and Delta

Once cloning is complete, the views of these ClientDataSets are independent, in that they can have different sort orders and differentcurrent records, as shown in the Figure 2.

If you now close ClientDataSet1, by clicking the button labeled CloseClientDataSet1, the ClientDataSet2 will remain active, and can continue working with the data by editing it and saving it to a file, orpointing to a properly configured DataSetProvider, after which it couldcall ApplyUpdates to apply its changes to an underlying database.

A More Complex ExampleOne technique that I've found particularly useful is to use cloned cursors to permit concurrent access to Data and Delta from two ormore threads. So long as Data and Delta are treated as readonly, eachthread can read Data (and Delta), perform its task, and then terminate.

The code that accompanies this article can be downloaded from the following link:http://www.JensenDataSystems.com/cdsbook/clone

Page 20: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

DELPHI

Here is an example. You might create a Windows service that exposes an Internet Direct (Indy) TIDTCPServer component. This component can listen for requests from TIDTCPClient components.Each client connection is accepted on a different thread, and eachclient might request one or more records from a common ClientDataSet. Importantly, each client request is distinct from every otherclient request.

The thread on the Windows service that receives a client request canclone a cursor onto a globally available ClientDataSet, retrieve the dataassociated with that request and return it to the client, and then freethe clone before terminating. So long as no code needs to makechanges to Data or Delta, the ClientDataSet is thread safe.

I considered creating a somewhat simple example of a Windows service that returned data from a shared ClientDataSet to client appli-cations using Indy socket components. However, doing so would raisea great many issues that I cannot address adequately in this article.

Instead, I decided to demonstrate the essential methods that can beused to retrieve specific subsets of data from a shared ClientDataSetin a multi-threaded environment. Fortunately, this demonstration alsomakes use of a couple of handy features that have been introducedinto Delphi in the last several releases: Anonymous methods (Delphi2009) and anonymous threads (Delphi XE).

Here's the setup. I created an application that needs to create physi-cal files that contain only a subset of data from a shared ClientData-Set. These physical files are written by worker threads that retrieve asubset of data from the shared ClientDataSet, write that data to a file,and then terminate. These worker threads perform their task concur-rently.

The main form of this application is shown Figure 3. Here you can seea button that will initiate the file creation process. Also shown is a list-box that contains the customer numbers for those customer's whoseorders records will be written to individual files, one file per customer.

Fig. 3: The main form of the CDSCloneToFile project

The code that extracts the data for a particular customer from the sha-red ClientDataSet is shown in the ReturnRecordsFromCDS method.ReturnRecordsFromCDS is called by a worker thread which passes tothis method the customer number whose orders are contained in theshared ClientDataSet named ClientDataSet1.

function TDataModule1.ReturnRecordsFromCDS(CustNo: Integer):

TClientDataSet;

var

CDS: TClientDataSet;

DSP: TDataSetProvider;

begin

//Create the Result and a temporary ClientDataSet

Result := TClientDataSet.Create(nil);

CDS := TClientDataSet.Create(nil);

try

//Create the DataSetProvider and hook it up

DSP := TDataSetProvider.Create(nil);

DSP.DataSet := CDS;

Result.SetProvider(DSP);

try

CDS.CloneCursor(ClientDataSet1, True);

CDS.IndexName := 'CustNoIdx';

CDS.SetRange([custno], [custno]);

//The following populates the Result CDS

//with just the orders for a particular customer

Result.Open;

finally

DSP.Free;

end;

finally

CDS.Free;

end;

end;

ReturnRecordsFromCDS works by using a DataSetProvider and aClientDataSet combination to retrieve only a range of records from acloned cursor. These records, once returned to the thread that calledReturnRecordsFromCDS, are then written to a file using the returnedClientDataSet's SaveToFile method.

But this method also points out some interesting elements of a ClientDataSet on which a range is set. Namely, if you set a range ona ClientDataSet and then call SaveToFile, all of the records of theClientDataSet are saved, not just those in the range.

To get around this, ReturnRecordsFromCDS creates a new ClientDataSet (Result), and associates it with a DataSetProvider (DSP). Thiscombination is used to populate Result with a set of records from aDataSet (the DataSet to which the DataSetProvider's DataSet property is associated). This DataSet is a ClientDataSet (CDS) that iscloned from ClientDataSet1. Once cloned, an index is set on CDS (thisindex is a feature of Data obtained as a result of the cloning process)and then a range is set. After that, calling Open on Result draws onlythose records from CDS in the range. Result is then returned to thecalling method.

The fun stuff, if you will, can be found in the method that calls ReturnRecordsFromCDS. This method, named GenerateXMLFileFor-Customer, is passed the customer number whose orders data needsto be written to a file. It performs its work using an anonymous thread.GenerateXMLFileForCustomer is shown in the following code listing.

procedure TForm1.GenerateXMLFileForCustomer(CustNo: Inte-

ger);

var

AnonThread: TThread;

begin

//Create the anonymous thread to run an anonymous method

AnonThread := TThread.CreateAnonymousThread(procedure

var

If changes did need to be made to the shared data, the addition of a syn-chronization object, such as a TMulti-ReadExclusiveWriteSynchronizercould be used to create a thread-safearchitecture for permitting updates

MAGAZINE

20

Page 21: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

DELPHI

CDS: TClientDataSet;

FileToWrite: String;

begin

CDS := DataModule1.ReturnRecordsFromCDS(CustNo);

try

FileToWrite := FAppDir + '\' + IntToStr(CustNo) +

'.xml';

if FileExists(FileToWrite) then

DeleteFile(FileToWrite);

CDS.SaveToFile(FileToWrite);

finally

//Free the ReturnRecordsFromCDS Result

CDS.Free;

end;

end);

//Start the anonymous thread

AnonThread.Start;

end;

An anonymous thread is created by passing a reference to a proce-dure to the TThread class method named CreateAnonymousThread.CreateAnonymousThread returns a TAnonymousThread (a TThreaddescendant), which you then execute by calling its Start method. Oncethe anonymous thread has completed the execution of the procedure,it terminates and frees itself.

In the case of GenerateXMLFileForCustomer, the procedure passed toCreateAnonymousThread is an anonymous method. An anonymousmethod is an unnamed method whose implementation appears inlinein your code.

Importantly, an anonymous method closes over the local variables (including formal parameters) of the method in which it appears, maintaining the context of these values even after the method in whichthe anonymous method is defined has exited. This is called a closure,and it permits each execution of this anonymous method to maintainthe value passed in the CustNo formal parameter.

Each call to GenerateXMLFileForCustomer creates a different workerthread that runs the anonymous method. Each anonymous methodcalls the ReturnRecordsFromCDS method, which returns a newClientDataSet that holds the orders for the given customer. After ensuring that the target file does not already exists (it will be deleted ifit does), the anonymous methods writes the contents of this ClientDataSet to the appropriately named file, after which it frees theClientDataSet created by the call to ReturnRecordsFromCDS.

GenerateXMLFileForCustomer is called from the OnClick event handlerof the button labeled Create Files for Customers. The following is thecode that appears on that event handler:

procedure TForm1.CreateFilesButtonClick(Sender: TObject);

var

i: Integer;

begin

for i := 0 to ListBox1.Count - 1 do

GenerateXMLFileForCustomer(StrToInt(ListBox1.Items[i]));

end;

Turning back our attention to the Windows service/client example Imentioned earlier, GenerateXMLFileForCustomer would be imple-mented on the OnExecute event handler of the TIdTCPServer component. Since that method executes in a different thread for eachclient connection, the use of the anonymous method would be

unnecessary. All the OnExecute event handler would need to do is toread the customer number passed by the client, execute the Return-RecordsFromCDS method passing to it this customer number, andthen return the XMLData property of the returned ClientDataSet to theclient application, after which the returned ClientDataSet would befreed. Alternatively, the returned ClientDataSet could be returned to the requesting client using a stream. Whether text or binary data is returned to the client, the service might also encrypt and/or compressthe data before returning it, in which case the client must know to decrypt and/or decompress the data it receives.

SummaryWhen you clone a ClientDataSet cursor, you permit an additionalClientDataSet to refer to the Data and Delta properties of an existingClientDataSet. While all ClientDataSets that share the same cursorshare the same Data and Delta, they do not share any other proper-ties, permitting each ClientDataSet to maintain an independent view ofthe data.For more information about Delphi in Depth: ClientDataSets, as well asfor links for purchasing the book, please visit http://www.JensenDataSystems.com/cdsbook. •

magazine voor software development 21

Cary Jensen

Cary Jensen is the bestselling

author of more than 20 books on

software development, including

Delphi in Depth: ClientDataSets,

and winner of the 2002 and 2003

Delphi Informant Reader's Choice

Award for Best Training. A frequent

speaker at conferences, workshops, and seminars throughout

much of the world, he is widely regarded for his self-effacing

humor and practical approaches to complex issues. Cary's com-

pany Web site is at: http://www.JensenDataSystems.com.

Cary has a Ph.D. from Rice University in Human Factors

Psychology, specializing in human-computer interaction.

TIP:ReportViewer in een Azure webrole gebruikenJe hebt dan referenties naar de volgende assemblies nodig: Mi-crosoft.ReportViewer.Common enMicrosoft.ReportViewer.Web-Forms. Zorg er dan wel voor dat de properties van dezeassemblies “Copy Local = true” hebben. Daarnaast verwijzendeze assemblies weer naar assemblies die in de GAC staan,deze zul je ook aan je project moeten toegevoegen. Dat zijn:Microsoft.ReportViewer.DataVisualization en Microsoft.Report-Viewer.ProcessingObjectModel.

Page 22: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

ARCHITECTURE William van Strien & Marcel Kempers

InfrastructuurBinnen een bedrijf zijn de SAP en Microsoft systeemlandschappenvaak op een eigen infrastructuur ingericht. Deze zijn vaak geïsoleerdvan elkaar en worden door verschillende afdelingen beheerd. Voor eenSAP/MS traject is het nodig dat er tussen de twee systeemomgevin-gen een verbinding is, fysiek en ook op IT operationeel vlak. Dit geldtniet alleen voor de productionele omgeving maar voor de hele OTAPomgeving.

ReleaseplanningWaar voorheen de SAP en SharePoint verantwoordelijke afdelingeneen eigen releaseplanning hadden, zal er voor de geïntegreerde systemen een gezamenlijke overkoepelende releaseplanning moetenkomen. Dit voorkomt verrassingen.

InformatiebeveiligingDe werking van SAP ERP is van belang voor het correct verlopen vanverschillende primaire en secundaire bedrijfsprocessen. Er zijn danook strikte eisen gesteld aan de kwaliteit van de informatie in SAP ERPen de gebruikersautorisaties. Informatiebeveiliging is een belangrijkonderwerp in een ERP systeem. In sommige gevallen worden er zelfswettelijke eisen gesteld aan de informatiebeveiliging. Dit vraagt danom een oplossing die de informatie afschermt voor onbevoegden envoorziet in auditing. Bedrijf auditoren moeten kunnen zien wie er verantwoordelijk is geweest voor bewerkingen van data in het SAPsysteem. Uiteraard stelt dit eisen aan je integratie architectuur. Hoe scherm ik de informatie af? Is bijvoorbeeld SSO tussen SharePoint en SAP ERP noodzakelijk om te zien wie er vanuit de SharePoint omgeving wijzigingen in SAP ERP heeft aangebracht?

Bewust zijn van licentieconsequentiesKeuzes in de integratiearchitectuur kunnen invloed hebben op de licentiekosten van de gebruikte SAP en/of Microsoft producten. Het kan soms op het technisch vlak relatief eenvoudig blijken om eenSAP functionaliteit naar een .NET front-end te ontsluiten; maar is datniet in conflict met het SAP en/of Microsoft licentiemodel? De licen-tiemodellen zijn complex in beperkingen en mogelijkheden, maar inde praktijk ook onderhandelbaar. Zorg er daarom voor dat er SAP enMicrosoft mensen aangehaakt zijn die het licentiemodel goed kennen.

Succesvol ontsluiten vaninformatie en processen

uit SAP in SharePointMicrosoft en SAP hebben recent samen Duet® Enterprise geïntroduceerd. Duet Enterprisebiedt een fundament om informatie en processen vanuit de SAP backend te ontsluiten naarSharePoint 2010 en Office 2010 clients. Naast Duet Enterprise zijn er meer manieren om dit terealiseren. Welke mogelijkheden zijn er? Hoe kies je er één? Hoe ga je überhaupt aan de slag/vanstart? In dit artikel bespreken de auteurs hun ervaringen met SAP – MS integratietrajecten – uitdagingen, aanpak, architectuur en best practices.

UitdagingenIn onze ervaringen op het SAP/MS integratie vlak herkennen we eenaantal terugkerende uitdagingen. Deze moet je adresseren om eensuccesvolle geïntegreerde eindoplossing te realiseren. Een applicatiedie waarde heeft voor de bedrijfsvoering, en die de medewerkers ookecht willen en kunnen gebruiken.

SAP ERP is een black boxHet SAP landschap is divers, bevat veel verschillend systemen – somstechnologisch onafhankelijk, maar juist wel functioneel verbonden.Voor de gebruiker en, in mindere mate, voor de SAP consultant is hetSAP ERP systeem een black-box, waarin op bijna magische wijze debedrijfsprocessen op een robuuste manier worden uitgevoerd. Voorintegratie trajecten heeft dit als consequentie dat het moeilijk is om in-zicht te krijgen in de proces uitvoering van de SAP omgeving, en welkerandvoorwaarden essentieel zijn voor een blijvende correcte bedrijfs-voering. Wanneer je in een applicatie gegevens vanuit een externe UInaar het SAP systeem gaat wegschrijven is het van belang in kaart tebrengen welke processen er allemaal geraakt worden om dit goed telaten verlopen.

SAP Service laagDocumentatie en marketing communicatie van SAP wekt de indrukdat er een hele reeks services klaar staan om SAP ERP ontsluiten.Maar in de praktijk zijn de door SAP beloofde services beperkt inzet-baar. De services zijn veelal gebaseerd op bestaande SAP technischebouwstenen die in eerste instantie niet zijn ontwikkeld om als basisvoor externe en platform onafhankelijke services te dienen. Zo gebruiktde interface van een BAPI functie bouwsteen vaak SAP specifieke pa-rameters en/of gaat de foutafhandeling op een SAP eigen wijze. Voorde consistentie van de bedrijfsdata kan het nodig zijn dat een externontsloten bedrijfstransactie meerdere interne SAP bouwstenen als ééncomposiet uitvoert.Voor alles wat complexer is dan een eenvoudige leesoperatie moet jerekening houden met maatwerk. Er is een combinatie van SAP func-tionele en SAP ABAP consultants nodig om de maatwerk services terealiseren. Om het SAP systeem te ontsluiten zal er dus een servicelaag gerealiseerd moeten worden. Een product als Duet Enterprisegeeft hierin prima ondersteuning.

MAGAZINE

22

Page 23: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

ARCHITECTURE

Bekendheid met beide wereldenTyperend is dat Microsoft en SAP ontwikkelaars plus architecten weinig tot geen kennis hebben van elkaars wereld. De Microsoft ontwikkelaar kent het SAP platform met bijbehorende technologieënen concepten niet; en anderzijds geldt het omgekeerde voor de SAPconsultants. Zorg daarom allereerst dat de betrokkenen elkaars taal enIT-wereld voldoende begrijpen. Hiermee voorkom je kostbare misverstanden.

Aanpak en architectuurDe beschikbaarheid van integratie-producten zoals Duet Enterprise isop zichzelf geen garantie voor een vlekkeloos verlopend SAP / SharePoint integratietraject en systeem inrichting. Ook hier geldt dathet loont om vooraf na te denken over de manier waarop je de interoperabiliteit wilt inrichten. Houd daarbij niet alleen rekening metzaken zoals de functionaliteit maar vooral ook met de kwaliteitseisenvan de applicatie, het al aanwezige IT landschap, de enterprise architectuur en de interne IT roadmap.

Dit is te bereiken met een gestructureerde integratie aanpak. Onzeaanbeveling is om te starten met het opstellen van de referentieSAP/Microsoft integratie architectuur. Hierin definieert de architect deconceptuele blauwdruk en de kaders voor de integratie inrichting in hetapplicatie landschap. Als input benoem je 1) de relevante bedrijfs spe-cifieke business richtlijnen en beperkingen, 2) de IT richtlijnen, uitgangspunten en beperkingen, en 3) schets je de contouren van hetIT landschap plus omgeving. Vanuit deze omgevingskaders leid je dereferentie integratie architectuur af. Hierin positioneer je de logischesysteem principes en verantwoordelijkheden. De referentie integratiearchitectuur is technologieonafhankelijk, en daardoor toekomstvast.

Voor iedere specifieke applicatie stelt de architect de concrete technologische integratie architectuur op. Je bepaalt vanuit de applicatiecontext:- functionaliteit en kwaliteitseisen, - welke technische integratie werkwijze hierbij het beste past, - en welke specifieke integratie technologieën en producten je daarbijwilt inzetten.

Voorbeelden hiervan zijn Microsoft WCF, SAP Enterprise Services, SAPPI, Microsoft BizTalk, Duet Enterprise, SAP .NET Connector, Sitrion. Dearchitect plot de technische keuzes in de logische architectuurlagenvan de referentie architectuur. Uitgangspunt bij ieder project is dat dereferentie architectuur sturend is en blijft.

Als gevolg van veranderingen in de bedrijfsomgeving, of nieuwe in-zichten, kan het nodig blijken om de referentie architectuur aan te pas-sen. In grotere organisaties gebeurt dit in overleg met de enterprisearchitect.

CaseWe demonstreren deze gestructureerde aanpak aan de hand van eenvoorbeeld. Het bedrijf Contoso Inc. wil dat zijn medewerkers adres-wijzigingen via selfservice door kunnen geven. De adressen van demedewerkers worden nu geadministreerd in SAP HR en het is de be-doeling dat de medewerkers op hun SharePoint 2010 MySite hunadreswijziging door kunnen geven. Contoso sluit niet uit dat er in detoekomst meer processen op deze manier geautomatiseerd worden.

1. ScopeStart met het benoemen van de processen die vanuit SAP ERP ont-sloten moeten worden in het SharePoint portaal. Ga hierbij uit vaneen lange termijn visie en beperk je niet tot de processen die in hetbeoogde project uitgewerkt worden. Een goed beeld van wat er gaatkomen kan helpen bij het maken van de keuzes voor in de referentieintegratie architectuur. In ons voorbeeld wordt de adreswijziging

direct genoemd door Contoso. Uit gesprekken met de HR managerblijkt dat deze naast het de adreswijziging de volgende selfservice pro-cessen wil aanbieden:• Muteren bankgegevens en gezinssamenstelling• Inzage P-dossier• Indienen onkosten- en kilometerdeclaraties• Aanvragen verlof en inzage verloftegoed,

incl. zwangerschaps- en ouderschapsverlof • Inzage salarisstrook en jaaropgave• Ziek en hersteld melden

2. Begin kleinKies één bedrijfsproces om de referentie architectuur verder uit te wer-ken en als eerste concreet te realiseren. Probeer een proces uit te kie-zen dat representatief is voor de overige processen. Met representatiefwordt bedoeld een proces dat tot vergelijkbare architectuurkeuzes leidtals ook voor de andere processen noodzakelijk zijn. In het geval vanons voorbeeld ligt het voor de hand om de adreswijziging als eerste tekiezen. In dit proces worden gegevens opgehaald uit SAP ERP, en ge-wijzigd. Dit komt in varianten bij de andere selfservice processen terug,maar die zijn een stuk complexer qua data structuur en proces. Voorde eerste validatie van de referentie integratie architectuur is dat nietnodig. De architecten zijn zich wel bewust dat voor de salarisstrook enhet P-dossier selfservice processen het nodig is dat deze als PDF inSAP beschikbaar zijn. En dat er bij een aantal andere processen extraaudit vereisten zijn. Zo moet het bijvoorbeeld duidelijk zijn door wie enwanneer de bankgegevens gewijzigd zijn. De PDF en de audit vereis-ten zijn extra eisen om mee te nemen bij de referentie architectuur keu-zes. Ook al worden de processen waar deze op betrekking hebbenniet direct meegenomen in het 1e project.

3. Huidige procesBeschrijf in detail hoe het gekozen proces er nu uit ziet. Beschrijf daarbij niet alleen wat er in het bedrijf gebeurt, maar ook hoe het proces intern in SAP ERP verloopt. In ons voorbeeld wordt de adres-wijziging besproken. De huidige adreswijziging kan op dit momentschriftelijk en per email worden geïnitieerd. Niet alle werknemers vanContoso inc. hebben een vaste werkplek en regelmatig toegang totemail. Vandaar dat de mogelijkheid wordt geboden om de adreswijzi-ging schriftelijk te versturen. Zowel de email als de schriftelijke adres-wijziging worden verstuurd naar de centrale HR afdeling. Op decentrale HR afdeling wordt de wijziging door één van de medewerkersin behandeling genomen. Deze administreert de adreswijziging in SAPHR. Voor alle mutaties in SAP HR wordt het vier ogen principe gehanteerd. Dit betekent dat de adreswijziging door een andere medewerker goedgekeurd moet worden. Iedere medewerker van decentrale HR afdeling heeft zijn eigen SAP ERP gebruiker. Daardoor ishet altijd duidelijk wie een mutatie heeft ingevoerd en wie deze heeftgoedgekeurd.

4. Toekomstige procesBeschrijf hoe het proces er in de toekomst uit ziet. Niet alle medewer-kers van Contoso Inc. hebben toegang tot het SharePoint 2010 intra-net dus de mogelijkheid om de adreswijziging schriftelijk of per emaildoor te geven blijft bestaan. Daarnaast krijgt de medewerker de mo-gelijkheid om via het intranet de adreswijziging door te geven. Hiertoe logt hij in op intranet. Daar heeft hij in zijn MySite omgevingtoegang tot zijn HR gegevens, waaronder zijn adres. Het adres kande medewerker vanuit hier wijzigen. Wanneer het adres opgeslagenwordt, gaan de adresgegevens als wijzigingsverzoek naar SAP HR.Daar worden ze vastgelegd als nieuw adres ter goedkeuring. De wij-ziging is in SAP niet direct goedgekeurd. Deze wordt beoordeeld dooriemand van de HR afdeling. Voor andere processen is het vereist omte kunnen zien wie een mutatie heeft uitgevoerd en in dit geval dusook wie een wijzigingsverzoek heeft ingediend. Deze eis nemen wevoor het uitwerken van de architectuur dan ook mee.

magazine voor software development 23

Page 24: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

ARCHITECTURE

5. Informatie architectuurBeschrijf de informatie architectuur, de beveiligingseisen en validatie-regels van de toekomstige oplossing. De informatie architectuur vanhet voorbeeld is beschreven in use cases en bedrijfsentiteiten, zieFiguur 1 en Figuur 2.

Fig. 1: Use cases

Fig. 2: Entiteiten

De beveiligingseisen worden besproken in termen van autorisatie enauditing. Tot slot worden de validatieregels en andere bedrijfsregelsbeschreven.

6. Huidige fysieke applicatie architectuurBeschrijf de huidige fysieke applicatie architectuur. Het kan natuurlijkgoed dat deze er niet is. Beschrijf in ieder geval de producten en systemen die gebruikt gaan of kunnen worden in een mogelijke oplossing. Neem hierin mee de versies en mogelijkheden van de producten en systemen. Deze informatie is van belang voor het bepalen van de mogelijkheden in de toekomstige fysieke applicatie architectuur.In ons voorbeeld• SAP ECC 6.0• SAP NetWeaver, inclusief ingericht PI• SharePoint 2010

7. Toekomstige applicatie architectuurBeschrijf de toekomstige applicatie architectuur. Gebruik hiervoor eenlagenmodel. Beschrijf per laag de verantwoordelijkheid en de communicatieregels met de onderliggende laag. Dit zorgt voor een logische opbouw van de applicatie. Tevens worden herbruikbaarheiden vervangbaarheid op deze manier gewaarborgd.

In ons voorbeeld is er voor vier lagen gekozen:

Presentatielaag: De presentatie laag realiseren we in SharePoint 2010.Daarbinnen maken we per scherm patroon een keuze tussen Share-Point Webparts of InfoPath forms. Beiden presentatie varianten com-municeren via SharePoint met de integratielaag binnen dezelfde .NETcontext.Integratielaag: Voor de integratielaag maken we een keuze tussen hetgebruik van SharePoint 2010 Business Connectivity Services versus.NET maatwerk. Voor communicatie met de servicelaag besluiten wetot de inzet van web services en voor authenticatie het gebruik vaneen service user en basic authenticatie. SSO implementatie bleek ergkostbaar omdat SAP ERP en SharePoint 2010 niet dezelfde identity

store gebruiken. Er is overwogen om usermapping te gebruiken,maar het wachtwoord wijzig proces leek daardoor te complex te wor-den. Om de audit eisen tegemoet te komen is er voor gekozen omde selfservice wijzigingsverzoeken in een maatwerk SAP tabel te re-gistreren. Het gebruik van de service user zal nog wel een SAP li-centie discussie oproepen.Servicelaag: Voor de servicelaag realiseren we web services in SAPNetWeaver. De SAP Servicelaag communiceert met de SAP applica-tie laag via remote function calls. SSO richten we in op basis van SAPlogon ticket.Applicatielaag: De applicatie laag wordt gevormd door SAP HR /HCM. Hier zal de Contoso Inc. specifieke bedrijfslogica gerealiseerdworden.

Best practicesVanuit onze ervaringen met SAP/MS trajecten onderkennen we eenaantal best practices:• Stel een gemengd projectteam samen, met medewerkers vanuit de

SAP en de Microsoft afdelingen. Beperkt dit niet alleen tot ontwik –kelaars, maar neem ook operations, en business analisten hierin mee.

• Betrek iemand die al kennis van en praktijkervaring heeft met SAP/MS interoperabiliteit. Deze persoon kan onder andere, zeker bij aanvang, de wederzijdse technische en product termen vertalen en op elkaars kennisbegrip mappen.

• Schets al vroeg in de projectuitvoering een architectuur diagram; deze dient als praatplaat voor de projectleden met ieder hun eigenreferentiekader.

• Toets je oplossingsrichting aan de enterprise architectuur, en de ITroadmap

• Valideer je oplossingsrichting door één functionaliteit van voor naarachter uit te werken in de systeeminrichting; vanaf .NET front-end,via integratie naar het betreffende proces in de SAP omgeving.

ConclusieHet ontsluiten van SAP processen en informatie naar SharePoint,vraagt om een zorgvuldige en doordachte aanpak. Het gaat niet alleenom technologie en integratie producten. Je moet je bewust zijn van deverschillen maar ook overeenkomsten in de SAP en Microsoft werel-den; zowel in technologie en op het menselijke vlak. Vanuit een door-dachte integratie aanpak en architectuur kun je vervolgens succesvolSAP ontsluiten via SharePoint.

MAGAZINE

24

William van Strien

William van Strien is SharePoint ar-

chitect en ontwikkelaar bij TopForce.

In een Achmea/TopForce partner-

schap heeft hij vorig jaar deelgeno-

men aan de Duet Enterprise RDP.

http://williamvanstrien.blogspot.com

Marcel Kempers

Marcel Kempers werkt voor Spar-

ked, waar hij vooral gericht is op

SharePoint 2010. Marcel heeft

ruime ervaring op het gebied van

Microsoft, SAP en systeemintegra-

tie. http://www.sparked.nl/blog/de-

fault.aspx

Page 25: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

magazine voor software development 25

GENERAL

Other than most of the lightweight agile processes and approaches,the agile approach Smart does explicitly describes the role of testing– and of having testers on-board form day one. One of the characte-ristics of this process is that its main unit of work is the smart use case.In short, Smart specifies the life-cycle of a smart use case. By defaultit includes design, test design, development, testing, rework and acceptance (of course). A typical smart use case goes through its fulllife cycle in one to four days, depending on its complexity. Next to thetypical stages in the life cycle of a smart use case, some projects introduce additional stages, mainly for testing purposes. The followingdashboard photo depicts the different stages perfectly.

Dashboard from my current project

Smart use cases going through a fixe life cycle is a rather different approach than working with user stories – and no dear Scrumda-mentalists, that does not mean my projects aren’t agile. At the start ofan iteration in Scrum – and yes dear Scrumdamentalists, I know iterations in Scrum are referred to as sprints – each user story chosenneeds to be split up in individual tasks. These individual tasks then gothrough some simple staging such as to-do, working, done. Due to theheterogeneous character of user stories, splitting them up in tasks isan activity that needs to be performed over and over again. Smart usecases are a much more standardized unit of work, and thus gothrough a standardized life cycle, without the need to split them upfurther.

Anyway, back to testing. From the dashboard photo it might not be allthat clear, but in my current project the smart use cases go through 5testing stages:

• Unit testingA developer implements (in stage Working) the code for a particular smart use case. Next to developing the code, the developer also implements the unit test for the smart use case. These unit tests are vital for regression testing the use cases (at each build).

• Developer testingRight after the developer finishes working on a particular smart use case, he moves the post-it to the stage developer testing. Here another developer picks it up and runs the use case to avoid basic mistakes.

• TestingNext the smart use case is moved to the Testing stage. Here a tester compares the smart use case implementation to the design. In most cases the tester will use a process cycle test, or a use case test to identify test scenarios and write test cases.

• Acceptance testingWhen the tester has declared the use case ok, acceptance testing is performed by the domain experts in the project. Due tothe limited availability of the domain experts in most agile projects,it’s the tester who does most of the work. Acceptance testing becomes a lightweight black box test.

• Approval testingLast but not least, twice per iteration the newly accepted usecases are presented to the end users. The end users approve thesmart use cases as soon as possible.

When an anomaly is found during either one of these stages, the smartuse cases are moved to rework, validate the possible change. Afterthat the smart use case re-enters the regular cycle. This approach en-sures high quality code and totally removes the need for extensiveuser acceptance testing at the end of a project – clearly one of thebenefits of agile development.

Sander Hoogendoorn - blog.sanderhoogendoorn.org •

Although testing is important in agile projects, not all agile processes and approaches recognize the roleof testing explicitly, other than stressing the importance of unit testing. Agreed, unit testing is a great technique to test whether the code does what it should do. But it’s a development technique. Unit testing does not ensure that the code does what the user needs. And thus in agile projects real functional testing (executed by real testers) is key from day one.

Functional testing in agile projects

Page 26: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

� � � � � � � � � �

h

Page 27: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

* Voor het uitproberen zijn creditcardgegevens nodig. Voor gebruik boven het introductieniveau betaalt u het standaardtarief. Deze aanbieding geldt tot 30 juni 2011.

Mijn innovatieve geest denkt in Windows Azure. Windows Azure is het ontwikkelplatform in de cloud dat developers vrij baan geeft in hun denken.

Bouw en draai applicaties in de cloud. Lanceer applicaties in minuten, in plaats van uren. Programmeer

in meerdere talen en technologieën, zoals .NET, PHP en Java. Begin vandaag nog met innoveren.

2QJHKLQGHUG�GRRU�UHGXQGDQWLH��EDQGEUHHGWH�RI�GH�EHSHUNLQJHQ�YDQ�XZ�VHUYHUFRQÀJXUDWLH��

Dat is Cloud Power.

Start vandaag nog met Windows Azure.

Probeer* Windows Azure gratis. Ga naar microsoft.nl/azure

Download de gratis app op http://gettag.mobi

Page 28: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

INFORMATIONWORKER

Paul Pascha

Sites aanmaken in SharePointEen Site Definition vormt uiteindelijk altijd de basis voor een in Share-Point aangemaakte site. Na installatie van SharePoint zijn er diversekant-en-klare Site Definitions beschikbaar. Vaak voldoen sites die worden aangemaakt op basis van deze definities echter niet helemaalaan de wensen van de klant. Er zal dan een manier moeten wordengekozen om ervoor te zorgen dat de site dusdanig wordt aangepastwaarna deze wel aan de wensen van de klant voldoet. Als het hierbijom één of enkele sites gaat valt te overwegen om de aanpassingendoor een power-user of consultant te laten uitvoeren. Al snel zal erechter een punt komen waarop de wens ontstaat om op efficiëntere,betrouwbaardere en meer voorspelbare wijze sites aan te kunnenmaken en af te configureren. Denk bijvoorbeeld alleen al aan de aanwezigheid van een OTAP straat waarin elke aanpassing op 4 omgevingen op exact dezelfde wijze uitgevoerd zou moeten worden.

Vaak zal er dus een wens bestaan voor aangepaste templates om hetgat tussen de functionaliteit van een site na het aanmaken en de func-tionaliteit waar de klant om vraagt zo klein mogelijk te maken. Share-Point biedt verschillende manieren om een nieuw template tedefiniëren die dichter in de buurt komt van-, of misschien zelfs meteenna aanmaken van de site de volledige gewenste functionaliteit biedt.

WebTemplatesMet de komst van SharePoint 2010 is er een nieuw Feature elementbeschikbaar gekomen met de naam “WebTemplate”. Template defini-ties die zijn gemaakt rondom dit nieuwe Feature element noemen wedan ook voor het gemak “Web Templates”. Web Templates biedenveel voordelen t.o.v. het werken met Site Definitions. Het belangrijkstevoordeel is dat de informatie in een Web Template alleen wordt gebruikt bij het aanmaken van een nieuwe site. Na het aanmaken vande site is er geen enkele relatie meer met het WebTemplate op basiswaarvan de site is aangemaakt. In tegenstelling tot Site Definitionswaarbij dit niet wordt ondersteund, kunnen Web Templates eenvoudigworden aangepast of zelfs verwijderd als de klant hierom vraagt zonder hierbij het risico te lopen bestaande sites te breken.

Er zijn twee manieren om een Web Template te creëren. Allereerst kaneen bestaande, aangepaste site worden opgeslagen als template van-uit de browser. Vanwege de complexiteit hiervan is dit niet mogelijkvoor Publishing Sites. Waar Site Templates in SharePoint 2007 nogwerden opgeslagen als *.STP bestanden, resulteert het opslaan tegenwoordig in kant-en-klaar *.WSP bestand. Centraal binnen dezeWSP staat een Site-scoped Feature waarbinnen een WebTemplate

Web Templates bouwenmet Visual StudioMet de komst van SharePoint 2010 is er een nieuwe techniek beschikbaar gekomen voor hetbeschikbaar stellen van templates voor het aanmaken van sites binnen SharePoint: Web Tem-plates. Binnen deze techniek staat het nieuwe WebTemplate Feature element centraal. Dit ar-tikel geeft een praktijkvoorbeeld van de implementatie van een template op basis van dezetechniek.

MAGAZINE

28

element gedefinieerd staat. In theorie zou dit WSP bestand overge-dragen kunnen worden aan een ontwikkelaar, waarna deze de WSPimporteert in Visual Studio. Daar kan de WSP verder aangepast worden, totdat het template aan alle eisen voldoet. De praktijk is echter iets minder rooskleurig. De WSP die SharePoint voor ons gegenereerd heeft bij het opslaan van een site als template, bevat Feature elementen voor ongeveer alles waarvoor een element te genereren valt. Zelfs standaard beschikbare inhoudstypen zoals “Item”en “Document” worden hierin onnodig gedefinieerd. Dit resulteert ineen oerwoud van XML bestanden en daarmee een vrij ingewikkeld enonduidelijk Visual Studio project.

Voor een netter resultaat is het de moeite waard om helemaal “fromscratch” te beginnen vanuit Visual Studio. In het volgende praktijk-voorbeeld worden de benodigde stappen gevolgd om een WebTem-plate op een goede manier te definiëren.

Een praktijkvoorbeeldIn het restant van dit artikel beschrijf ik hoe Visual Studio gebruikt kanworden om een nieuw WebTemplate te definiëren. Als voorbeeld zal ikstap voor stap een WebTemplate definiëren voor een Nieuws site.Mensen die in het verleden met SharePoint 2007 hebben gewerkt,zullen wellicht nog weten dat daarin een site template rondom het pu-bliceren van Nieuws beschikbaar was. Dit template bevat onder meereen welkomstpagina waarop een overzicht van het laatste nieuwswordt getoond op basis van een Content Query WebPart en een RSSWebPart die kan worden geconfigureerd om nieuws van een anderelocatie te tonen. Een archiefpagina bevat een Content Query WebPartdie een overzicht val alle nieuwsartikelen toont.

Dit veelgebruikte template is in SharePoint 2010 niet meer standaardbeschikbaar. De site definitie staat weliswaar nog geïnstalleerd op hetbestandssysteem, maar deze is nu HIDDEN gemaakt. Omgevingendie geüpgraded zijn vanuit SharePoint 2007 kunnen op deze maniernog wel gebruik maken van dit template maar er kunnen geen nieuwesites meer worden aangemaakt op basis van dit template.

Het is mogelijk de waarde van het HIDDEN attribuut op “FALSE” tezetten, zodat het template weer zichtbaar wordt in de UI, maar dit isniet supported. Veel leuker is het ook om dit template na te bouwenop basis van een WebTemplate. Het Nieuwssite template beschikt over publicatiefunctionaliteit. In te-genstelling tot wanneer we een site met publicatiefunctionaliteit zou-den willen opslaan als template vanuit de browser, is het wél mogelijk

Page 29: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

INFORMATION

WORKER

magazine voor software development 29

templates met publicatiefunctionaliteit te maken vanuit Visual Studio.

Stap 1: Maak een nieuw project in Visual StudioWe beginnen met een nieuw project in Visual Studio. Mijn voorkeur isom te beginnen met een “Empty SharePoint Project”.

Fig. 1: Begin een nieuw project

Na het aanmaken van het project vraagt de SharePoint tooling of weeen Farm Solution of een Sandboxed Solution willen maken. Voor ditvoorbeeld kiezen we voor een Sandboxed Solution, maar we haddennet zo goed een Farm Solution kunnen kiezen.

Stap 2: Voeg een WebTemplate element toeWanneer het nieuwe project is aangemaakt kan een SPI worden toe-gevoegd, waarin het WebTemplate element geplaatst en gedefinieerdwordt. Omdat er geen SPI Template beschikbaar is voor WebTempla-tes, kiezen we hier voor een “Empty Element”:

Fig. 2: Voeg een Empty Element toe voor het definiëren van hetWebTemplate element

Bij het toevoegen van het Empty Element heeft de tooling meteen eenWeb-scoped Feature voor ons toegevoegd om dit element een plekjete geven. WebTemplate elementen kunnen worden verpakt in een Site-of Farm-scoped Feature. Omdat we ervoor hebben gekozen het pro-ject als een Sandboxed Solution aan te maken moet de scope van deFeature worden gewijzigd naar Site.

Stap 3: Definieer het WebTemplateAls onderdeel van het gekozen “Empty Element” SPI is er automa-tisch een Elements.xml bestand toegevoegd. In dit bestand kunnen

we het WebTemplate gaan definiëren. Bij het definiëren van het WebTemplate element zijn 4 attributen verplicht. Onderstaande tabelbeschrijft deze attributen:

Tabel 1 - De verplichte gegevens in een Web Template definitie

In dit voorbeeld baseren we ons WebTemplate op het Nieuwssite tem-plate. Om de waarden te bepalen die we gaan invullen bij de Base* at-tributen bladeren we naar het WebTemp*.xml bestand waarin dittemplate gedefinieerd staat: ..\14\TEMPLATE\1043\XML\web-tempsps.xml

Na het overnemen van de benodigde waarden ziet het Elements.xmlbestand van ons WebTemplate er als volgt uit:

Fig. 3: Basisinvulling van Elements.xml

Om het template vriendelijk aan de eindgebruiker te presenteren wor-den ook de waarden voor Description, DisplayCategory en Title ge-vuld.

Stap 4: Definieer de site inhoud in ONET.xmlNadat we in Elements.xml de gegevens hebben gedefinieerd voor hetkenbaar maken van het WebTemplate aan SharePoint en het presen-teren aan de eindgebruiker, moeten we beschrijven welke onderdelenzich in een op basis van dit WebTemplate aangemaakte site zullen be-vinden. Hiervoor gebruiken we een bestand met de naam ONET.xml,welbekend voor de mensen die in het verleden Site Definitions hebbengemaakt.

Voeg allereerst een bestand met de naam ONET.xml toe aan het eer-der aangemaakte SPI waarin zich ook het elements.xml bestand be-vindt die de WebTemplate definitie bevat. Om dit bestand op de juistemanier uit te rollen moeten we de eigenschappen wijzigen zodat Deployment Type staat ingesteld op Element File.

Voor het definiëren van de gewenste site inhoud is het gemakkelijk omde inhoud van het ONET.xml van de Site Definition waarop we hettemplate baseren te kopiëren naar het zojuist aangemaakte ONET.xmlbestand. Het ONET.xml bestand die we hier als basis gebruiken staatin ..\14\TEMPLATE\SiteTemplates\SPSNHOME\XML\onet.xml. Opendit bestand in je favoriete editor en kopieer en plak de inhoud in het zojuist toegevoegde ONET.xml bestand.

Page 30: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

INFORMATION

WORKER

MAGAZINE

De inhoud die zojuist 1-op-1 naar het ONET.xml bestand van het WebTemplate is gekopieerd, kan slechts als uitgangspunt worden geno-men, maar is nog niet bruikbaar binnen ons Web Template. Er zijn watverschillen tussen wat is toegestaan in een ONET.xml bestand vaneen Site Definition en een ONET.xml bestand van een Web Template.Voor een uitgebreide beschrijving van deze verschillen verwijs ik naarde blog post van Vesa Juvonen waarnaar ik aan het einde van dit artikel refereer. In de volgende stap beschrijf ik slechts de verschillendie voor het WebTemplate Nieuws van toepassing zijn…

Stap 5: Omgaan met beperkingenVergeleken met de ONET.xml uit de SPSNHOME Site Definition geldenvoor het Web Template ONET.xml bestand de volgende beperkingen:

• Er kan slechts één Configuration bestaan met ID=”0”.Als er een extra Configuration nodig zou zijn, zal er een nieuw WebTemplate gedefinieerd moeten worden

• Er kan geen gebruik worden gemaakt van het Module element om bestandenVoor het provisionen van bestanden kunnen we gebruik maken vaneen Feature

• Er kan geen gebruik worden gemaakt van DocumentTemplateDeze kunnen eventueel worden gespecificeerd bij ContentTypes dievia Features worden uitgerold

Het ONET.xml bestand waarvan we in de vorige stap de inhoud gekopieerd hadden bevat meerderen <Configuration> elementen. Verwijder de elementen met ID=”-1” en met ID=”1” zodat er nog maaréén Configuration met ID=”0” overblijft. Verwijder tevens het <Docu-mentTemplates> element in zijn geheel.

Fig. 4: Een Feature voor het verpakken van de benodigde Modules

Als laatste beperking zijn er nog een aantal <Modules> gedefinieerd.Het <Module> element wordt niet ondersteund in de ONET.xml vaneen WebTemplate. Om met deze beperking om te gaan, voegen weeen Feature toe waaraan we nieuwe Module items toevoegen waar-van de inhoud overeen komt, met de Module zoals die gedefinieerdwas in het ONET.xml bestand. De definities van de .aspx bestandenkunnen 1-op-1 worden overgenomen in de bijbehorende Module

Stap 6: De laatste stappen…Onderstaande afbeelding toont de Packaging Explorer waarin alle onderdelen van het voorbeeldproject zichtbaar zijn:

30

Fig. 5: De Packaging Explorer toont de uiteindelijke opzet

Naast het toevoegen van een Feature om de vereiste Modules is erook een Feature toegevoegd voor het aanmaken van de ListInstancevoor Nieuws Afbeeldingen. Dit is niet gedaan om een beperking teomzeilen, maar puur vanwege persoonlijke voorkeur. Op deze manieris het ONET.xml bestand van het Web Template slechts gevuld metFeatures die geactiveerd worden bij het aanmaken van de site. Uiter-aard moeten we de Features die zijn toegevoegd voor deze onderde-len nog wel even in het ONET.xml bestand verwerken.

Uiteindelijk ziet de ONET.xml er zo uit:

Fig.6: Een mooi schoon ONET.xml bestand als resultaat

Wat overblijft, is het uitrollen van de Solution. Met de SharePoint too-ling in Visual Studio 2010 omvat dit niet meer dan één druk op de F5knop. Na het uitrollen kunnen we op de bekende manier een site aan-maken op basis van het Web Template.

Page 31: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

INFORMATION

WORKER

magazine voor software development 31

Fig. 7: Voor een eindgebruiker geen verschil...

ConclusieMet de introductie van Web Templates beschikken we over een mooie,flexibele manier om site templates aan te bieden binnen SharePoint.Hoewel er nog te dromen blijft over een veel nettere output bij het op-slaan van een site als template is het vrij eenvoudig om in Visual Stu-dio helemaal “from scratch” te beginnen bij het definiëren van eennieuw Web Template. De out-of-the-box Site Definitions kunnen hier-bij prima als uitgangspunt worden genomen. Het feit dat WebTem-plates bovendien beschikbaar kunnen worden gesteld als eenSandboxed Solution geeft ons de mogelijkheid mooie templates tedefiniëren voor gebruik in SharePoint Online…

MAGAZINE

31 magazine voor software development 31

ReferentiesSharePoint 2010 and web templates – Vesa Juvonenhttp://blogs.msdn.com/b/vesku/archive/2010/10/14/sharepoint-2010-and-web-templates.aspx

Using Web Templates to create Site Collections – Mirjam van Olsthttp://www.sharepointchick.com/archive/2011/02/10/using-web-tem-plates-to-create-site-collections.aspx

Site Definitions vs. Web Templates – Mirjam van Olsthttp://sharepointchick.com/archive/0001/01/01/site-definitions-vs.-webtemplates.aspx

Site Types: WebTemplates and Site Definitions – MSDN http://msdn.microsoft.com/en-us/library/ms434313.aspx •

Paul Pascha

Paul werkt als SharePoint Develop-

ment Specialist en Lead Developer

bij Wortell waar hij verantwoordelijk

is voor het ontwerpen en ontwikke-

len van oplossingen op basis van

Microsoft SharePoint.

(http://blog.wortell.nl/author/paul)

www.barnsten.com Voor al je development & database tools 023 - 542 22 27

DB PowerStudio voor SQL Server

Developer Editie

te schrijven.

belangrijkste meetwaarden en optimaliseer

veranderingen in schema of data. Wees compliant!

oor:

nd

€ 899€ 3.695

€ 1.895€ 5.695

Page 32: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NETASP

De kern van BizTalk bestaat uit drie dingen: transformatie,orchestratie en betrouwbaarheid. Windows Server AppFabric zorgt voor vergelijkbare betrouwbaarheid enWindows Workflow Foundation 4 kun je vergelijken metde Orchestration Engine van BizTalk. Samen met Windows Communication Foundation kun je daarmee veeldoen wat BizTalk ook kan. Het prijskaartje is echter beduidend vriendelijker dan BizTalk.

BizTalk is al behoorlijk wat jaren op de markt en heeft zich bewezen alseen product waarmee verschillende systemen betrouwbaar aan elkaar gekoppeld kunnen worden. Het patroon dat BizTalk daarbij gebruikt is ontvang-transformeer-orchestreer-transformeer-zend.

Fig. 1: BizTalk architectuur

Transformatie gaat daarbij naar en vanuit de interne representatiewaarmee de orchestration engine werkt. Deze interne presentatie isXML. Afbeelding 1 laat schematisch zien hoe BizTalk in elkaar zit en hetgenoemde patroon implementeert. Overigens is BizTalk op deze ma-nier niet alleen in staat om een verbinding tussen twee systemen opte zetten die zonder BizTalk niet kunnen communiceren.

De Orchestration Engine maakt het mogelijk om complexe processente implementeren waarbij allerlei partijen betrokken zijn.

Windows Workflow Foundation in .NET Framework 4 (WF4) lijkt heelerg op de Orchestration Engine van BizTalk. Omdat WF4 echt georiënteerd is op workflow, in plaats van het orchestreren van aanroepen naar verschillende applicaties ziet het er iets anders uit,maar de essentie is hetzelfde. Je kunt ook webservice aanroependoen vanuit de workflow en andere applicaties de workflow laten aan-

roepen op basis van Windows CommunicationFoundation (WCF). Je kunt WF4 dan gebrui-ken om een webservice te implementeren,maar de aanroep kan ook dienen om de work-flow te starten. Ook is het mogelijk om middenin een workflow te wachten op een bepaaldeaanroep (of aanroepen). Een dergelijke work-flow heet in .NET 4.0 een Workflow Service endeze kun je hosten in Internet Information Ser-ver (IIS). Zonder Windows Server AppFabricmoet je echter nog wel wat zaken regelen,maar daar kom ik later nog op terug.

Met een Workflow Service kun je de Orche-stration Engine van BizTalk nabootsen. BizTalkbiedt echter meer, om te beginnen met het ver-mogen om te werken met allerlei verschillendetransport protocollen zoals HTTP, FTP enMQSeries en het kunnen transformeren van en

naar allerlei verschillende formaten. De receive/send adapters en pi-pelines zorgen spelen hier een belangrijke rol bij. Er zijn allerlei

De kern van BizTalk bestaat uit drie dingen: transformatie, orchestratie enbetrouwbaarheid. Windows Server AppFabric zorgt voor vergelijkbare betrouwbaarheid en Windows Workflow Foundation 4 kun je vergelijken metde Orchestration Engine van BizTalk. Samen met Windows CommunicationFoundation kun je daarmee veel doen wat BizTalk ook kan. Het prijskaartjeis echter beduidend vriendelijker dan BizTalk.

Michiel van Otegem

Windows Server AppFabric + WCF + WF4 = BizTalk voor de armen

Windows Workflow Foundation in .NET Framework 4 lijkt heel erg op de Orchestration Engine van BizTalk

Het Appfabric Dashboard lijkt veelop de BizTalk beheerconsole

MAGAZINE

32

Page 33: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NETASP

situaties waarbij deze functionaliteit nodig is, zoals wanneer main-frame, Windows en Java applicaties met elkaar moeten communice-ren. Heb je te maken met een omgeving waarin het transportgestandaardiseerd is op webservices, dan is het leven een stuk eenvoudiger en kun je zonder de uitgebreide adapter en pipeline architectuur van BizTalk. WCF is dan genoeg om de communicatie tefaciliteren en met verschillende bindings heb je wat mogelijkheden omverschillende protocollen te gebruiken (SOAP, REST, Reliable Messa-ging, etc.). Wat je dan nog mist is de betrouwbaarheid van BizTalk nabootsen. Zelfs als je Reliable Messaging gebruikt, kan de aanroepnaar een webservice nog falen als de service uit de lucht is of de foutin gaat. Reliable Messaging zorgt er alleen maar voor dat het kanaaltussen de twee endpoints betrouwbaar is ALS beide kanten beschik-baar zijn en zolang er geen functionele fouten zijn. Vindt er een timeout plaats, dan faalt de aanroep nog steeds. Er is geen retry-mechanisme.

Wanneer in BizTalk iets fout gaat, zoals communicatie met een andereapplicatie, dan betekent dit niet dat het proces meteen helemaal af-gebroken wordt. Het proces dat fout loopt wordt stilgelegd en wordtin de beheerconsole getoond. Vanuit de beheerconsole kan het pro-ces weer opgestart worden, waarbij het uiteraard wel nodig is dat defoutconditie eerst verholpen wordt. Om dit te kunnen maakt BizTalkgebruik van een database waarin het bijhoudt waar een orchestratiezich in het proces bevindt. Zelfs als de server tijdelijk uit de lucht gaat,kunnen de lopende processen weer opgepakt worden. Dat is uiteraardniet zo met een gewone WCF service die je aanroept. WF4 heeft eenvergelijkbare database om workflows in op te slaan, vooral om work-flows die even niets doen (tijdelijk) uit het geheugen te halen. Deze da-tabase moet je normaal gezien zelf instellen in de configuratie van jeapplicatie. Dit is echter ook waar Windows Server AppFabric om dehoek komt kijken. Windows Server AppFabric zorgt dat deze data-base in het platform is ingebakken, waardoor je een Workflow Servicezonder erbij na te denken in IIS kan plaatsen. De database is dan au-tomatisch aanwezig, maar AppFabric heeft nog meer in petto.

Fig. 2: AppFabric Dashboard

Fig. 3: Overzicht van onderbroken Workflow Service instanties

Het heeft een beheerconsole die te vergelijken is met die van BizTalk,de AppFabric Dashboard. Een deel daarvan is te zien in afbeelding 2,die er voor BizTalk mensen heel bekend uit zal zien. In afbeelding 2 zieje een keurig overzicht van het aantal actieve, slapende (idle) en onderbroken (suspended) WF Instances, waarbij een WF Instance synoniem is voor een Workflow Service. Welke Workflow Services actief en slapend zijn is niet zo heel interessant. Die zijn gewoon aanhet doen wat ze moeten doen. Slapende Workflow Services wachtennamelijk op input en zouden dus op een gegeven moment weer actief moeten worden. Workflow Services die onderbroken zijn, zijnechter tegen een fout aangelopen en kunnen daarom niet verder.

Een beheerder zal die instanties moeten bekijken. Als de beheerdervanuit afbeelding 2 klikt op de link bij de Suspended WF Instances,dan krijgt hij/zij een scherm te zien zoals in afbeelding 3, waarin alle onderbroken instanties op een rij staan. Door op de instantie te klikken komt onderin het scherm een overzicht te staan van de instantie en de foutmelding. Als ontwikkelaars van de Workflow Service ervoor gezorgd hebben dat er een duidelijke foutmelding staat,kan de beheerder de fout wellicht oplossen en de Workflow Service dedraad weer op laten pakken waar deze gebleven was voordat het foutging (Resume).

BizTalk heeft behoorlijk wat eigenschappen die Windows Server AppFabric samen met WCF en WF4 niet heeft. Sommige scenario’szijn ook zeker in BizTalk eenvoudiger te realiseren, maar er zijn voldoende situaties waar BizTalk overkill is maar je toch wel wat wiltdoen om robuuste communicatie en workflow te kunnen verzorgen.Wanneer je dit goed uitdenkt zal AppFabric met WCF en WF4 eengoede oplossing zijn. •

magazine voor software development 33

Page 34: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

Microsoft-specialistenStel, je hebt een passie voor Microsoft. Je bent een

kei in applicatieontwikkeling en -architectuur. En je

wilt verder in je vakgebied. Dan is Sogeti het bedrijf

voor jou. Met 700 Microsoft-professionals behoren

we tot de grootste Microsoft-communities van

Nederland. Bovendien verwachten onze klanten

innovatie, zodat je echt al je kennis inzet. Wat ons

betreft wordt die kennis steeds breder en dieper;

we dagen je uit om het maximale uit jezelf te halen.

Bijvoorbeeld door je cursussen en opleidingen

aan te bieden. We zijn niet voor niets een van de

meest gecerti� ceerde organisaties in de branche.

Qua omgeving kun je denken aan ALM, VSTS 2010,

.NET4.0, O� ce 2010, SharePoint 2010, Azure en

BPOS. Terwijl de projecten enorm gevarieerd zijn.

Van BizTalk-implementaties en end-user BI-oplos-

singen tot de omvangrijkste integratie ooit van

SharePoint in Dynamics CRM.

JAVA-specialistenAls je passie hebt voor het Java vakgebied, dan

wil je natuurlijk ook werken bij het bedrijf met de

beste Java Community van Nederland. Bij Sogeti

ben je dan aan het juiste adres. Ruim 100 ervaren

Javanen werken bij Sogeti aan het realiseren van

complexe en innovatieve oplossingen voor haar

klanten. Aangezien vakmanschap bij Sogeti hoog

in het vaandel staat, wordt er veel tijd geïnvesteerd

in het vergroten van kennis en de persoonlijke

ontwikkeling van de Java professionals. Het behalen

van Java certi�ceringen is daar onlosmakelijk mee

verbonden. Sogeti heeft dan ook niet voor niets de

best gecerti�ceerde Java Community van Nederland.

Wil jij met jouw kennis en ervaring onze Microsoft

Community of Java Community versterken?

Neem dan gerust contact met ons op of kijk op

werkenbijsogeti.nl.

Wat kun je? Die vraag stelt ieder bedrijf met een vacature. Wie ben je? Die vraag stelt Sogeti

meteen daarna. We vinden het belangrijk dat je bij ons past. Want een ICT-er van Sogeti is

geen gemiddelde ICT-er. Het is er een met uitgesproken eigenschappen.

Gedreven. Resultaatgericht. En niet snel tevreden. Natuurlijk: plezier hoort erbij. Maar we

gaan op de eerste plaats voor de inhoud. Zo kennen klanten ons. Zo kennen we elkaar.

Als het een ICT-er is, zit hij bij Sogeti.

Page 35: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET Eric Roosendaal

In deel 2 las u hoe u een Dragactie kunt starten vanuit elk control, ookals dit geen DragItem event ondersteunt. In deel 2 werd getoond hoeu bestanden naar de Windows Explorer kunt slepen. In dit laatste gedeelte ziet u hoe u bestanden van de Windows Explorer kunt slepen naar uw applicatie.

Laten we aannemen dat u ook ditmaal een ListBox hebt. Stel om tebeginnen van deze ListBox de AllowDrop property in op True. Zolangdeze property op False staat worden er in het geheel geen Eventsdoorgelaten voor Drag-and-Drop.

Vervolgens vangt u het DragOver event af. U kunt desgewenst ookDragEnter en DragLeave nemen, maar om het eenvoudig te houdenbeperken we ons hier tot DragOver.

Binnen DragOver moet nu gecontroleerd worden of er Files in de Datazitten. Daarvoor bestaat een speciaal formaat en dat heet DataFormats.FileDrop. Als er inderdaad bestanden gesleept worden danwordt het Effect aangepast. Pas op: als u het Effect niet aanpast zaler straks geen DragDrop event optreden. De code voor DragOver zieter als volgt uit.

if (e.Data.GetDataPresent (DataFormats.FileDrop ))

e.Effect=DragDropEffects.Copy ;

else

e.Effect=DragDropEffects.None ;

Bij het DragDrop event moet nu de echte data worden opgehaald enin de ListBox geplaatst. De data zit in een zogenaamd DataObject, ener moet worden gespecificeerd dat het formaat FileDrop gebruikt is. Denamen van de bestanden blijken aanwezig te zijn als een array vanstrings, maar via een cast is dat eenvoudig om te zetten:

string[] files = (string[])e.Data.GetData(DataFormats.File-

Drop);

foreach (string f in files)

listBox1.Items.Add(f);

De ListBox kan nu vanuit de Windows Explorer keurig gevuld wordenmet bestandsnamen. •

Drag and Drop deel 3:

Bestanden slepen vanuitde Windows Explorer

Eric Roosendaal

Eric Roosendaal is trainer bij

Compu'Train. Hij is afgestudeerd in

Scheikunde, maar eind jaren '80

geswitcht naar IT, met name naar

Development. Sinds medio jaren '90

in dienst van Compu'Train als spe-

cialist voor alle programmeertalen,

de laatste jaren met name .NET (VB

en C#). Hij is Microsoft Certified

Trainer, gecertificeerd sinds 1995. Eric is te bereiken via

[email protected].

DragOver, DragEnter, DragLEave, DragDrop

magazine voor software development 35

Delphi OpenTools APIWhite Paper

Korte tijd nadat Bruno Fierens zijn presentatie bij de SDE (van maart 2011) had voltooid verscheen zijn white paper over deDelphi Open Tools API, gevolgd door een webinar. Wie bij de SDEwas had dit natuurlijk voor een groot deel al gezien. Anders is het white paper nog steeds te downloaden van http://www.embarcadero.com/rad-in-action/otapi voor de liefhebbers.

De aanwezigheid van het white paper heeft Cary Jensen overigens doen besluiten om in dit nummer van SDN Magazineniet een vervolgartikel over de Delphi Open Tools API te schrijven,maar over een ander onderwerp: het clonen van TClientDataSets.

Page 36: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

DOTNETNUKE

Ernst Peter Tamminga

Goals are good, but sometimes you have to start at the bottom. Andso we did. One of my personal objectives was to make the creation of the MSDNstyle windows based help file become part of a release of DNN: no separate project on CodePlex that I have to manage. The help anddocumentation should be an integral part of a DNN release (and it willsave me time if DotNetNuke does it during a normal release process).

MSDN style help for the DNN API file: it is here!With the release of DNN 5.6 one of my objectives as member of theDNN team was achieved: the MSDN style help file is now an integralpart of the DNN release, see this link for the latest version of the help file related to DNN 5.6.1: http://dotnetnuke.codeplex.com/releases/view/59419.

DNN Corp (Philip Beadle) integrated the MS Build structure I develo-ped for generating the API help file into the release build process of aDNN release. Creating a MSDN style help file does take some work,especially because you have to install additional software (SandCastlehelp file builder) to extract documentation from the codebase and generate a help file.

What has been achieved?The DNN API documentation has grown tremendously over the lastyears. When I started to create the MSDN style help file 3 years back(the help files for DNN 4.8.4), the resulting Windows help (.chm) filewas about 10Mb in size. For the current DNN 5.6, the help file hasgrown from 10Mb to almost 30Mb!

The documentation grew, because DNN developers, including theDNN Corp. employees/developers, spend more time on putting struc-tured documentation right into the (new and enhanced) source code.The community benefits from the work of the employees of DNN Corp!

Working on better documentationBut it was not only DNN Corp. developers who documented sourcecode. Also, in the DNN Reference team, I assigned myself tasks toimprove the existing documentation (or should I say: create the mis-sing documentation). If you want to improve things to a certain level,it is good to have an example what that level should be. So I used oneof the main base classes of the DNN (PortalInfo.vb) to create the stan-dard for source code documentation.

How do I do that in the DotNetNuke API?We (the people at my company XCESS expertise center b.v.) use DotNetNuke (DNN) for almost8 years now, mostly for developing custom web applications. A long time I was puzzled by thefact that DNN had a large codebase, but very limited documentation for developers to orientate themselves to reuse the existing DNN code. In other words, use the DNN API.About 3 years back, I stopped wondering and spend time to create a solution, resulting in a project on CodePlex: the DotNetNuke Developers Help File. This way, I shared our efforts withthe DNN community.

What is the MSDN style DNN API help file?This MSDN style based Windows help file did fill a gap for serious developers, developers (re)using the DNN API: more than 8.500downloads of this help file for various versions of DNN in the past 4years with 4 and 5 star ratings by people visiting this CodePlex project. For me: a success in sharing my knowledge and efforts in thecommunity.

Fig. 1

You can find the CodePlex project here: http://dnnhelpsystem.code-plex.com/. A screenshot of a recent entry can be seen in Figure 1.

I blogged a couple of times in the past years about updates (see myblog history on www.dotnetnuke.com for MSDN Style help files forDNN), and got positive responses on most of my blogs.

DNN teamsBeing the DNN team lead for the Events module for more than 4 years,I am, as volunteer, part of the DNN core team. Some time ago, I alsovolunteered for the DNN Reference Team with a high level goal in mind:the Reference Team drives to expand and enhance the foundation ofknowledge available to all DotNetNuke stakeholders; developers, ad-ministrators, users, decision makers, etc.

MAGAZINE

36

Page 37: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

DOTNETNUKE

Fig. 2

If you have a look at an “old” version of the MSDN style help file (Seefigure 2 for a screenshot of the original documentation), you will findmeagre and missing documentation in the entry PortalInfo Class atthe main entry DotNetNuke.Entities.Portals.

Documentation is missing (the red text) and for the rest it is mostlyonly the automatically generated docs that are available, not much ad-ditional code comments have been added by the original developersof de code.

Fig. 3

The improvement of PortalInfo.vbI spend quite some time to create a standard how we would the APIdocumentation to be: a well-documented class, methods and properties. And, if possible, examples how to use that part of the API.As mentioned, I used PortalInfo class as THE example, you can findthe source of this class in the folder ~\Solution\Library\Entities\Portal\PortalInfo.vb of the source pack of DNN.

If you have a look at the same PortalInfo Class documentation in thenewly generated MSDN Style help file of DNN 5.6 (See Figure 3 andcompare it with figure 2), you will find an abundance of new API do-cumentation, well ordered, structured, including see also, examplesof use and more.

Help file and intellisense both improvedIf you compare the sources of PortalInfo.vb of DNN 5.6 with e.g. DNN5.0, you will see that all the info for the MSDN Style help file can befound as comment lines in the source code of PortalInfo.vb. This way,the documentation will not only be part of the (separate) MSDN stylehelp file, it will also be part of intellisense in Visual Studio, if you are de-veloping against DNN 5.6. The intellisense is contained within the XMLdocumentation files that are (since DNN 5.2.0) distributed as part of aDNN release.

So my effort for documentation multiplies itself: both into the .chmMSDN style help file as well as into the intellisense in Visual Studio.

Everybody has access to the source codeSince all elements of the API documentation are retrieved from thesource code comments automatically, downloading and unzipping theDNN source code pack is the first step to start working on documen-tation. The DNN source is wonderful study material for any .NET de-veloper wanting to learn more about advanced .NET programming.

Choose anything you want to learn aboutThe current MSDN style .CHM help file is a great starting point for get-ting an idea about the wealth of the DNN API. If you start clickingaround and reading bits, you will stumble upon parts (methods, pro-perties, etc.), that are not documented to the level that you expect orwant.

Now it is time to really start learning!

Have a look at your unzipped source pack and find the .vb source filethat contains the class, methods or property you are interested in. Thisis a great way to learn about the structure of the whole DNN solutionas well.

Fig. 4

Document your learningWhile you have opened the .vb source file in your Visual Studio andstart learning: why not document the things you are learning about?A very good way to learn about things is to write about it. Use thestandard VB.NET code comment tags. Just type 3 quotes on the ap-propriate place and the base comment structure will be generated byVisual Studio for you. Couldn’t be easier.

In PortalInfo.vb you can find reference samples of the code comments,see Figure 4.A remark I want to make here is the attribute lang=”vbnet” in the codesample. Since the documentation compiler (MS) has a default of C#,this will signal the doc compiler to treat this as VB.NET sample codeand apply the appropriate formatting.If you do more than a single line of code documentation, you may

magazine voor software development 37

DotNetNuke = Open Source = Community = Sharing

Page 38: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

DOTNETNUKE

want to consider installing the program GhostDoc (see http://sub-main.com/products/ghostdoc.aspx), which is a nice (free) Visual Stu-dio Add In that helps to create structured code comments even betterthan the default Visual Studio way.

Share your effortsIf you understand this equation, you should be more than willing toshare your learning process with documentation to all other 800.000+registered members of the DNN community. And there is a structuredway how to do this, well documented in a blog by Philip Beadle, havea look at:http://www.dotnetnuke.com/Community/Blogs/tabid/825/En-tryId/2614/Help-Improve-DotNetNuke-5-4-3-ndash-How-to-Submit-an-SVN-Patch.aspx

Although this blog talks about DNN 5.4.3, the procedure it is not lin-ked to any specific version of DNN. It takes a little time to set it up, butit works like charm. The basics of this procedure is that you create adifference (patch) file with your additions to the code in such a way,that it can be implemented easily by DNN core developers.

If you share your efforts I am sure that your contribution (you) will geta recognition from the community! If you are willing to learn a lot, do-cument your learning in the .vb code, why not become a member ofa DNN team? There is no better way to have your learning experien-ces multiplied 800.000 fold.

Fig. 5

Contact me at [email protected] if you believein the equat. •

MAGAZINE

38

Ernst Peter Tamminga

Ernst Peter has long history in IT. He

is CEO of XCESS expertise center

b.v., Microsoft Gold Certified Part-

ner and DotNetNuke Gold Fusion

Partner, delivering custom IT soluti-

ons for midsized companies. He

has been speaker on various deve-

loper conferences. XCESS uses

DotNetNuke as web application fra-

mework since 2003 for the development of standard and custom

web applications.

Ernst Peter is DNN Core Team member with team lead respon-

sibility for the DNN Events and DNN FAQ module.

Launched today, the iPhone/iOS to Windows Phone 7 API mappingtool helps developers find their way around when they discover theWindows Phone platform. Think of the API mapping tool as being likea translation dictionary. For example, let’s say that you’re planning a va-cation to France. Since you don’t speak the language, you’ll bring apocket travel dictionary. Having this tool will surely help you to getsome idea about what you are ordering from a restaurant menu butyou’ll have no idea what the actual recipe is -- nor will you be able tohave a conversion in French with the server! But that’s a great learningtool to make the first steps.With this tool, iPhone developers can grab their apps, pick out theiOS API calls, and quickly look up the equivalent classes, methodsand notification events in WP7. A developer can search a given iOSAPI call and find the equivalent WP7 along with C# sample codes andAPI documentations for both platforms. Give it a try!

More details:http://windowsteamblog.com/windows_phone/b/wpdev/ar-chive/2011/04/29/leveraging-your-iphone-development-expertise-to-build-windows-phone-7-applications.aspx

Launched today, the iPhone/iOS to WindowsPhone 7 API mapping tool helps developersfind their way around when they discover theWindows Phone platform.

NEW API MAPPING TOOL:iPhone/iOS to Windows Phone 7

Page 39: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET Steef Jan Wiggers

Met behulp van AppFabric Connect-functionaliteit kunnen ontwikke-laars:• applicaties schrijven, die een verbinding nodig hebben met een

zogenaamde ‘Line-of-Business’ (LoB) systeem bijvoorbeeld SAP,Siebel, Oracle E-Business Suite zonder daarvoor code te hoevenschrijven;

• gebruik maken van transformatiemogelijkheden door middel van deBizTalk Mapper.

Daarnaast zijn met AppFabric Connect, LoB systemen en BizTalk applicaties, via de Cloud bereikbaar. De zogenaamde ‘BizTalk Server2010 AppFabric Connect for Services’ brengt deze mogelijkheden vanBizTalk en Windows Azure AppFabric samen.

Fig. 1: BizTalk Server AppFabric Connect aansluiting met WindowsServer- en Azure AppFabric

AppFabric ConnectDe AppFabric Connect functie biedt WF-ontwikkelaars toegang totzowel de BizTalk Mapper als de BizTalk Adapter Pack 2010 en dientapart te worden geïnstalleerd. De BizTalk Mapper is een tool, die draaitin de Microsoft Visual Studio-omgeving. Het kan worden gebruikt voorhet maken en bewerken van zogenaamde ‘maps’, welke gebruikt worden voor translatie en/of transformatie van XML-berichten. HetAdapter Pack zorgt voor samenwerking met verschillende bedrijfsap-plicaties, zoals SAP, Siebel of Oracle. Dit pack is een verzameling vanadapters voor belangrijke bedrijfsapplicaties die integratie met elkeWindows-applicatie mogelijk maken, gebruikmakend van het Wind-ows Communication Foundation (WCF) programmeermodel. Zodoende kunnen ontwikkelaars vanuit Visual Studio gebruik makenvan de BizTalk Mapper functionaliteit zonder eerst een BizTalk omge-ving in te hoeven richten. Eveneens kunnen verbindingen worden opgezet met zogenaamde LoB systemen als SAP, Oracle database,Oracle E-Business Suite, Siebel en SQL Server waar geen zelf geschreven code voor nodig is. Een ontwikkelaar kan een nieuwe applicatie bouwen in WF, die vervolgens kan worden uitgerold, gehosten gemanaged in Windows Server AppFabric. Web applicaties, bijvoorbeeld, kunnen eenvoudig toegang krijgen tot LoB-data.

BizTalk AppFabric ConnectUitbreiding integratie mogelijkhedenDe nieuwste versie van BizTalk Server biedt de mogelijkheid om connecties met Windows AzureAppFabric te realiseren of gebruik te maken van de Windows Server AppFabric mogelijkheden.De mogelijkheid binnen BizTalk Server heet AppFabric Connect en is eigenlijk, zoals de naamal zegt, niets anders dan aansluiten met AppFabric. Zowel de ‘on-premise’ Windows Server alsWindows Azure.

ScenarioVoor scenario’s waarbij web applicatie achterliggende systemen willenraadplegen, biedt Windows AppFabric een uitkomst. Informatie op-halen is van korte duur en heeft geen persistentie en dergelijke nodigzoals BizTalk Server biedt. De korte duur of te wel “Low latency” kanheel eenvoudig worden bewerkstelligd. Dit is met BizTalk nogal lastigte realiseren, tenzij je een hele krachtige (en dure) omgeving tot je be-schikking hebt. De onderstaande applicatiearchitectuur geeft weer hoeeen web applicatie met behulp van een workflow service, een LoBsysteem kan benaderen.

Fig. 2: Een verbinding tussen een workflow service in AppFabric/IISen een Line of Business-systeem

Connectie met een Line of Business SysteemBizTalk levert een verzameling op WCF gebaseerde adapters, dieonder andere geschikt zijn voor het maken van connecties met LoB-systemen. Daar zijn onder andere de WCF LoB Adapter SDK en hetBizTalk Adapter Pack voor nodig, die out-of-box worden geleverd bijBizTalk Server 2010. In een WF-project in Visual Studio kan de ont-wikkelaar, via het “Add Adapter Service Reference” menu onderdeel,gebruik maken van deze adapters.

Fig. 3: Het “Add Adapter Service Reference” menu onderdeel

magazine voor software development 39

Page 40: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

Zoals eerder aangegeven kunnen ‘maps’ worden gebruikt voor trans-latie en transformatie van data. Translatie is een proces, waarbij eenbericht wordt vertaald van het ene formaat naar een ander formaat,zoals omzetten van een plat bestand in een XML-bestand. Dit is voor-namelijk van toepassing voor BizTalk Server. Transformatie is het pro-ces, waarbij informatie van het ene bericht wordt ingebracht in eenander bericht. Je zou bijvoorbeeld een verzendadres in een bestel-lingbericht kunnen brengen. Dit is toepasselijk binnen zowel BizTalkServer als WF services. De Mapper is als activiteit beschikbaar in deToolbox onder de categorie BizTalk en kan worden gesleept naar eenworkflow.

Fig. 6: BizTalk Mapper activiteit in de toolbox.

Om van de Mapper-activiteit gebruik te kunnen maken, moet de ont-wikkelaar een InputDataContractType en een OutputDataContract-Type specificeren. Deze contracten zijn .NET-typen voor input- enoutput data voor de Mapper-activiteit. Op basis van deze typen kan hijeen nieuwe “mapping” maken of een bestaande selecteren. Wanneerje een nieuwe mapping maakt, zal de Mapper-activiteit, behalve eenBizTalk map (.btm) file, XML schema’s genereren voor de geselec-teerde input- en output data contractentypen.

Fig.7: Creëren of selecteren van een map

Fig. 8: BizTalk Mapper

Wanneer een nieuwe of bestaande mapping aangemaakt of gekozenis, kan de ontwikkelaar de file in de BizTalk Mapper GUI binnen de WF

Zodra hij hier op klikt, komt een scherm naar voren (zie figuur 4), datkan worden gebruikt voor de connectie naar een LoB-systeem. Bin-nen het scherm kan worden gezocht naar diverse artefacten welkedoor LoB-systeem worden ondersteund. Daarnaast kan de ontwik-kelaar diverse operaties kiezen, die bij het artefact behoren en die hijwil gebruiken. In het onderstaande figuur wordt de “Select”-Operatiegekozen op een SQL Database tabel “CustomerInfo”.

Fig. 4: Add Adapter Service Reference scherm

Op het moment dat de ontwikkelaar op OK klikt, worden WF-activi-teiten gegenereerd voor de gekozen operaties. Om de nieuwe activi-teiten te zien in de Visual Studio Tool box, zal hij eerst de projectenmoeten compileren. Als hij dat eenmaal gedaan hebt, kunnen de ac-tiviteiten naar de workflow worden gesleept.

Fig. 5: Gegenereerde Select workflow activiteit in activiteiten toolbox

BizTalk MapperZoals eerder beschreven kunnen ontwikkelaars vanuit Visual Studiotoegang krijgen tot de BizTalk Mapper. De BizTalk Mapper maakt ge-bruik van haar eigen grafische systeem van pictogrammen en linksvoor de translatie en transformatie van de input en output berichten.De mapper maakt gebruik van dezelfde grafische weergave van sche-ma's als de BizTalk Editor. Het slaat zijn ‘maps’ op als Extensible Sty-lesheet Language Transformations (XSLT) stylesheets.

MAGAZINE

40

Page 41: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

project openen en aanpassen. Wanneer hij de “mapping” uiteindelijkopslaat, wordt het automatisch, samen met project, gecompileerd engebouwd.

De Mapper-activiteit heeft een input- en output argument nodig omde te transformeren data en getransformeerde data op te slaan. Deontwikkelaar gebruikt daarvoor een variabele om input aan de Mapper-activiteit te koppelen. Hij gebruikt eveneens een variabele om de out-put van de “mapping” op te slaan. Runtime wordt de input eerstgeserialiseerd naar XML. Het wordt dan vervolgens getransformeerdmet behulp van de XSLT, welke is gegenereerd op basis van de “map-ping”. Ten slotte wordt het gedeserialiseerd naar het een object van hetoutput type.

AppFabric Connect for ServicesTot nu toe is de serverkant van AppFabric Connect beschreven enwordt nu de Cloud-kant belicht. Met de “AppFabric Connect for Ser-vices”-functionaliteit kunnen BizTalk-applicaties als WCF-Services inde Cloud worden blootgesteld, door middel van het toevoegen vanWindows Azure AppFabric Service Bus eindpunten. Deze kunnen ver-volgens worden geconsumeerd door afnemers, die zich buiten de fi-rewall van de aanbieder van de services bevinden. Organisatieshebben nu meerdere uitrolmogelijkheden tot hun beschikking voor watbetreft hun applicaties en services, waarbij deze al dan niet beschik-baar worden gesteld aan afnemers buiten de bedrijfsmuren.

Windows Azure AppFabric Service Bus voorziet in mogelijkheden omhet bereik van zogenaamde on-premise webservices te verlengen naarexterne afnemers. Deze voorzieningen zitten in onder andere eenRelay service, die Windows Azure AppFabric Service Bus onder-steund. Deze service kan als ‘mediator’ service in de Cloud tussen af-nemer en de service worden gezien. Het kan worden vergeleken meteen HTTP-proxyserver die, als deze eenmaal in browsers is ingesteld,alle verkeer afhandelt. Een verschil met de Service Bus is natuurlijk, datde aanbiedende service de verbinding al opzet tijdens de initialisatie.

Windows Azure Service Bus speelt een belangrijke rol in het verlengenvan het bereik van BizTalk-applicaties. Een ontwikkelaar heeft, om ditte kunnen verwezenlijken, de BizTalk WCF-Service Publishing Wizardtot zijn beschikking. Wat de BizTalk WCF-Service Publishing Wizard ei-genlijk doet is operaties in BizTalk-applicaties blootstellen als WCF ser-vices. “AppFabric Connect for Services” voorziet de wizard inondersteuning voor de Relay service van de Windows Azure AppFa-bric Service Bus. De wizard stelt de ontwikkelaar in staat operaties teselecteren, die hij wil blootstellen als services. Daarbij wordt het vol-gende gegeneerd:

• Een lokaal eindpunt voor de WCF Service• Een Service Bus eindpunt voor de WCF Service• Een Service Bus eindpunt voor meta-data uitwisseling met WCF

Service (optioneel)• Ontvangst poorten in een BizTalk applicatie, welke gebonden zijnaan de gewenste operaties.Naast het blootstellen van BizTalk-applicaties, kunnen op een verge-lijkbare manier LoB-applicaties worden blootgesteld aan externe af-nemers, waar eveneens van de Relay service binnen Windows AzureAppFabric Service Bus gebruik wordt gemaakt. Hiervoor is de WCFAdapter Service Development Wizard beschikbaar binnen Visual Stu-dio. Deze wizard stelt de ontwikkelaar in staat operaties bloot te stel-len van LOB applicaties. Daarbij wordt het volgende gegeneerd:

• Een lokaal eindpunt voor de WCF Service• Een Service Bus eindpunt voor de WCF Service• Een Service Bus eindpunt voor meta-data uitwisseling relevant voor

de WCF Service

Fig. 9: Blootstellen van BizTalk- en LoB applicatie via de Relay service in de Service Bus

Figuur 9 geeft een overzicht hoe een BizTalk-applicatie of LoB-sys-teem via de Relay service binnen Windows Azure Service Bus be-schikbaar wordt gesteld voor externe afnemers.

BizTalk WCF Service Publishing WizardAls BizTalk op hun machine is geïnstalleerd, kunnen ontwikkelaars deBizTalk WCF Service Publishing Wizard starten. En door de Wizard tedoorlopen zijn zij in staat BizTalk-applicaties als WCF Service bloot testellen in de Cloud. De ontwikkelaar bepaalt het transporttype, de mo-gelijkheid al dan niet meta-data uit te wisselen en of “receive locations”moeten worden aangemaakt voor de BizTalk-applicatie.

Fig. 10: WCF Service Type, transport en andere opties

De volgende stap is een hele essentiële; het verlengen van het bereikvan de WCF-Service. Belangrijk bij het aanvinken van “Add a ServiceBus Endpoint” is dat de ontwikkelaar, of de organisatie waar hij deelvan uitmaakt, de beschikking heeft over een Azure AppFabric ServiceBus-account. Hiermee kan expliciet aangeduid worden dat de serviceook in de Cloud beschikbaar moet zijn.

Vervolgens kan de ontwikkelaar kiezen welke BizTalk-orkestratie hij wilblootstellen. De BizTalk-orkestratie kan hier worden beschouwd alsde operatie van de te genereren WCF service.In een daaropvolgend scherm geeft de ontwikkelaar aan waar de service lokaal wordt moet worden uitgerold. Met andere woorden waar het lokale eindpunt zich uiteindelijk zal gaan bevinden. Hij zal

magazine voor software development 41

Page 42: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

vervolgens, als gekozen is voor verlengen van WCF Service, de eind-punten in Windows Azure Service Bus moeten configureren. Daarbijkan gekozen worden uit een drie bindings:• NetTcpRelayBinding• BasicHttpRelayBinding• WS2007HttpRelayBinding

Fig. 11: AppFabric Connect: toevoegen van Service Bus eindpunt

Fig. 12: Selecteren van een orkestratie voor het blootstellen via eenWCF Service

Voor de configuratie moet de Service Namespace geassocieerd zijnmet een beschikbaar Azure AppFabric Service Bus account (zie figuur14). De ontwikkelaar kan daarnaast de optie kiezen of het eindpuntbeschikbaar moet worden gesteld in ATOM feed-pagina voor het account. Een andere optie, welke hij kan kiezen, is of meta-data uitwisseling mogelijk moet zijn voor externe partijen om een proxy tekunnen generen van de WCF Service.

De laatste stap in de wizard heeft met de beveiliging van de Serviceeindpunt te maken. Een naam en de daar bijhorende sleutel dienen teworden ingevoerd van degene, die de service ter beschikking stelt.Deze gegevens zijn beschikbaar via Azure AppFabric Service Bus ac-count (zie figuur 14) en zijn noodzakelijk om de beveiliging te kunnenconfigureren, zoals weergegeven in onderstaande figuur.

Fig. 13: Configuratie van de Service Bus eindpunten

Fig. 14: Service Namespace

Fig. 15: Beveiliging van de service bus eindpunt

Voor de afnemer van de service kan worden afgedwongen dat, voorgebruik ervan, deze zich heeft geauthentiseerd bij de Service Bus. Deafnemer geeft de na authenticatie verkregen token aan de service. Dittoken wordt aan de Relay service in de Service Bus aangeboden alvorens toegang wordt verleend aan de uiteindelijke service.

MAGAZINE

42

Page 43: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

Tot slot zal de wizard een samenvatting tonen van alle gekozen in-stellingen. Bij afsluiten zal dan het een en ander lokaal en in de ServiceBus worden gegenereerd. De BizTalk applicatie is nu gereed om be-schikbaar te worden gesteld in de Cloud.

WCF Adapter Service Development WizardMet de WCF Service Development Wizard kan de ontwikkelaar ope-raties binnen LoB applicaties blootstellen via de Services Bus. Dezeverschijnt als de ontwikkelaar een nieuw project kiest in Visual Studioen het project template WCF Adapter Service selecteert. Er kan ver-volgens gekozen worden of service geconsumeerd wordt door eenSharePoint site. Het scherm wat volgt is vergelijkbaar met scherm vande “Adapter Service Reference” (figuur 4) en waar het om allemaal omdraait. De functionaliteit is hetzelfde; er kan gezocht worden naar di-verse artefacten, welke door LoB systeem worden ondersteund, zoalshet selecteren van operaties en dergelijke. In het onderstaande figuuris een verbinding gemaakt met SQL Server en een Select statementvan de Product tabel wordt toegevoegd.Fig.16: Kiezen van de LoB-operaties om bloot te stellen in de Cloud

De volgende stap is vergelijkbaar met de stap bij de WCF Adapter Publishing Wizard, namelijk de optie om de service bereiken te vergroten richting de Cloud. Hier kan eveneens expliciet aangeduidworden, dat de service ook in de Cloud beschikbaar moet zijn. Tot slot kunnen “behaviours” en eindpunten van de service wordengeconfigureerd. Deze “behaviours” worden voor de lokale en mogelijke service bus eindpunten geconfigureerd, afhankelijk vankeuze in het vorige scherm.

Fig. 17: Configureren van de eindpunten

Het zijn allemaal eigenschappen, die voornamelijk met beveiliging temaken hebben en vergelijkbaar zijn met het eerder beschreven be-veiligen van het service eindpunt tijdens het doorlopen van de BizTalkWCF Service Publishing Wizard. Onderstaande figuur geeft de confi-guratie weer van het service eindpunt.

Na configuratie van het eindpunt klikt de ontwikkelaar op Apply engaat door met de wizard, die een samenvatting toont. Na het afslui-ten van de wizard zal een WCF service gegenereerd worden met eenweb.config file. Deze zaken worden dan toegevoegd aan het VisualStudio project.

Testen van je serviceAls ontwikkelaar wil je nu gaan testen of je service via de Cloud be-schikbaar is. Hij kan een client applicatie maken, bijvoorbeeld een con-sole applicatie waar een referentie wordt toegevoegd naar heteindpunt van de service in de cloud. Er wordt uitgegaan van het tes-ten van de zojuist beschreven Adapter service. Naast de referentie zaleen ontwikkelaar nog een aantal dingen moeten doen. Als voor hetservice eindpunt authenticatie vereist is, dan moet aan de applicatieconfiguratie file (app.config) het een en ander worden toegevoegd..Bij het configureren van de service (figuur 17) is bij RelayClientAu-thentication de RelayAccessToken aangeduid. De client zal dus eenauthenticatietoken moeten overleggen aan de Service Bus wil het deservice kunnen benaderen. Aan app.config wordt daarom een “beha-vior” toegevoegd.

Fig. 18: Toevoegen van “behaviour” in app.config file binnen <system.serviceModel> element

Fig. 19: Toevoegen behaviour aan de service eindpunt

magazine voor software development 43

Page 44: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

Voor de credentials (naam en sleutel) dient de ontwikkelaar de waardete gebruiken van de organisatie, die de service host in Service Bus(zie figuur 14). Daarnaast zal de ontwikkelaar in de app.config, eenbehaviorConfiguration property aan het element van de ServiceBuseindpunt genaamd “TableOp_dbo_ProductsRelayEndPoint” moetentoevoegen. De naam van deze property moet gelijk zijn aan de toe-gevoegde behaviour (zie figuur 18) en kan aangepast worden naareigen inzicht, zolang ze maar gelijk zijn.

Fig. 20: Codesnippet voor het aanroepen van de service

Fig. 21: Resultaat aanroep service

Zodra deze aanpassingen gedaan zijn en de app.config is opgeslagen,hoeft de ontwikkelaar de service alleen nog aan te roepen in code metde juiste parameter, het Select statement in dit geval. De ontwikke-laar zal ook voor de login gegevens voor de SQL database moetenmeesturen (ClientCredentials). Dit is nodig om de client te authentise-ren tegen het backend systeem, in dit geval SQL Server.

Wanneer de code uit figuur 20 wordt uitgevoerd zal de service wordenaangeroepen, die een lokale database zal benaderen met de opge-geven credentials en de data ophalen op basis van het Select state-ment. In de onderstaande figuur is het resultaat te zien van de aanroepvan de service.

ConclusieMet AppFabric connect worden de mogelijkheden voor een ontwik-kelaar breder. Het ontwikkelen van webapplicaties, die toegang nodighebben tot LoB applicaties wordt een stuk eenvoudiger. Met behulpvan de BizTalk Mapper kunnen verschillende gegevens in verschillendesystemen worden getransformeerd binnen een WF-service, die ver-volgens binnen Windows Server AppFabric kunnen worden gehost enbeheerd. Tot slot biedt “AppFabric Connect for Services” mogelijkhe-den om “on-premise” BizTalk-applicaties of LoB-systemen bloot testellen via Windows Azure Service Bus aan externe partijen. De ont-wikkelaar kan door middel van configureren met wizards dit voor elkaarkrijgen zonder dat hij daar code voor hoeft te schrijven.

Links:• Installing the BizTalk Server 2010 AppFabric Connect feature,http://social.technet.microsoft.com/wiki/contents/articles/installing-the-biztalk-server-2010-appfabric-connect-feature.aspx#InstDev• Exposing LoB Services on the Cloud Using AppFabric Connect for

Serviceshttp://social.technet.microsoft.com/wiki/contents/articles/exposing-lob-services-on-the-cloud-using-appfabric-connect-for services.aspx?wa=wsignin1.0• Exposing BizTalk Applications on the Cloud using AppFabric

Connect for Serviceshttp://social.technet.microsoft.com/wiki/contents/articles/exposing-biztalk-applications-on-the-cloud-using-appfabric-connect-for-ser-vices.aspx• BizTalk + WF/WCF, Better Togetherhttp://social.technet.microsoft.com/wiki/contents/articles/biztalk-wf-wcf-better-together.aspx •

MAGAZINE

44

Steef Jan Wiggers

Steef-Jan Wiggers is werkzaam als

Architect, BizTalk Consultant bij

Ordina. Steef-Jan veelvuldig bezig

met BizTalk Server en richt hij zich

op architectuur, integratievraagstuk-

ken, analyse en ontwerp. Hij actief

in BizTalk community en MVP sinds

juli 2010.Via zijn blog http://

soa-thoughts.blogspot.com/ kun je

zijn verrichten en ervaringen lezen. Voor vragen is hij bereikbaar

via [email protected]

TIP:Startup task toevoegen aan Windows AzureAls je aan een Windows Azure project een Startup Task wil toe-voegen, let dan op het volgende. Als je vanuit Visual Studio eennieuw tekst bestand toevoegt, dan worden er aan het begin vanhet bestand een UTF8 byte order mark geplaatst. Oplossingenzouden kunnen zijn: maak het bestand bijv Startup.cmd aanmet Notepad en voeg hem daarna toe of begin het cmd be-stand altijd met een REM statement.

Page 45: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

Afgelopen zomer was Achmea’s Alex Thissen een week lang te gast bij het Windows Communication Foundation team op Microsofts hoofdkantoor in het Amerikaanse Redmond. “Er zijn op de hele wereld maar zes bedrijven die daarvoor werden uitgenodigd, dus ik beschouw het wel als een eer dat Achmea deel uitmaakt van dit selecte groepje. Microsoft luistert echt naar Achmea, ze beschouwen ons als een bedrijf dat voorop wil lopen. We spraken bijvoorbeeld over Microsofts onder-steuning van IBM Websphere MQ, waarvoor wij andere communicatie-patronen mogelijk wilden maken. Maar ook de koppeling tussen Sharepoint en SAP was onderwerp van gesprek.”Microsoft-topman Scott Guthrie, alias ‘Scott Gu’, was onlangs te gast op de Achmea-burelen. Thissen: “Ja, dat zijn inspirerende sessies. In mijn vakgebied heeft hij de status van een popster, dus je begrijpt dat het geweldig sparren is met zo’n man.”

Mep je fitBij de ontwikkeling van Visual Studio Team System (bestaande uit ontwikkelomgeving Visual Studio

2010 en de ‘Application Lifecycle Management omgeving’ Team Foundation Server 2010) was Achmea in een vroeg stadium betrokken, vertelt Thissen. “We hebben ideeën en suggesties aan-geleverd en Microsoft gewezen op bugs en verbeterpunten, zoals bijvoorbeeld bij het berekenen van de burnrate van code. Dat is nuttig voor ons én nuttig voor Microsoft.”Voor Achmea is Visual Studio Team System belangrijk bij het ontwik kelingen van software aan de voorkant, zoals webappli-caties en mobiele applicaties, en voor integratie-oplossingen met behulp van webservices. “Voor Achmea wordt het internet steeds belangrijker, niet alleen om schades te melden of verzekeringen af te sluiten, maar ook voor allerlei zaken op het gebied van preventie. Zo hebben we in opdracht van Zilveren Kruis Achmea de game ‘Mep je fit’ ontwikkeld voor Micro-softs ‘computertafel’ Surface. Ook tijdens de Olympische Winter-spelen hadden we in het Holland Heineken House een gezondheids-installatie staan; bezoekers konden

daarop onder andere hun bloeddruk en body mass index meten en sportieve prestaties vergelijken met die van topsporters.”

AgileDaarnaast draagt de Microsoft-software bij aan de toenemende vraag naar transparantie en voorspel-baarheid, vindt Thissen. “Team Foundation Server houdt alle stappen in het ontwikkelproces bij, vast-gelegd in hiërarchische workitems. Zo bieden wij onze klanten – de mensen in de business van Achmea – optimaal inzicht in het proces.”Last but not least is Thissen tevreden met MSF Agile, het processjabloon dat Visual Studio Team System voert. “Dat betekent dat we snel en flexibel kunnen bouwen, in korte iteraties met de klant. Dat is precies wat we nodig hebben, want Achmea wil razendsnel kunnen inspelen op nieuwe ontwikkelingen die zich voordoen in de markt.”

Alex Thissen: “Microsoft luistert echt naar Achmea.”

Foto

: Han

s B

arte

n

Page 46: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

CORESYSTEMS

Christiaan Heidema

DatatypenVeel programmeertalen kennen datatypen die sterke overeenkomstenvertonen. Zo ondersteunen de meeste talen wel de typen integer,string en float, in welke vorm dan ook. COBOL kent in principe geendatatypen, maar variabelen worden in de working-storage gedefini-eerd. De picture clause bepaalt of een variabele numeriek danwel alfanumeriek is. Met behulp van de clauses BINARY, PACKED-DECI-MAL etc kan worden gespecificieerd hoe de inhoud van de variabeleintern in het geheugen wordt opgeslagen.

Om met C-componenten te kunnen werken, moeten de binnen C bekende datatypen ook in COBOL gebruikt kunnen worden.

WORKING-STORAGE SECTION.

01 DATA-ITEMS.

03 boolean PIC X.

88 B-FALSE VALUE X’00’.

88 B-TRUE VALUES X’01’ THROUGH X’FF’.

03 single COMP-1.

03 double COMP-2.

03 byte PIC A.

03 short PIC S9(4) COMP-5.

03 int PIC S9(9) COMP-5.

03 long PIC S9(18) COMP-5.

03 char PIC N.

03 string PIC X(30).

Listing 1: definitie van C-datatypen in COBOL working-storage

In Listing 1 zijn de meest voorkomende datatypen in C en Java ge-definieerd in een COBOL WORKING-STORAGE SECTION. Data-itemsvan het type COMP-1 en COMP-2 zijn floating point data-items, waar-bij COMP-1 vier bytes groot is(single precision) en COMP-2 acht bytes(double precision). Door deze definitie is de PICTURE clause voor dezedata-items verboden. Voor alfanumerieke velden kan zowel PIC X als

PIC A worden gebruikt. Dit zijn synoniemen van elkaar. Data-items van het type COMP-5 worden intern gerepresenteerd alsbinaire data. Het verschil met het type BINARY of COMP is echter, datde maximale waarde van het data-item wordt bepaald door het aan-tal benodigde bytes en niet door de PIC S9… clause. Data-items ge-definieerd als PIC S9(5) COMP-5 en PIC S9(9) COMP-5 nemen beidevier bytes in beslag en zijn daardoor beide van het type integer.

StringsDe interne representatie van strings verschilt enorm tussen C enCOBOL. Binnen COBOL is de lengte van een string altijd gelijk aan delengte van de definitie in de WORKING-STORAGE. Een string gede-finieerd met een lengte 10 die de waarde “ABC” bevat, is in feite destring “ABC” gevolgd door zeven spaties. C kent de zogenaamde null-terminated string, waarbij de string van wordt afgesloten door eenhexadecimale nul.

WORKING-STORAGE SECTION.

01 S PIC X(31) VALUE Z’ABC’.

PROCEDURE DIVISION.

MOVE Z’My string for C’ TO S.

STRING “My string for C”

X’00’

DELIMITED BY SIZE

INTO S

END-STRING.

Listing 2: gebruik van null-terminated strings

Enterprise COBOL ondersteunt ten dele het gebruik van de null-ter-minated string (zie Listing 2). Door bij een MOVE-statement of eenVALUE-clause de toe te wijzen string te voorzien van de prefix Z, wordtde string als een null-terminated string in het data-item geplaatst. Wathierbij in feite gebeurd, is dat ná de string een karakter van het typeLOW-VALUE oftewel de hexadecimale nul wordt toegevoegd. Bij de definitie van het data-item moet dus wel rekening gehouden

MAGAZINE

46

C-functies in COBOLDe tijd dat applicaties volledig op zichzelf staan, is al lang verleden tijd. De nieuwste generatieCOBOL-compilers houdt met dit gegeven al lang rekening. De mogelijkheden om COBOL ap-plicaties te integreren met applicaties die in andere programmeertalen zijn ontwikkeld wordenjaarlijks groter. Hierdoor is het mogelijk om componten over applicaties heen te hergebruiken endaarmee ontwikkeltijd te besparen. Bovendien wordt het mogelijk om de kracht van de eneprogrammeertaal in te zetten in een andere omgeving. Dit artikel beschrijft hoe binnen COBOL(Enterprise COBOL) gebruikt gemaakt kan worden van C-functies.

COBOL ondersteunt de meeste binnen C gebruikte elementaire datatypen

Null-terminated strings zijn slechts beperkt bruikbaar binnen COBOL

Page 47: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

CORESYSTEMS

worden met de bepaling van de maximale lengte dat er één extra bytewordt gereserveerd voor de null-terminator.

Verder zijn de mogelijkheden voor het gebruik van de null-terminatedstrings beperkt binnen COBOL. Voor het verwijderen van de null-ter-minator of het bepalen van de lengte van een null-terminated stringmoet eigen code worden geschreven.

WORKING-STORAGE SECTION.

01 S PIC X(31) VALUE Z’ABC’.

01 S2 PIC X(30).

01 S-LEN PIC S9(3) COMP-5.

PROCEDURE DIVISION.

****

**** Bepalen van de lengte van de 0X-string

****

Inspect S tallying S-LEN for characters before

initial X’00’.

****

**** Verwijderen van de null-terminator

****

Unstring S delimited by X’00’ into S2.

Listing 3: null-terminated string operaties in COBOL

Aangezien de mogelijkheden bestaan voor het gebruik van C-functiesin COBOL, is het raadzaam om eerst te bepalen of er een C-functievoorhanden is. In C kennen we strlen() voor het bepalen van de string-lengte. Deze functie kan ook in COBOL worden gebruikt. Verderop indit artikel wordt daar verder op ingegaan.

ParametersIn native COBOL kennen we slechts één manier om parameters doorte geven aan een subprogramma en dat is door middel van het mee-gegeven van het adres van het betreffende data-item. Om compo-nenten van andere programmeertalen te kunnen aanroepen, zijn ookandere mechanismen noodzakelijk. Bovendien kennen andere pro-grammeeromgevingen functies die een waarde als resultaat terugge-ven, een mechanisme die we in COBOL in feite ook niet kennen.

PROCEDURE DIVISION.

****

**** Aanroepen van een subprogramma

****

CALL “SUBPROG” USING BY REFERENCE <var-1>

BY VALUE <var-2>

BY CONTENT <var-3>

RETURNING <var-4>.

Listing 4: Aanroep van subprogramma met diverse parameter mechanismen

In Listing 4 zijn alle mogelijke varianten van het doorgeven van para-meters weergegeven. Met behulp van BY REFERENCE wordt hetadres van het data-item meegegeven, zoals we dat normaliter inCOBOL ook doen. BY REFERENCE is de default. Met behulp van BYVALUE wordt de waarde van het data-item aan het subprogrammameegegeven. Evenals bij BY REFERENCE wordt bij BY CONTENTeen adres meegegeven, maar in de laatste geval is dit een kopie vanhet data-item. Met behulp van RETURNING wordt het data-item ge-ïdentificeerd die het resultaat van het subprogramma zal bevatten. Dit data-item is voor het subprogramma write-only.

Aanroepen C-functiesHet aanroepen van een C-functie is niets anders dan het aanroepenvan een subprogramma, zoals weergegeven in Listing 4. EnterpriseCOBOL levert een complete library met C-functies die binnen eenCOBOL-programma als subprogramma kunnen worden aangeroe-pen. Maar, er bestaat nog een andere manier en dat is door het gebruik van een FUNCTION-POINTER (zie Listing 5).

CBL PGMNAME(LONGMIXED)

IDENTIFICATION DIVISION.

PROGRAM-ID. “TESTC”.

DATA DIVISION.

WORKING-STORAGE SECTION.

77 FP USAGE FUNCTION-POINTER.

77 MELDING-TEMPLATE PIC X(80) VALUE

Z”Fout bij het openen van MQ Object %s, met code %s”.

01 PARM-1 PIC X(20) VALUE

Z”Queue manager”.

01 PARM-2 PIC X(20) VALUE Z“2085”.

01 FOUTMELDING PIC X(133).

01 STR-LEN PIC S9(4) COMP-5.

PROCEDURE DIVISION.

CALL "SPRINTF" RETURNING FP.

CALL FP USING MELDING-TEMPLATE

PARM-1

PARM-2

RETURNING FOUTMElDING.

CALL "STRLEN" USING

BY VALYE ADDRESS OF FOUTMELDING

RETURNING STR-LEN.

DISPLAY FOUTMELDING (1:STR-LEN).

GO BACK.

Listing 5: Aanroep C-functie mbv een FUNCTION-POINTER

Het eerste CALL-statement haalt het adres op van de functie“SPRINTF” en plaatst deze in het data-item FP die als FUNCTION-

Het tweede CALL-statement gebruikt de FUNCTION-POINTER omde C-functie aan te roepen. Het derde CALL-statement roept de C-functie strlen aan om de lengtevan de met sprintf geformeerde foutmelding te bepalen. Met behulpvan reference modification wordt bij het weergeven van de foutmeldingde null-terminator verwijderd.

De nut en noodzaak van voor het aanroepen van een C-functie metbehulp van een FUNCTION-POINTER laat ik aan ieders eigen fanta-sie over. Mijn voorkeur gaat uit naar de aanroep zoals die gebruikt isnaar de C-functie strlen.

VoorbeeldHoewel COBOL een zeer krachtige programmeertaal is, ontbreken erin mijn ogen een aantal belangrijke zaken. Een daarvan zijn string-ma-nipulatie functies, zoals het zoekenen vervangen van strings binneneen string. Een XML-verwerkend programma moest een aantal

magazine voor software development 47

C-functies zijn aan te roepen als subprogramma of met behulp van een FUNCTION-POINTER

Page 48: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

CORESYSTEMS

XML-strings samenvoegen tot één string en bepaalde voorkomens uitde XML-string verwijderen. Om dit te kunnen doen, heb je een func-tie nodig waarmee de inhoud van een geheugengebied verplaatst kun-nen worden naar een andere geheugenlokatie, waarbij de bron en hetdoel elkaar moeten kunnen overlappen. COBOL kent niet een derge-lijke functie, maar C wel, te weten memmove (zie Listing 6).

void * memmove ( void * destination,

const void * source,

size_t num );

Listing 6: Declaratie C-functie memmove

Deze functie wordt ook door Enterprise COBOL meegeleverd in de library met C-functies. De parameters van deze functie zijn:

1. Het adres van het geheugen van de bestemming (BY REFERENCE);2. Het adres van het geheugen van de bron (BY VALUE);3. Het aantal te verplaatsen bytes (BY VALUE)

In COBOL kan de aanroep naar deze functie er als volgt uitzien:

CALL 'MEMMOVE' USING

BY REFERENCE STR-XML(X-NAAR:1)

BY VALUE ADDRESS OF STR-XML(X-VAN:1)

BY VALUE STR-XML-COUNT.

Listing 7: Aanroep memmove in COBOL

De te bewerken XML is als string gedefinieerd als STR-XML. De subscript X-NAAR en X-VAN definiëren de positie binnen STR-XMLwaar naartoe en van waar data verplaatst moet worden en STR-XML-COUNT bevat het aantal te verplaatsen bytes. Met behulp van BY VALUE ADRRESS OF STR-XML(X-VAN:1) wordt eerst het adresbepaalt van STR-XML(X-VAN:1) en dit adres wordt vervolgens als eenwaarde meegegeven aan memmove. Bij de eerste parameter ontbreekt de ADDRESS OF omdat BY REFERENCE al expliciet aangeeft dat het adres moet worden meegegeven.

Overige toepassingenHet hergebruiken van C-functies binnen COBOL applicaties betekentdat er veel extra mogelijkheden ontstaan voor deze applicaties. Naaststring- en geheugenmanipulaties, ontstaan er bijvoorbeeld ook mogelijkheden voor dynamische geheugenallocaties (malloc). Een aantal tekortkomingen van COBOL kunnen hiermee het hoofd worden geboden.

Maar naast bestaande C-functies, kunnen ook eigen functies die geschreven zijn in C worden gebruikt. Hierdoor is de weg open ombijvoorbeeld binnen de gehele organisatie gebruik te maken van éénen dezelfde renteberekeningsmodule. Het is hierdoor niet een leukspeeltje voor de ontwikkelaar, maar een serieuze methode om in tezetten voor het hergebruiken van componenten. •

MAGAZINE

48

Integratie van COBOL met C-componenten is een krachtige troef voor hergebruik

Christiaan Heidema

Christiaan Heidema is MainframeSoftware Guru at Sogeti NederlandBV. During the last 12+ year Christi-aan has worked in several main-frame environments as DBA,Engineer and Change- and Confi-guration-manager. He developed apassion for mainframe software solutions. His expertise encloses

o.a. COBOL, DB2, IMS, CICS and JCL.

SQL Azure ReportingWat er op dit moment in de Windows Azurenog ontbreekt zijn mogelijkheden voor BI.Daar wordt nog hard aan gewerkt. Wel is in-middels Reporting in CTP vorm beschikbaar.Het is nog duidelijk een vroege versie, maarhet ziet er wel goed uit. Een aantal dingen dienog niet kunnen:• Als DataSource kan alleen nog gekozen

worden SQL Azure, geen XML source of iets dergelijks

• Reports kunnen alleen toegevoegd wordenof geupdate, voor het verwijderen is nog geen interface voor.

Voor het Developen van een rapport volgt jehet development traject, zoals je met de ‘tradionele’ SQL Reporting gewend bent.

Je gaat aan de slag met SQL Server BusinessIntelligence Development Studio. Daar beginje een Reporting project en dan ga je aan deslag met de Report Wizard of maak je vanscratch af aan een Report. Als je Report danklaar is, kun je hem gewoon deployen. Uiter-aard wel naar de SQL Azure Reporting ser-ver, in mijn geval:https://rsprdoctpxxxx.ctp.reporting.database.windows.net/reportserver.Op deze URL kun je ook een preview krijgenvan het report, dat je gedeployed hebt.

Page 49: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

Delphi in Depth:ClientDataSets

Over Cary Jensen en TClientDataSets gesproken: na tientallen artikelen (enbijna evenveel jaren) heeft Cary Jensen eindelijk al zijn publicaties over deTClientDataSet gebundeld in een nieuw boek: Delphi in Depth: ClientDataSets. In dit nummer van SDN Magazine een stuk uit het boek over hetclonen van TClientDataSets. Zie http://www.jensendatasystems.com/cdsbook/ voor meer informatie.

Delphi XE IntraWebXI DevelopmentOver mijn cursusboeken gesproken: de nieuwste titel Delphi XE IntraWeb XI is beschikbaar in PDF formaat. Normaal 99 Euro (ex.BTW) maar SDN leden krijgen 5%korting als ze bij bestelling hun SDN lidmaatschapnummervermelden (achter je naam bijvoorbeeld). In dit boek o.a.een behandeling over het gebruik van Delphi Prism voorMonoTouch waarmee mobiele toepassingen te maken zijnvoor de iPad, iPhone en iPod Touch bijvoorbeeld.

Delphi 64-bit Compiler PreviewDit jaar is het zover: de Delphi 64-bit compiler komt beschikbaar. Zie http://www.embarcadero.com/products/delphi/64-bit voor meer informatie, en de mogelijkheid omje aan te melden voor de 64-bit beta (geregistreerde ge-bruikers van Delphi XE hebben hierbij voorrang overigens).Er is een Delphi 64-bit Compiler Sneak Preview video, ener zullen binnenkort verschillende artikelen verschijnen overde mogelijkheden van de nieuwe native 64-bit compiler.

SDN > Update

Delphi NieuwsDe afgelopen maanden zijn er verschillende ontwikkelingen en technischepublicaties op het gebied van Delphi geweest. Hierbij een overzicht van hetmeest in het oog springende en interessante nieuws.

Embarcadero heeft weer een speci-ale actie op touw gezet voor hettweede kwartaal. Als je nu een up-grade of New User licentie van Del-phi XE koopt, dan krijg je RADStudio XE geleverd. Daarin zit naastDelphi ook C++Builder, Delphi Prismen RadPHP. Deze actie geldt tot heteinde van het kwartaal (dus tot don-derdag 30 juni 2011, 23:59 uur).

Tot 31 mei 2011 kun je van iedere versie vanDelphi een upgrade naar Delphi XE kopen(en RAD Studio XE krijgen), maar vanaf 1juni 2011 moet je minimaal Delphi 2007,2009 of 2010 geregistreerd hebben om inaanmerking te komen voor de upgrade naarDelphi XE (wie dan nog van een oudere versie van Delphi komt zal een echte NewUser licentie moeten aanschaffen).

Wie de Delphi XE koopt via Bob Swart Training & Consultancy – en dus RAD Studio XE geleverd krijgt, ontvangt daar-naast ook de Delphi XE Development Essentials en Delphi Prism DevelopmentEssentials cursusboeken van Bob Swart inPDF formaat (bijna 500 pagina’s met nuttige documentatie over deze versies van Delphi).

Na installatie en registratie van Delphi XEkun je overigens ook oudere versiesdownloaden en gebruiken, zoals Delphi2010, 2009, 2007 (de laatste niet-Unicodeversie) en zelfs Delphi 7. Ook krijgen DelphiXE ontwikkelaars voorrang voor de 64-bitsbeta.Zie http://www.delphixe.nl voor meerinformatie.

Buy Delphi XE - Get RAD studio XE

magazine voor software development 49

Page 50: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET Eric Roosendaal

Visual Basic .NET kent een groot aantal mogelijkheden om datum entijd te formatteren. Laat ons eerst de huidige tijd ophalen, bijvoorbeeldvia

Dim dt As DateTime = DateTime.Now

U kunt ook direct de functie "Now" gebruiken. Het verschil is dat dekorte versie in de Visual Basic bibliotheek zit, terwijl DateTime.Now direct uit het framework komt. Het resultaat is natuurlijk hetzelfde.

Als u een datum of tijd wilt afbeelden kunt u een van de vier ingebouwde functies van het DateTime object gebruiken. Deze leve-ren uitvoer die in veel gevallen voldoet:

Console.WriteLine(dt.ToShortTimeString)

Console.WriteLine(dt.ToLongTimeString)

Console.WriteLine(dt.ToShortDateString)

Console.WriteLine(dt.ToLongDateString)

En de bijbehorende uitvoer is

3:11 PM

15:11:31

14-10-2008

Tuesday, October 14, 2008

De exacte uitvoer hangt hierbij af van de taalinstellingen in het ControlPanel.

Als u de uitvoer daarentegen liever zelf in de hand houdt kunt u ookde ToString() methode van DateTime gebruiken. U geeft dan een for-matstring mee om de gewenste uitvoer te verkrijgen. Als u in plaatsvan dubbele punten liever streepjes of spaties hebt is dat eenvoudig:

Console.WriteLine(dt.ToString("hh-mm-ss"))

Console.WriteLine(dt.ToString("HH mm"))

03-18-52

15 18

U ziet hieraan ook meteen dat 'hh' de uitvoer in uren in 12-uurs notatie oplevert, terwijl 'HH' de 24-uurs notatie produceert.

Ook een datum kan eenvoudig via een formatstring worden bepaald:

Console.WriteLine(dt.ToString("dd - MM - yyyy"))

14 - 10 – 2008

Datums en tijden afbeeldenMet de uitvoer van dagen en maanden is iets vreemds aan de hand.

Een dubbele d levert de dag op, maar met 'dddd' krijgt u de weekdagterwijl 'ddd' de tweeletterafkorting oplevert.Als u een enkele M gebruikt krijgt u dag én maand, dubbel M is hetmaandnummer, drie M'en de drieletterafkorting en neemt u er vier dankomt de complete naam naar voren:

Console.WriteLine(dt.ToString("M"))

Console.WriteLine(dt.ToString("MM"))

Console.WriteLine(dt.ToString("MMM"))

Console.WriteLine(dt.ToString("MMMM"))

October 14

10

Oct

October

Allemaal heel aardig, maar wat te doen als u de naam van de maandliever in een andere taal wilt afdrukken. Geen probleem? Importeerbovenaan eerst even de System.Globalization namespace en gebruikdan een CultureInfo object voor de taal, als volgt:

Console.WriteLine(dt.ToString( _

"dddd dd MMMM yyyy", New CultureInfo("nl-NL")))

dinsdag 14 oktober 2008

U kunt dus zowel datum als tijd krijgen in elk formaat en in elke taal dieu wenst. •

MAGAZINE

50

Eric Roosendaal

Eric Roosendaal is trainer bij

Compu'Train. Hij is afgestudeerd in

Scheikunde, maar eind jaren '80

geswitcht naar IT, met name naar

Development. Sinds medio jaren '90

in dienst van Compu'Train als spe-

cialist voor alle programmeertalen,

de laatste jaren met name .NET (VB

en C#). Hij is Microsoft Certified

Trainer, gecertificeerd sinds 1995. Eric is te bereiken via

[email protected].

Page 51: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

Stefan Kamphuis

Wat is Visual Studio LightSwitchVisual Studio LightSwitch is een nieuw product van Microsoft in de Visual Studio familie. Het zal als standalone product worden uitgebracht (ten tijde van het schrijven van dit artikel is de release- datum nog niet vrijgegeven) en als zodanig worden gepositioneerdtussen Visual Studio Express (dat gratis is) en Visual Studio Professi-onal (dat ongeveer €500 kost).

Voor gebruikers die al gebruik maken van Visual Studio Professional(of hoger), zal LightSwitch als project template in Visual Studio wordengeïnstalleerd.

Fig. 1: LightSwitch als project template in Visual Studio

FlexibiliteitVisual Studio LightSwitch is vooral goed in Forms-Over-Data businesstoepassingen. Het loodgieterswerk in de applicatie (waaronderschermnavigatie, autorisatie, communicatie met servicelaag, valida-ties, …) kan aan LightSwitch worden overgelaten. “Kán,” want op veelpaatsen biedt LightSwitch de mogelijkheid om de functionaliteit van deapplicatie aan te passen en uit te breiden. Hiervoor kan eigen codeworden gebruikt, maar ook uitbreidingen die door andere ontwikke-laars zijn gemaakt. LightSwitch biedt ook de mogelijkheid om deze

uitbreidingen te ontwikkelen en deze via de Gallery beschikbaar testellen.

Terwijl LightSwitch is gemaakt om de ontwikkelaar zo veel mogelijkwerk uit handen te nemen, legt het de ontwikkelaar tegelijkertijd nauwelijks technische beperkingen op. Feitelijk zijn de voornaamstebeperkingen het kennisniveau van de ontwikkelaar zelf, en de beschikbare tijd om tot een oplossing te komen (of de bereidheid omdie tijd te investeren).

DoelgroepenMet LightSwitch mikt Microsoft of verschillende niveaus ontwikkelaars:1. Basisniveau: de ontwikkelaar die nu misschien MS Access gebruiktom toepassingen te maken. Deze ontwikkelaar kan met de Light -Switch Designer prima uit de voeten om 90% van zijn toepassing temaken. De overige 10% zal bestaan uit relatief eenvoudige stukjescode op door LightSwitch aangegeven plaatsen, zoals speciale validatieregels. Hij zal gebruik maken van de data designer voor hetontwerp van zijn database, of zal een bestaande database gebruiken.Schermen maakt hij in de Schermdesigner en eventueel zal hij beschikbare uitbreidingen voor LightSwitch toepassen;2. Gevorderd niveau: de ontwikkelaar die wel aardig uit de voeten kanmet VB.NET of C#, zal daarnaast in staat zijn eigengemaakte com-ponenten (bijvoorbeeld voor business logica) te gebruiken vanuit zijnLightSwitch toepassing;3. “Expert” niveau: verder gevorderde ontwikkelaars zullen de extensionpoints van LightSwitch ten volle kunnen benutten door eigenSilverLight controls te maken en gebruiken en op andere punten het uiterlijk en gedrag van de LightSwitch toepassing naar eigen hand kun-nen zetten.

Het licht inschakelenVisual Studio LightSwitch helpt de ontwikkelaar heel snel op weg naarresultaat. Ik behandel hier kort de eerste stappen op weg naar eenLightSwitch applicatie, wil je meer weten, kijk dan bij de links aan heteinde van dit artikel.

Visual Studio LightSwitch:een intro voor ontwikkelaars

Begin 2011 heeft Microsoft de eerste beta van VS LightSwitch met Go-Live licentie gelanceerd,een nieuw product in de Visual Studio familie, waarmee razendsnel zowel web- als desktop SilverLight "Line of Business" applicaties kunnen worden gemaakt. Hoewel de doelgroep vanVS LightSwitch niet primair bestaat uit ard-core .net developers, zal het ook voor deze groepzeker waardevol kunnen zijn om de mogelijkheden en beperkingen van LightSwitch te lerenkennen.

magazine voor software development 51

.NET

LightSwitch biedt de mogelijkheid om uitbreidingen van andere ontwikkelaars te gebruiken

Iemand met beperkte ontwikkelcapa-citeiten kan met LightSwitch bijzondergoede resultaten halen

Page 52: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

Bij het ontwikkelen van een LightSwitch applicatie staat de Light-Switch designer centraal. Dat wordt al direct duidelijk wanneer eennieuw project wordt gestart (afbeelding 2).

Fig. 2: een nieuw LightSwitch project

Ook het Solution Explorer window is belangrijk in LightSwitch: dezewordt standaard geopend in zogenaamde “Logical View” en geeft dande logische structuur van de applicatie weer in plaats van de fysiekebestanden.Met behulp van de designer wordt eerst een DataSourcetoegevoegd aan het project. De entiteiten kunnen in de Data SourceDesigner worden ingevoerd, maar er kan ook een bestaande data-source worden toegevoegd (zoals een SQL Server database, RIA Ser-vice) of SharePoint Site.Vervolgens kunnen schermen aan het project worden toegevoegd.Voor een scherm is keuze uit verschillende templates, zoals detail-scherm, zoekscherm en nieuwe invoer (Afbeelding 3).

Fig. 3: Een scherm toevoegen

Is een scherm eenmaal toegevoegd, dan blijkt de LightSwitch Desig-ner ook uitgerust met mogelijkheden om verregaande aanpassingente doen aan het scherm. Dit is overigens ook de enige manier: on-danks dat een LightSwitch applicatie een Silverlight “voorkant” heeft,is er geen Xaml te vinden in het project.

Binnen het project helpt LightSwitch de ontwikkelaar op weg om opde juiste plaatsen de nodige aanpassingen te kunnen programmeren,via het “Write Code” tool (Afbeelding 4):

Deployment mogelijkhedenPas wanneer het moment van deployment is aangebroken, wordt ietsmeer duidelijk van het eindresultaat van een LightSwitch applicatie De uiteindelijke applicatie is een SilverLight applicatie en kan als zodanig binnen de browser of als desktopapplicatie worden gecom-pileerd. Naast de client applicatie is er de Application Server.

Fig. 4: Write Code

Fig. 5: Deployment mogelijkheden van LightSwitch

Er wordt dus een “gewoon” 3-lagen architectuur toegepast: de clientapplicatie (Presentation) gebruikt een servicelaag Logic) waarin busi-nesslogica wordt afgehandeld en de servicelaag communiceert met dedatalaag (Storage). (Afbeelding 6)

Fig. 6: Architectuur van een LightSwitch applicatie

Er kan worden gekozen om de Servicelaag op een aparte server of demachine van een gebruiker te laten draaien: het is dus niet verplicht omeen aparte server te hebben om LightSwitch te kunnen gebruiken.Een omgeving met slechts werkplek-pc’s of zelfs een enkele pc, volstaat.

Proven technologyHoewel door een LightSwitch applicatie enkele specifieke assembliesworden gebruikt, zijn er geen nieuwe technologieën aan de spectrumvan Microsoft toegevoegd. Er wordt gebruik gemaakt van veel verschillende, maar allemaal al langer bestaande, technologieën (Afbeelding ). Vermoedelijk zou mijn vader – die zich voornamelijk be-weegt in de wereld van mainframe systemen – hartelijk lachen om destelling dat het hier proven technology betreft, maar feit is in iedergeval, dat niets specifiek voor LightSwitch is ontwikkeld.

MAGAZINE

52

Deployment type van een LightSwitchapplicatie kies je pas aan het eind

Page 53: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

.NET

Fig. 7: LightSwitch gebruikt proven technology

Extension PointsVoor de meer gevorderde ontwikkelaar zullen de beschikbare exten-sion points van LightSwitch met name interressant zijn. Met ExtensionPoints worden de mogelijkheden bedoeld waar delen van LightSwitchkunnen worden vervangen door (of aangevuld met) componenten diedoor anderen gemaakt zijn. De beschikbare extension points in Light -Switch zijn:• Business Type – standaard zijn al types als “E-mailadres” en

“Telefoonnummer” beschikbaar, eigen type kunnen dus gemaakt worden;

• Screen Template – hiermee kan een nieuw”schermtype worden toegevoegd aan de dialoog bij afbeelding 3;

• Control –Silverlight controls kunnen als Extension worden toegevoegd zodat deze gebruikt kunnen worden in de Screen Designer;

• Shell – de Shell is verantwoordelijk voor onder andere het in- en uitloggen en de navigatie door de schermen. Een Shell Extension zou bijvoorbeeld gemaakt kunnen worden om met touch interface met swype te kunnen faciliteren;

• Theme – middels een theme extension kan de applicatie van eigenlettertypes en kleurenschema’s worden voorzien;

• DataSource – met een DataSource extension kan gezorgd wordendat een LightSwitch applicatie met alternatieve Data Sources kancommuniceren dan SQL Server, SharePoint of RIA Services.

ConclusieHoewel Visual Studio LightSwitch niet direct bedoeld is voor de gevorderde ontwikkelaar denk ik dat velen er toch veel plezier van kunnen hebben. Zelf denk ik dan bijvoorbeeld aan webapplicaties,waarbij het vooral draait om de bezoeker van de website. Voor het on-derhoud van de gegevens die aan de dergelijke applicatie ten grond-slag liggen zal ik vanaf nu zeker overwegen om LightSwitch in te zetten.

Links• Visual Studio LightSwitch Developer Center: http://msdn.microsoft.com/lightswitchLightSwitch eam Blog: http://blogs.msdn.com/b/lightswitchBlog Beth Massi: http://blogs.msdn.com/b/bethmassi/ •

magazine voor software development 53

Stefan Kamphuis

Stefan werkt als zelfstandig .net

consultant en maakt onderdeel uit

van 40Fingers. Hij houdt zich al

ajren voornamelijk bezig met soft-

ware devleopment op het .net plat-

form. Als ASP.NET MVP en

DotNetNuke Core Team lid houdt hij

zich bij voorkeur bezig met web development. Sinds januari is hij

tevens LightSwitch insider.

The one-stop company for .NET development

4DotNet bv Paradijsweg 2 7942 HB Meppel t. 0522-24 14 48 [email protected] www.4dotnet.nlTEST CENTER

In de IT gaat alles automatisch, maar niets vanzelf!

Visual Studio 2010

MaatwerkIn-company

Microsoft DynamicsSilverlight

Wij bieden u alle tools om uw werk makkelijker te maken.

.NET ontwikkelaars

.NET Architectuur

op c-sthe oneTThe one

y for .NET devompanop c

elopment T dev velopment

op c-sthe oneTThe one

y for .NET devompanop c

elopment T dev velopment

otNet b4D v otNet b eg 2 adijswar P 7942 HB M eppel 7942 HB M . 0522-24 14 48 t inf .nlo@4dotnet f fo@4dotnet .nl.4dotnetww wTEST CENTER

.nl

Page 54: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

Stand van zakenWindows Phone 7platform

SDN > Update

Het Office Labs team heeft de website Ribbon Hero 2(http://www.ribbonhero.com) gelanceerd. Ribbon Hero is een spelom de verschillende functies van Excel, Word, PowerPoint en OneNote duidelijker te maken. Ik heb het nog niet geprobeerd,maar lijkt wel leuk!

Ribbon Hero 2

Op de DevDays op 28 april heeft Microsoft een persconferentie gegeven over de stand van zaken op het Windows 7 platform. Hierbijdeed Matthijs Hoekstra, evangelist voor dit platform de volgende aankondigingen:• Sinds de lancering tot begin april 2011 waren er 13.000 applicaties

in de Windows MarketPlace• De 580 geregistreerde Nederlandse developers hebben 175

applicaties voor de internationale marketplace geproduceerd• De gemiddelde gebruiker download ongeveer 12 apps per maand

De komende update voor het Windows 7 platform heet Mango enzal in de herfst van 2011 gelanceerd worden. Met deze update zal ook de Nederlandse Marketplace voor Windows Phone 7 gelanceerd worden.

Ben Riga, Technical Evangelist voor Windows 7 Phone lichtte deMango Update verder toe. Naast zaken zoals verbeterde multitasking,nieuwe API’s en database toegang voor lokale persistentie vielen tweezaken op:• De mogelijkheid om XNA en Silverlight te mixen. Tot nu toe moest

je als ontwikkelaar kiezen voor het een of het andere op het

Windows 7 ontwikkelplatform. XNA is goed in 3D maar een buttonop het scherm, daar is Silverlight weer een stuk beter in. Nu kun jede beste eigenschappen combineren in het ontwikkelplatform. Dedemo van een 3D tank zag er ook zeer vloeiend uit (Halo lijkt mijdan ook een kwestie van tijd (red)).

• Daarnaast werd deeplinking (ook wel live tiles) gedemonstreerd. Dit maakt het mogelijk om direct naar een scherm van de app te linken en deze op de homescreen te zetten met alle state info vandien. Ditwerd gedemonstreerd aan de hand van een app van vliegmaat-schappij Quantas waar gedeeplinked werd naar de vlucht die geboekt was. Constant werd geupdate info over de vlucht getoond maar ook de GPS was ingeschakeld om te kijken of je de vlucht nog wel kon halen. Deeplinking is een nieuwe feature op het mobieleplatform.

De Mango update biedt dan ook veel nieuwe zaken voor consumersen developers. De zakelijke gebruikers komen er wat bekaaid af. Zakelijke apps moeten nog steeds via de Marketplace en uitgebreidegrouppolicies missen nog steeds. De focus voor het Windows 7 plat-form lijkt dan ook nog steeds op de consumentenmarkt te liggen.

MAGAZINE

54

Page 55: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

Impressie DevDays 28 april 2011 Voor het eerst zijn Technet Live en de DevDays samengevoegd onder de vlag van deTechDays. Technet Live en de DevDays vinden nog wel steeds op verschillende dagenplaats, respectievelijk 26-27 april en 28-29 april. Zelf heb ik de DevDays bezocht opde 28ste april.

Wat direct opviel bij de keynote was dat de mensen op de trappen zaten. Ik dacht bij mijzelf dat we nu in het tijdperkvan de virtuele conferentie waren aangeland. Getuige de samengepakte massa in de keynote ruimte is de behoefteaan het samenzijn nog steeds groot. Doe daar in de keynote nog een schepje bovenop met NuGet (een package ma-nagement systeem voor 3rd party opensource bibliotheken, zie ook nuget.org) en de omarming van opensource doorintegratie in Visual Studio. Het beloofde een interessante dag te worden.Nog overpeinzend liep ik de Ask the Experts binnen en kwam daar de SharePoint MVP’s Miriam van Olst en Marianne van Wanrooij tegen. Aangezien zij mede organisatoren van de eerste SharePoint Saturday in Nederlandwaren, vroeg ik of zij ook dachten dat de virtuele conferentie de fysieke conferentie gaat vervangen. Het antwoord waseen duidelijk nee; het sociale aspect van een fysieke conferentie kan je niet vervangen en een fysieke conferentiehoud je focus beter op het onderwerp dan een virtuele conferentie. Als je dan ook zo staat te keuvelen aan de Ask The Experts tafel dan kom je zo weer nieuwe mensen tegen. Zo ontmoette ik daar Gerard Verbrugge (@gervercom die ik al op twitter bleek te volgen…) en Dennis Mulder beide actief in de architecten evangelisatie van Microsoft. Zo bleek het Microsoft Certified Architect (MCA) de weg naar deuitgang gevonden te hebben en wordt nu de IASA omarmd (zie ook iasaglobal.org). Wat mij namelijk ook bezighoudtis wat voor set aan vaardigheden neemt een ‘goede’ architect nu mee en hoe toon je aan dat je die vaardigheden hebt.Weer zo’n toevalligheid die je op een fysieke conferentie ontmoet.

Natuurlijk heb ik ook nog wat sessies meegenomen. Beth Massi kwam vertellen over beta 2 voor LightSwitch. Light -Switch is plugin in Visual Studio 2010 waarmee je snel CRUD (create, read, update, delete) achtige applicaties kun-nen ontwikkelen door databases, queries en schermen te modelleren in Visual Studio. No code en gericht op een snellerelease. Als je echt moet dan kan je ook nog code toevoegen en luister goed: “don’t code, search for it”. Het levenis nu eenmaal te kort om reguliere expressies te bedenken (http://regexlib.com/). Daarna toch even een SharePoint sessie van Jan Tielens meegepakt. De demo goden waren niet met hem. De deepdive sandboxed solutions strandde bijna in een sandbox solution validator die niet gedeinstalleerd wilde worden waardoor het onmogelijk werd zo’n sandboxed solution uitte rollen op zijn SharePoint omgeving. Soms zijn de demo goden gewoon niet thuis. Gelukkig kwam ook dat welweer goed, pak je toch gewoon even een nieuwe Share-Point omgeving.Dat sociale aspect en de focus die je voor die dag tocheven bij de onderwerpen kunt houden die jou aanspreken,dat is wat fysieke conferenties interessant maakt. Ik wil zein ieder geval niet missen en getuigde opkomst velen vanjullie ook niet. Ik hoop jullie dan ook snel te ontmoeten opeen SDN Event!

Roel Hans Bethlehem

magazine voor software development 55

SDN > Update

Page 56: SDN Magazine 109Visual Studio LightSwitch: een intro voor ontwikkelaars < SOFTWARE DEVELOPMENT NETWORK MAGAZINE 109 ISSN: 2211-6486 =R JDDW GDW WHJHQZRRUGLJ %HQ MH HHQPDDO HUYDUHQ

Volgende maand werk jij bij Macaw.

www.echtleukwerk.nl, @_macaw [email protected]

Wat doe jij volgende maand?

.NET DevelopersSharePoint DevelopersSharePoint ConsultantsProject Managers

t doe jij vaW

t doe jij v

ende maand?olgt doe jij v

ende maand?

ende maand?

SharShar

elv.NET De

ende maand wolgV

soper

de maand w

oje Pr

aw@_mac

recruitmen

tleukwerk.nl, .echww.echww .nlaww.nlt@mac