Let There Be Code RSS 2.0
# Tuesday, July 03, 2012

Dans cet article en 3 parties (eh oui, finalement c’est 3 parties, et non 2…), je vous propose de découvrir comment utiliser le contrôle Bing Maps ainsi que les services REST Bing Maps dans une application Metro Windows 8 en XAML/C#.

Concernant la documentation, vous retrouvez sur la MSDN une section consacrée à l’utilisation du contrôle Bing Maps dans une application Metro et une autre section consacrée à l’utilisation des services REST Bing Maps.

Afin d’utiliser les services BingMaps, vous devez vous procurer une clé d’accès à ces services. Pour créer cette clé, ça se passe sur le portail BingMaps et voici la marche à suivre.

Maintenant que nous avons tous les prérequis, nous pouvons commencer…

Dans cette série d’article, nous allons découvrir :

  • comment insérer et manipuler une carte BingMaps dans une application Metro Windows 8 :
    • Changer de vue
    • Afficher le trafic
    • Centrer la carte par rapport à des coordonnées
    • Afficher, customiser, interagir avec des points d’intérêts comme ma localisation, des étapes d’un itinéraire, des incidents
  • comment utiliser les services REST afin de :
    • rechercher la localisation d’une adresse,
    • retrouver un itinéraire
    • retrouver la liste des incidents d’une zone

Voici le résultat que nous obtiendrons :

bingmaps1

 

Pour commencer, ouvrez Visual Studio 2012, et créez un nouveau projet vide de type Windows Metro style :

bingmaps2

2ème étape, il faut ajouter une référence vers le SDK Bing Maps, que vous avez préalablement installé…

bingmaps3

Une fois la référence ajoutée, si vous compilez le projet vous avez une erreur qui indique que la compilation “Any CPU” n’est pas supportée, ainsi qu’un Waring indiquant qu’il faut ajouter une référence vers Microsoft.VCLibs.

Allez dans les propriétés de compilation afin de sélectionner une nouvelle architecture cible, x86 par exemple, puis ajouter une référence vers l’assembly Microsoft.VCLibs qui correspond au Microsoft Visual C++ Runtime Package.

Nous sommes maintenant prêts à intégrer une carte dans notre application!

Ouvrez la page MainPage.xaml et ajoutez un contrôle de type Map à l’intérieur du contrôle Grid :

bingmaps4

Avant de pouvoir exécuter votre application, il vous faut tout d’abord nommer le contrôle Map et lui fournir la clé que vous avez précédemment créée :

  1. <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
  2.     <Maps:Map x:Name="myMaps" Credentials="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" />
  3. Grid>

 

Une fois ces informations renseignées, vous pouvez exécutez l’application. Le contrôle Map intègre de base la navigation à la souris, au clavier et au touch :

bingmaps5

Pour une description complète de la classe Map, je vous invite à consulter sa page MSDN associée.

Voici ici un exemple qui permet, depuis le code XAML :

  • d’afficher la carte en vue aérienne,
  • d’afficher les informations de trafic,
  • de masquer la légende de l’échelle,
  • d’initialiser la carte avec un zoom de niveau 17
  • de centrer la carte sur le point de coordonnées (48.830617,  2.261645)
  1.     <Maps:Map x:Name="myMaps"
  2.               Credentials="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  3.               MapType="Aerial"
  4.               ShowTraffic="True"
  5.               ShowScaleBar="False"
  6.               ZoomLevel="17"
  7.               >
  8.         <Maps:Map.Center>
  9.             <Maps:Location Latitude="48.830617" Longitude="2.261645" />
  10.         Maps:Map.Center>
  11.     Maps:Map>
  12. Grid>

 

Maintenant, nous allons ajouter une AppBar qui va permettre à l’utilisateur :

  • de modifier le type de carte,
  • afficher/masquer le trafic,
  • centrer la carte sur la localisation de l’utilisateur et afficher un point d’intérêt

