2009-03-06 4 views
5

Nous vous écrivons un outil personnalisé à l'aide des API client TFS, de se connecter à TFS, pour récupérer les éléments de travail pour un projet, etc.API client TFS - Requête pour obtenir des éléments de travail liés à un fichier spécifique?


Nous Interrogation le magasin d'éléments de travail, en utilisant WIQL.

Étant donné un nom de fichier complet, quel est le moyen le plus simple d'obtenir une liste d'éléments de travail contenant des ensembles de modifications contenant le fichier spécifié?

Répondre

4

Je ne suis pas sûr qu'il existe un moyen facile de faire la requête que vous demandez en utilisant l'API TFS. Je sais que vous ne pouvez certainement pas le faire en utilisant WIQL. Je pense que, en utilisant l'API, vous devez parcourir tous les éléments de travail - récupérer les liens du changeset et ensuite rechercher dans chaque changeset le chemin du fichier que vous recherchez. Ce n'est évidemment pas très utile.

Toutefois, vous pouvez obtenir ces données à l'aide de la base de données TFS Data Warehouse. Ces informations sont décalées par rapport aux informations du magasin opérationnel en direct, car l'entrepôt n'est mis à jour que périodiquement, mais vous permet de suivre facilement les éléments en fonction de la dimension du dossier/fichier.

-2

Cliquez avec le bouton droit sur le fichier dans l'Explorateur de solutions et sélectionnez Afficher l'historique. Vous obtiendrez une liste de changesets. Si vous double-cliquez sur un ensemble de modifications, une boîte de dialogue s'affiche dans laquelle vous pouvez voir les éléments de travail associés.

+0

Désolé, je parle de l'utilisation WIQL pour interroger le TFS à partir d'un outil personnalisé, nous développons. – amazedsaint

2

Ce petit fragment de code vous permet d'obtenir une collection d'éléments de travail avec un nom de serveur TFS et un projet. Il filtre également les éléments de travail dans l'état supprimé.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.WorkItemTracking.Client; 

    namespace EngineTFSAutomation 
    { 
     class TFSHelper 
     { 
      static public WorkItemCollection QueryWorkItems(string server, string projectname) 
      { 
       TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(server); 
       WorkItemStore workItemStore = (WorkItemStore)tfs.GetService(typeof(WorkItemStore)); 
       Project p = workItemStore.Projects[projectname]; 
       string wiqlQuery = "Select * from Issue where [System.TeamProject] = '"+projectname+"'"; 
       wiqlQuery += " and [System.State] <> 'Deleted'"; 
       wiqlQuery+= " order by ID"; 
       WorkItemCollection witCollection = workItemStore.Query(wiqlQuery); 
       return witCollection; 
      } 
     } 
    } 
+0

Je viens de me rendre compte que vous cherchez un moyen d'obtenir une liste de tous les éléments de travail qui ont des changesets affectant un fichier spécifique. –

+0

bien que la requête WIQL vous donnera tous les éléments de travail, alors je suppose que vous pouvez itérer chaque élément de travail qui a des liens. Si les liens sont des changesets, vous pouvez voir si les changesets contiennent le fichier en question. Je vais voir si je peux coder quelque chose comme ça, je vais réviser ma réponse plus tard. –

+0

J'essayais le code que vous avez fourni, et j'ai reçu l'avertissement que la classe TeamFoundationServer est obsolète dans TFS 2010. J'ai utilisé \t 'TfsTeamProjectCollection tfs = new TfsTeamProjectCollection (nouvel Uri (serveur)); tfs.EnsureAuthenticated(); 'qui fonctionne, mais la requête semble fonctionner pour toujours (et ne s'arrête pas). Avez-vous un indice? – Matt

1

Pour TFS 2012

Uri tfsUri = new Uri("http://xxx.xx.xx.xxx:8080/tfs2012"); 
    TfsConfigurationServer configurationServer =TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);     
    ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren(new[] {CatalogResourceTypes.ProjectCollection },false,CatalogQueryOptions.None); 

    foreach (CatalogNode collectionNode in collectionNodes) 
    { 
     // Use the InstanceId property to get the team project collection 
     Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]); 
     TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId); 

     WorkItemStore workItemStore = (WorkItemStore)teamProjectCollection.GetService(typeof(WorkItemStore)); 

     string query = "SELECT [System.Id] FROM WorkItems where [Assigned to][email protected]"; 
     WorkItemCollection queryResults = workItemStore.Query(query); 

    } 
0

Pour TFS 2013 code suivant fonctionne pour accéder projet TFS Information:

var tfsUri = new Uri("http://tfs.xxx.xxx.com:8080/tfs/myCollection"); 
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri); 
tfs.EnsureAuthenticated(); 
var iis = tfs.GetService<Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore>(); 
// here access to a particular Project with its name 
var uriWithGuid = iis.Projects["My project name"].Uri; 
Questions connexes