Bewise

Nous développons... votre avance

Etendre Team Foundation Server à l’aide du TFS SDK

AMI
14/03/2008 - Sacha Leroux
Télécharger les sources

Team Foundation Server, connu pour sa plateforme de travail collaboratif puissante, possède un Software Development Kit. Ce dernier nous permet de profiter pleinement des ressources qu’il met à notre disposition afin de l’intégrer, par exemple, dans un environnement de développement existant et hétérogène.

Introduction

Visual Studio Team System est l’outil d’industrialisation des développements Microsoft.

Il est composé d’un serveur nommé Team Foundation server et de clients tels que les différentes éditions de Visual studio, ou encore Excel et Microsoft Project.

Si Visual Studio Team System est aujourd’hui bien connu, le Software Development Kit (SDK) qui l’accompagne l’est un peu moins.

La première chose qui vient à l’esprit quand on l’apprend est « Mais à quoi peut servir le SDK de Team Foundation Server ? ».

Tout d’abord, il permet d’accéder aux services, fournis par Team Foundation server voire encore de créer son propre client à l’image de Team Explorer ou de Microsoft Team System Web Access.

Mais surtout, il vous permet d’intégrer plus simplement Team System au sein de votre plateforme de développement d’entreprise, comme, par exemple, récupérer les temps de travaux de chaque tâche afin de les intégrer dans un outil d’entreprise de gestion d’activité.

Cet article vous présente ce SDK. Dans un premier temps nous verrons l’architecture Technique de Team Foundation Server. Puis nous regarderons la composition de ce SDK, enfin nous réaliserons un outil permettant de créer des work items et de récupérer les informations essentielles qu’ils contiennent.

Tous les exemples présentés dans cet article sont réalisés à partir du Visual Studio SDK en version de février 2007.

LE TEAM FOUNDATION SERVER SDK

Visual Studio Team System est basé sur une architecture 3-tiers et multicouches (possibilité de l’installer sur 2 serveurs séparés, un serveur de données et un serveur de services).

L’architecture technique de la plateforme est la suivante :

clip_image002

Figure 1: Architecture de Team foundation Server

Dans la partie cliente le modèle objet permet d’encapsuler l’accès aux services du second tiers, détaillons-le.

Ce Modèle objet est découpé en 5 services comme suit :

· Les Services du noyau,

· Le contrôleur de sources,

· Le suivi des Works items,

· Team Build,

· Team Foundation Data Warehouse,

Les services du noyau :

Ils nous permettent d’établir une connexion avec un serveur ou encore de récupérer toutes les informations nécessaires sur les « Team Project ». Ci-dessous la connexion à un Team Foundation server.

Public TeamFoundationServer server; server= TeamFoundationServerFactory.GetServer("NomDeMonServeur");

On y trouve aussi les services d’abonnement, nous permettant d’être notifié dès qu’une action s’exécute sur le serveur. Mais aussi les services liés à la sécurité et droit d’accès au Serveur.

Le contrôleur de sources :

Ce modèle objet met à disposition l’ensemble des moyens permettant de piloter le contrôleur de sources, ci-dessous l’instanciation de ce service :

public static VersionControlServer vcStore; vcStore=server.GetService(typeof(VersionControlServer))as VersionControlServer;

Via ce service nous pouvons accéder au(x) Workspsace(s) référencé(s) sur le serveur mais aussi aux branches, aux merges ou encore aux ChangeSet. Nous pouvons donc piloter la création d’étiquettes ou la récupération de l’historique.

Le suivi des Works items :

Ce modèle permet toutes les manipulations concernant les éléments de travail pour vérifier des liens ou encore lister les works items. Ci-dessous l’accès à ce service

public WorkItemStore wiStore; wiStore = server.GetService(typeof(WorkItemStore)) as WorkItemStore;

Comme nous le verrons plus loin dans cet article, ce service très complet nous permet de créer des Work items, de les lister et donc de récupérer les informations associées.

Team Build :

Ce modèle objet permet d’enrichir l’ensemble des builds automatiques paramétrés avec TFS builds.

public BuildStore bStore; bStore = server.GetService(typeof(BuildStore)) as BuildStore;

Team Foundation Data Warehouse :

TFS regroupe les données issues des Work items, du contrôleur de sources, des builds et des outils de tests dans un DataWharehouse (cube OLAP). Il est alors possible d’interagir avec, par l’intermédiaire d’un modèle objet dédié, et notamment d’ajouter des informations directement dans cet entrepôt de données via une interface.

private IDataStore dataStore; dataStore.BeginTransaction(); //Action d'ajout d'information dataStore.LogEvent(AdapterEventLevel.Warning,"mon Message de log"); dataStore.CommitTransaction();

EXEMPLE D’UTILISATION DU TFS SDK

Afin de mieux faire connaissance avec ce SDK, je vous propose de réaliser un outil qui récupère une liste de Work items et qui crée un Workitem. L’objectif ici est de vous présenter une classe nommée « TFSManager » possédant les fonctions statiques qui nous intéressent.

Les Assemblies à référencer :

Microsoft.TeamFoundation.WorkItemTracking.Client.dll

Microsoft.TeamFoundation.Common.dll

Microsoft.TeamFoundation.dll

Microsoft.TeamFoundation.Client.dll

Les namespaces : Les namespaces nécessaires à la bonne exécution du code sont les suivants

using Microsoft.TeamFoundation.Client;

using Microsoft.TeamFoundation.Server;

using Microsoft.TeamFoundation.WorkItemTracking.Client;