Tout d’abord, il faut ajouter les styles ci-dessous dans les ressources de la page. Ces styles vont nous permettre d’avoir de jolis boutons Metro pour notre barre d’application!

  1. <Style x:Key="TrafficAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
  2.     <Setter Property="AutomationProperties.AutomationId" Value="TrafficAppBarButton"/>
  3.     <Setter Property="AutomationProperties.Name" Value="Traffic"/>
  4.     <Setter Property="Content" Value="⚠"/>
  5. Style>
  6. <Style x:Key="AerialAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
  7.     <Setter Property="AutomationProperties.AutomationId" Value="AerialAppBarButton"/>
  8.     <Setter Property="AutomationProperties.Name" Value="Aerial"/>
  9.     <Setter Property="Content" Value="✈"/>
  10. Style>
  11. <Style x:Key="RoadAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
  12.     <Setter Property="AutomationProperties.AutomationId" Value="RoadAppBarButton"/>
  13.     <Setter Property="AutomationProperties.Name" Value="Road"/>
  14.     <Setter Property="Content" Value="⛙"/>
  15. Style>
  16. <Style x:Key="BirdseyeAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
  17.     <Setter Property="AutomationProperties.AutomationId" Value="BirdseyeAppBarButton"/>
  18.     <Setter Property="AutomationProperties.Name" Value="Birdseye"/>
  19.     <Setter Property="Content" Value=""/>
  20. Style>
  21. <Style x:Key="MyLocationAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
  22.     <Setter Property="AutomationProperties.AutomationId" Value="MyLocationAppBarButton"/>
  23.     <Setter Property="AutomationProperties.Name" Value="My Location"/>
  24.     <Setter Property="Content" Value=""/>
  25. Style>

 

bingmaps6

Et enfin, voici le code l’AppBar à ajouter dans la MainPage :

  1. <Page.BottomAppBar>
  2.     <AppBar>
  3.         <Grid>
  4.             <StackPanel Orientation="Horizontal">
  5.                 <Button Click="btnTraffic_Click" Style="{StaticResource TrafficAppBarButtonStyle}" />
  6.                 <Button Click="btnAerial_Click" Style="{StaticResource AerialAppBarButtonStyle}" />
  7.                 <Button Click="btnRoad_Click" Style="{StaticResource RoadAppBarButtonStyle}" />
  8.                 <Button Click="btnBirdseye_Click" Style="{StaticResource BirdseyeAppBarButtonStyle}" />
  9.             StackPanel>
  10.             <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
  11.                 <Button Click="btnMyLocation_Click" Style="{StaticResource MyLocationAppBarButtonStyle}" />
  12.             StackPanel>
  13.         Grid>
  14.     AppBar>
  15. Page.BottomAppBar>

 

Pour les changements de vue de la carte, il suffit de modifier la propriété MapType du contrôle Map et de lui affecter une valeur de l’énumération Bing.Maps.MapType comme ceci :

  1. private void btnAerial_Click(object sender, RoutedEventArgs e)
  2. {
  3.     myMaps.MapType = Bing.Maps.MapType.Aerial;
  4. }
  5.  
  6. private void btnRoad_Click(object sender, RoutedEventArgs e)
  7. {
  8.     myMaps.MapType = Bing.Maps.MapType.Road;
  9. }
  10.  
  11. private void btnBirdseye_Click(object sender, RoutedEventArgs e)
  12. {
  13.     myMaps.MapType = Bing.Maps.MapType.Birdseye;
  14. }

 

Pour afficher/masquer le trafic, il suffit de modifier la valeur de la propriété ShowTraffic :

  1. private void btnTraffic_Click(object sender, RoutedEventArgs e)
  2. {
  3.     myMaps.ShowTraffic = !myMaps.ShowTraffic;
  4. }

 

Pour utiliser l’API de géolocalisation, il faut tout d’abord autoriser l’application à le faire. Depuis l’explorateur de solution, ouvrez le fichier Package.appxmanifest, puis dans l’onglet Capabilities, cochez la case Location :

bingmaps7

 

Pour plus d’informations sur la notion de Capabilities, je vous invite à consulter l’article correspondant sur la MSDN.

Pour utiliser l’API de géolocalisation, nous avons besoin d’une instance de la classe Geolocator dans l’espace de nom Windows.Devices.Geolocation. Cette classe possède une propriété LocationStatus que nous pouvons utiliser de cette manière :

  1. var geolocator = new Geolocator();
  2. if (geolocator.LocationStatus == PositionStatus.NotAvailable)
  3. {
  4.     MessageDialog dialog = new MessageDialog("Location service not available");
  5.     dialog.ShowAsync();
  6.     return;
  7. }

 

Ensuite, pour localiser l’utilisateur et ainsi récupérer les coordonnées géographiques, il faut utiliser la méthode GetGeopositionAsync comme ceci :

  1. Geoposition position = await geolocator.GetGeopositionAsync();

 

La méthode GetGeopositionAsync retourne un objet de type GeoPosition (ou plutôt IAsyncOperation), grâce auquel nous pouvons récupérer la latitude et la longitude.

Pour utiliser des coordonnées géographiques sur le contrôle Map, nous avons besoin d’un objet de type Location de l’espace de nom Bing.Maps.Location :

  1. Location location = new Bing.Maps.Location(position.Coordinate.Latitude, position.Coordinate.Longitude);

Un point d’intérêt sur un contrôle de type Map est représenté par un objet de type Pushpin, qu’il faut positionner via la classe MapLayer, puis l’ajouter  à la collection Children du contrôle Map :

  1. Pushpin pushpin = new Pushpin() { Text = "!" };
  2. MapLayer.SetPosition(pushpin, location);
  3. myMaps.Children.Add(pushpin);

 

Enfin, nous pouvons centrer la carte sur ce point d’intérêt et y ajouter un tooltip :

  1. ToolTipService.SetToolTip(pushpin, "My location");
  2. myMaps.SetView(location, 12);

 

Ici nous utilisons la méthode SetView de l’objet Map pour centrer la carte sur les coordonnées géographiques spécifiées. Le second paramètre permet de définir le niveau de zoom. Le contrôle animera la carte automatiquement pour obtenir ce niveau de zoom et cette position.

Voici le code complet de la méthode de recherche de localisation :

  1.     private async void btnMyLocation_Click(object sender, RoutedEventArgs e)
  2.     {
  3.         Geoposition position = null;
  4.         try
  5.         {
  6.             var geolocator = new Geolocator();
  7.             if (geolocator.LocationStatus == PositionStatus.NotAvailable)
  8.             {
  9.                 MessageDialog dialog = new MessageDialog("Location service not available");
  10.                 dialog.ShowAsync();
  11.                 return;
  12.             }
  13.             position = await geolocator.GetGeopositionAsync();
  14.         }
  15.         catch
  16.         {
  17.             MessageDialog dialog = new MessageDialog("Unable to find your location");
  18.             dialog.ShowAsync();
  19.             return;
  20.         }
  21.  
  22.         if (position == null)
  23.             return;
  24.  
  25.         Location location = new Bing.Maps.Location(position.Coordinate.Latitude, position.Coordinate.Longitude);
  26.         Pushpin pushpin = new Pushpin() { Text = "!" };
  27.         MapLayer.SetPosition(pushpin, location);
  28.         myMaps.Children.Add(pushpin);
  29.         ToolTipService.SetToolTip(pushpin, "My location");
  30.         myMaps.SetView(location, 12);
  31.     }
  32. }

bingmaps8

Dans la 2ème et 3ème partie de cet article, nous découvrirons les services REST Bing Maps qui vont nous permettre d’intégrer la recherche d’adresse, d’itinéraire et d’incidents.

En attendant, si vous avez besoin de plus de détails sur certaines notions non détaillées dans cet article (mots clés async/await, notion de style et d’AppBar…) je vous invite à consulter les articles présents sur le site de la communautés des Développeurs Windows 8.

Et si vous avez des questions sur le développement Windows 8, n’hésitez pas à les poster sur le groupe Facebook de la communauté Windows 8.

Tuesday, July 03, 2012 1:56:31 PM (Romance Daylight Time, UTC+02:00)  #    Voir Commentaires
BingMaps | Windows 8
# Wednesday, June 20, 2012

Bing_Maps_blue20logo1-300x82BingMaps met à disposition des développeurs des services et des API leurs permettant d’intégrer des fonctionnalités de géolocalisation dans leurs applications Web, Silverlight, WPF, Metro…

Je vous invite demain, jeudi 21 juin, à 12h30, à La Cantine de Toulouse pour un Techlunch qui vous fera découvrir ces différents services. Je vous présenterai notamment l’intégration des services Bing Maps dans une application Windows 8 Metro.

Il n’est pas trop tard pour vous inscrire!

Wednesday, June 20, 2012 10:56:39 AM (Romance Daylight Time, UTC+02:00)  #    Voir Commentaires
BingMaps | Windows 8
# Sunday, June 10, 2012

Vendredi Microsoft a dévoilé sa nouvelle offre autour des services Windows Azure avec notamment une offre de type IAAS qui vient concurrencer l’offre EC2 d’Amazon.

Avec les services de machine virtuelle, il est maintenant possible de déployer son serveur SharePoint, SQL Server ou encore Linux dans le Cloud de Microsoft, car ces machines virtuelles sont persistantes, contrairement aux VM Roles de l’offre PAAS. Avec un nouveau portail de gestion de ses services Azure développé en HTML5, il est possible de déployer un serveur Linux ou un Windows Server 2012 en quelques secondes et de bénéficier de l’élasticité du Cloud Computing.