La classe TFSManager possède des propriétés permettant de garder des références vers le projet en cours d’utilisation, mais aussi des variables statiques référençant le serveur et les services utilisés. Cela se présente de la façon suivante :

Référence vers les services :

private static string currentProject; public static string CurrentProject { get { return currentProject; } set { if (wiStore == null) throw new Exception("Impossible d'affecter cette valeur tant que vous n'êtes pas connecté à un Team Foundation Server"); currentProject = value; } } private static Hashtable context;

Première étape : La connexion à un Team Foundation Server et la récupération du service WorkItem Tracking via le constructeur de notre classe.

clip_image004

Figure 2: Connection au serveur

public static void Connect(string serverName) { //connection au Serveur server = Microsoft.TeamFoundation.Client.TeamFoundationServerFactory.GetServer(serverName); //Chargement du service Work Item Tracking wiStore = server.GetService(typeof(WorkItemStore)) as WorkItemStore; }

La connexion à un Team Foundation Server se fait à l’aide d’une Factory et prend en paramètre soit l’URI, soit le nom d’un serveur TFS comme ici (une identité peut, bien sûr, lui être communiquée pour l’authentification).

Une fois connecté au serveur, il nous reste à récupérer le(s) service(s) que l’on souhaite utiliser dans la suite de notre application. Dans notre cas le service de suivi des Work Items.

Deuxième étape : Récupération de la liste des Team Projects à partir du service de suivi des Work Items

clip_image006

public static ProjectCollection GetProjects() { if (wiStore == null) return null; return wiStore.Projects; }

Comme présentée ici, la liste des projets est accessible par le service de suivi des Work items et nous retourne une collection de projets.

Troisième étape: Listons les work items associés à un team project. On utilise pour cela la variable currentProjet vue plus haut dans la définition de TFSManager.

clip_image008

private static String QueryOfTeamProject = "SELECT [System.Id], [System.WorkItemType], [Microsoft.VSTS.Common.Rank], [System.State], [System.AssignedTo], [System.Title] FROM WorkItems WHERE [System.TeamProject] = @project"; public static WorkItemCollection GetWorkItems() { if (wiStore == null) return null; context = new Hashtable(); context.Add("project", currentProject); return wiStore.Query(QueryOfTeamProject, context); }

Pour lister les Work items d’un Team Project il est nécessaire d’utiliser une requête (« Query » au sein de Team system). Dans l’exemple précédent, la requête utilisée se nomme «QueryOfTeamProject »  Cette requête peut prendre, comme dans notre cas, un ensemble de paramètres qui sont alors spécifiés au sein d’une Hashtable ici nommée « context ».

Notre requête pour sa part, prend un seul paramètre qui est le Team Project, sur lequel elle doit récupérer ses informations.

Quatrième étape : Créer un Work item de type « Tâche » à partir d’une liste de champs renseignés par un utilisateur.

clip_image009

public static void AddTask() { if (!String.IsNullOrEmpty(currentProject)) { WorkItemType wiType = wiStore.Projects[currentProject].WorkItemTypes["Task"]; WorkItem wi = wiType.NewWorkItem(); wi.Fields["Title"].Value = "Nouveau Work Items"; wi.Fields["Description"].Value = "Test de la création d'un Work Item"; wi.Fields["State"].Value = "Active"; wi.Save(); } }

Créer un Work Item nécessite plusieurs éléments. Tout d’abord la spécification du type de WorkItem que l’on veut créer comme par exemple : « Tâche » ou « Bogue ».

Une fois le type défini, nous pouvons récupérer les champs disponibles et renseigner chacun d’eux pour le Work item que nous avons initialisé. Il faut bien sûr appeler la méthode « save » du Work item pour l’enregistrer dans le projet en cours.

CONCLUSION

Nous avons vu au cours de cet article, une utilisation simple du SDK de Team Foundation Server. Ce dernier, nous permet donc d’étendre la plateforme Team System sans avoir à connaître ni le schéma de la base de données, ni les services exposés par la couche de services.

Nous aurons l’occasion lors d’un prochain article d’approfondir chacun des services cités précédemment. Nous pourrons alors enrichir TFSManager d’une gestion avancée du contrôleur de sources ou encore la souscription à des alertes retournées par TFS.

> Tous les articles

Commentaires

aucun commentaire
Page 1/1
     
Connexion
  • Accueil
  • Plan du site
  • Contact
Bewise TV, Blog technique, Webcasts...

Votre carrière et nous

  • Nos offres
  • Votre candidature
Ignorer les liens de navigation > Accueil > Nos Métiers > Architecture, Méthodes, Industrialisation > Détail Article
Ignorer les liens de navigation
Nous
Nos Métiers
Vous Former
Nos Evènements
Nos Références
Nos Activités
Nos Certifications
Nos Chiffres
Le Groupe
Nos Partenaires
On Parle de Nous
Nous contacter
Votre Carrière et Nous
Défiler vers le haut
Défiler vers le bas
Administration, Système et Communication
Architecture, Méthodes, Industrialisation
Décisionnel et Gestion des Données
Nouvelles Interfaces Utilisateurs
Portail et Travail Collaboratif
Solutions Langages et Framework
Solutions Web Avancées
Défiler vers le haut
Défiler vers le bas
Nos cours
Le Planning
Offres promotionnelles
Défiler vers le haut
Défiler vers le bas
Bewise Day Conference 2011
Nos Expresso
Défiler vers le haut
Défiler vers le bas
  • Infos légales
  • Lettre du Regional Director
  • Revue de presse