La création d’une machine virtuelle peut se fait à partir d’un catalogue (SQL Server 2012, Windows Server 2008 R2, 2012, CentOS, SUSE, Ubuntu, OpenSUSE) ou à partir d’un VHD en votre possession.

NewPortalVM2

 

Microsoft a également annoncé une offre d’hébergement de site Web avec des technologies telles que ASP.NET, PHP, Node.js et MySQL. Il est également possible de créer un site web en quelques secondes grâce à un catalogue de solutions connues (WordPresse, Joomla!, DasBlog, DotNetNuke…) :

NewPortalWebSite2

 

A noter également l’abandon du portail Silverlight qui est remplacé par un portail HTML5 et une ergonomie revue au style Metro :

  NewPortal

Rendez-vous dans la section des fonctionnalités du site Windows Azure pour découvrir toutes les nouveautés des services de Cloud Computing de Microsoft (Services multimédias, Machine Virtuelle, Site Web, Décisionnel, Active Directory…).

Sunday, June 10, 2012 3:54:18 PM (Romance Daylight Time, UTC+02:00)  #    Voir Commentaires
Azure | Windows Azure
# Tuesday, June 05, 2012

logo

Ce weekend, Microsoft France a organisé un événement autour du développement Windows 8 à Paris, le DevKing 2012.

Au menu, l’accélérateur Windows 8, le concours BeMyApps, des Fast Code à n’en plus dormir.

Côté animation, de super burger, du Red Bull à volonté pour tenir éveillé, des séances massage, des DJs, des jeux vidéos…

Plus de 100 personnes de divers horizons, étudiants, éditeurs, SSII, tous des Geeks en somme, sont venus s’affronter et s’amuser à travers ces différents concours.

Les différentes applications que nous avons pu y voir sont vraiment de très bonne qualité, et laisse présager un MarketPlace Windows 8 de haute couture… A ce propos, si vous n’avez pas encore testé Windows 8, sachez que la Release Preview (équivalent de Release Candidate) de Windows 8 est disponible en téléchargement depuis la semaine dernière.

De notre côté, nous nous étions constitués une petite Team, pur produit du sud ouest, avec mes amis Seb, Cyril et Loïs. Objectif : prendre beaucoup de plaisir, mais aussi arracher la victoire sur au moins un Fast Code.

Objectif réussi!! Nous avons développé une application autour des services de Facebook que nous avons appelée : Incrustator. Je ne vous en dit pas plus, mais vous retrouverez certainement cette application sur le Market de Windows 8…

168504_3420918561207_1045283009_n

Tuesday, June 05, 2012 10:16:23 AM (Romance Daylight Time, UTC+02:00)  #    Voir Commentaires
Windows 8
# Thursday, March 22, 2012

image

Si vous n’avez pas encore installé Windows 8 et testé le développement d’applications Metro avec Visual Studio 11, alors le moment est venu !

Microsoft organise au mois d’avril un DevCamp dans 8 villes de France et nous aurons l’occasion de nous croiser dans le sud à Bordeaux (05/04), Toulouse (26/04) et Marseille (19/04).

Au programme de la journée, travaux pratiques sur le développement d’application Windows 8 avec Visual Studio 11, nous sommes là pour vous aider et répondre à vos questions.

L’évènement est gratuit, il vous faut venir avec votre PC et les prérequis installés, Windows 8 et Visual Studio 11, disponible en téléchargement ici : http://msdn.microsoft.com/fr-fr/windows/apps.

Rendez-vous sur le site des DevCamps pour vous inscrire dans votre ville : http://msdn.microsoft.com/fr-fr/devcamp

Thursday, March 22, 2012 4:29:35 PM (Romance Standard Time, UTC+01:00)  #    Voir Commentaires
Windows 8
# Friday, February 24, 2012

imageCette année je n’étais pas présent sur le parcours ALM mais sur le parcours Windows Phone.

Du côté ALM, Bewise a présenté un témoignage client, basée sur notre expérience projet avec Airbus. Cette session a été animé par Sacha Leroux (Bewise) et Christophe Vignolle, chargé de diriger les projets liés au marketing et à la vente d’avions chez Airbus.

Bien évidemment le parcours ALM proposait une multitude de sessions : Qualité logicielle, industrialisation, automatisation, tests fonctionnels, lab management... Vous pouviez également découvrir les nouveautés de Visual Studio 11 aux côtés de Florent Santin et Etienne Margraff.

 

Du côté du développement Windows Phone, avec Christopher Maneu nous avons présenter le développement d’une application métier/d’entreprise sur WP7.5. Pendant cette session nous avons démontré que les nouvelles fonctionnalités disponible avec Mango permettent de développer des applications pour les entreprises répondant à leurs contraintes (sécurité, confidentialité, modularité, saisie au Km…). Le tableau ci-dessous résume assez bien les besoins métiers et les API utilisées :

image

 

Et enfin, avec Sébastien Pertus, nous avons présenté l’utilisation d’une base de données SQL CE dans une application WP7.5. L’utilisation d’une base de données SQL CE sur Windows Phone nécessite le développement d’un modèle Linq To SQL en Code First. Nous avons également parlé des problématiques de déploiement, de migration et de synchronisation.

Le contenu des Techdays (webcast, slides) sera disponible courant mars, sur le site http://www.microsoft.com/france/mstechdays. Pour vous divertir je vous conseille fortement de visionner la session Coding4Fun (que l’on ne présente plus) mais également la session “The geek is in da house! Comment se faire la maison du futur avant les autres!” avec un David Catuhe en pleine forme!

Friday, February 24, 2012 11:05:34 AM (Romance Standard Time, UTC+01:00)  #    Voir Commentaires
Techdays 2012
# Friday, December 23, 2011

image

Si vous aussi vous rechercher une solution pour effectuer des recherches dans les fichiers de code source de TFS, voici un article qui devrait vous intéresser.

Dans cet article, nous mettons en place une solution d’indexation des source TFS basée sur la recherche Full Text de SQL Server et Team Build.

Friday, December 23, 2011 11:37:38 AM (Romance Standard Time, UTC+01:00)  #    Voir Commentaires
TFS
# Monday, June 27, 2011

imageSuite à la sortie du Kinect Windows SDK, Microsoft France organise demain, mardi 28 juin, un après midi du développement pour vous faire découvrir ce SDK. Alors si vous n’êtes pas encore inscrits, dépêchez-vous, ça se passe par ici.

Je présenterai pour ma part le pilotage d’une scène 3D temps réel avec Kinect.

Monday, June 27, 2011 5:02:28 PM (Romance Daylight Time, UTC+02:00)  #    Voir Commentaires
Kinect
# Friday, March 11, 2011

La problématique est dans le titre : comment peut-on lancer l’exécution d’une build à partir d’une autre ? D’autre part, j’aimerai également que la build maitre, attende la fin de l’exécution de la build enfant, et en fonction de son statut qu’elle s’arrête ou continue.

La première chose à faire est de développer une activité Workflow Foundation qui va permettre de lancer l’exécution d’une build :

  • Créer un nouveau projet de type Activity Library
  • Ajouter les références suivantes : Microsoft.TeamFoundation.Client, Microsoft.TeamFoundation.Build.Client
  • Ajouter une Code Activity. Voici le code de notre activité :
   1:  [BuildActivity(HostEnvironmentOption.All)]
   2:  public sealed class QueueDemoDefinitionBuildActivity : CodeActivity
   3:  {
   4:      private const string TfsCollectionUri = "http://localhost:8080/tfs/defaultcollection";
   5:      private const string BuildDefinitionName = "DemoDefinition";
   6:      private const string TeamProjectName = "Demo";
   7:   
   8:      public OutArgument<IQueuedBuild> Build { get; set; }
   9:   
  10:      protected override void Execute(CodeActivityContext context)
  11:      {
  12:          var collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(TfsCollectionUri));
  13:          collection.EnsureAuthenticated();
  14:   
  15:          IBuildServer buildServer = (IBuildServer)collection.GetService(typeof(IBuildServer));
  16:   
  17:   
  18:          var buildDefinition = buildServer.GetBuildDefinition(TeamProjectName, BuildDefinitionName);
  19:   
  20:   
  21:          var buildRequest = buildDefinition.CreateBuildRequest();
  22:   
  23:          var queuedBuild = buildServer.QueueBuild(buildRequest);
  24:          
  25:          Build.Set(context, queuedBuild);
  26:      }
  27:  }

 

Le principe est simple :

  • On récupère le service de build depuis la collection de projets.
  • On récupère ensuite la définition de la build.
  • Et enfin on met en file la build via la méthode QueueBuild.

Dans notre activité, on remarque le paramètre de sortie Build de type IQueuedBuild que l’on “set” à la fin de l’activité. Nous verrons par la suite à quoi il va servir.

Il ne reste plus qu’à compiler, à déployer notre assembly dans le source control et enfin d’indiquer au contrôleur de Build où se trouvent notre custom assembly.

Pour illustrer cet exemple, j’ai créé un nouveau template de build xaml dans lequel je fais simplement appel à ma nouvelle activité comme ceci :

image

Pour récupérer le paramètre de sortie de cette activité, il nous faut déclarer une variable au niveau de la séquence :

image

Ensuite dans les propriétés de l’activité QueueDemoDefinitionBuildActivity on récupére le paramètre de sortie dans notre variable :

image

Comme je le disais au début de mon post, je veux que ma build maitre attende le résultat de la build enfant.

Nous avons donc besoin d’une boucle While. Sa condition de sortie est que le statut de la build est soit annulé soit terminé :

image

Dans le Body de cette boucle nous allons ajouter une activité de type Delay, de manière à attendre quelques secondes (ou minutes) avant de revérifier le statut. Nous avons également besoin d’appeler la méthode Refresh sur notre objet IQueuedBuild. En effet les propriétés de notre variable ne se mette pas automatiquement à jour. Un appel à la méthode Refresh est donc nécessaire.

Les 2 activités dont nous avons besoin sont présentes dans la toolbox à cette endroit :

image

Dans l’activité While, on ajoute une activité de type séquence, puis on ajoute les activités Delay et InvokeMethod comme ceci :

image

On paramètre l’activité Delay :

image

Pour l’activité InvokeMethod, il faut indiquer l’objet sur lequel la méthode doit être appelée, en l’occurrence QueuedBuild et le nom de la méthode, Refresh. La méthode Refresh prend en paramètre d’entrée une valeur de l’énumération QueryOptions. Dans les propriétés de l’activité InvoMethod, il est possible de renseigner les paramètres d’entrée et de sortie :

image

Une fois que l’on sort de la boucle, cela signifie que la build est terminée. Mais la propriété Status de l’objet QueuedBuild ne nous dis pas si la build est dans l’état Fail ou Success. Pour celà il faut accéder à la propriété suivante : QueuedBuild.Build.Status. Mais encore une fois il faut appeler la méthode Refresh sur la propriété Build :

image

Et maintenant, on met à jour le statut de la build maitre en fonction du résultat de la build enfant à l’aide d’une activité SetBuildProperties,

image

que l’on paramètre de cette manière :

image

Une fois notre workflow de build terminé, on crée une définition de build basée sur ce template :

image

Avant de lancer l’exécution de la build, il faut vérifier que le service de build à la possibilité d’exécuter plusieurs build simultanément. Si ce n’est pas le cas, lorsque la build maitre va lancer l’exécution de la build enfant, la build enfant va attendre que la première soit terminée pour s’exécuter. Et la première va attendre que la build enfant soit terminée aussi… Donc pour vérifier ça, ouvrir la console d’administration de TFS sur le serveur de Build et vérifier la concurrence des builds au niveau des propriétés du contrôleur :

image

On peut maintenant tester et lancer la Master Build. Si on regarde le log d’exécution, on peut voir notre boucle d’attente pendant que l’autre build s’exécute :

image

Depuis la liste des builds en cours d’exécution on aperçoit nos 2 builds :

image

Et enfin au niveau des résultats, si la build enfant échoue alors la master échoue également :

image

Friday, March 11, 2011 5:19:34 PM (Romance Standard Time, UTC+01:00)  #    Voir Commentaires
TFS
# Friday, March 04, 2011

Le millésime 2011 de la Bewise Day Conference est annoncé pour le 7 avril et se déroulera au casino Barrière à Toulouse.

Vous pouvez d’ores et déjà vous y inscrire depuis le site BDC2011 et suivre l’évènement depuis sa page facebook.

Cette année j’animerai une session sur Windows Azure et vous me retrouverez également sur l’ATE Windows Azure.

Une petite vidéo de teasing où comme souvent dans les vidéos de Bewise nous apercevons notre ami Guillaume L. :

Friday, March 04, 2011 10:16:00 AM (Romance Standard Time, UTC+01:00)  #    Voir Commentaires
BDC 2011
Archive
<July 2012>
SunMonTueWedThuFriSat
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2013
Benoît Laut
Sign In
All Content © 2013, Benoît Laut
DasBlog theme 'Business' created by Christoph De Baene (delarou)