2014-10-21 19 views
5

C'è un modo per eseguire una query di squadra condiviso, in base al nome, attraverso il TFS 2013 oggetto client APIaccesso TFS squadra Query da Object API Client

Sto lavorando su un C# script che fare un po 'di lavoro basato fuori dai risultati di una query di gruppo condivisa. Non voglio mantenere la query nell'interfaccia utente TFS e nel mio script; Preferirei semplicemente eseguire la query registrata utilizzata dal mio team, ma poi giocare solo con i risultati. Quando scrivo "query registrata" mi riferisco solo a una query che ho scritto nell'interfaccia utente TFS e salvata come query condivisa.

In altre parole: mi piacerebbe utilizzare l'interfaccia utente TFS per creare una query, salvare il file nell'elenco "query condivise", chiamarlo "foo", quindi accedere a foo dall'API dell'oggetto client nel mio script .

vedo che c'è un metodo GetQueryDefinition(GUID) off di WorkItemStore, ma dove vorrei ottenere il GUID per una query squadra condiviso?

+0

penso che questo dovrebbe darmi quello che mi serve: [link] (http://blogs.msdn.com/b/team_foundation/archive/2010/ 06/16/work-item-tracking-queries-object-model-in-2010.aspx) – peterfelts

risposta

13
codice

di esempio che dovrebbe fare quello che ti serve

///Handles nested query folders  
private static Guid FindQuery(QueryFolder folder, string queryName) 
{ 
    foreach (var item in folder) 
    { 
     if (item.Name.Equals(queryName, StringComparison.InvariantCultureIgnoreCase)) 
     { 
      return item.Id; 
     } 

     var itemFolder = item as QueryFolder; 
     if (itemFolder != null) 
     { 
      var result = FindQuery(itemFolder, queryName); 
      if (!result.Equals(Guid.Empty)) 
      { 
       return result; 
      } 
     } 
    } 
    return Guid.Empty; 
} 

static void Main(string[] args) 
{ 
    var collectionUri = new Uri("http://TFS/tfs/DefaultCollection"); 
    var server = new TfsTeamProjectCollection(collectionUri); 
    var workItemStore = server.GetService<WorkItemStore>(); 

    var teamProject = workItemStore.Projects["TeamProjectName"]; 

    var x = teamProject.QueryHierarchy; 
    var queryId = FindQuery(x, "QueryNameHere"); 

    var queryDefinition = workItemStore.GetQueryDefinition(queryId); 
    var variables = new Dictionary<string, string>() {{"project", "TeamProjectName"}}; 

    var result = workItemStore.Query(queryDefinition.QueryText,variables); 
} 
+0

FindQuery può essere semplificato rimuovendo 'var itemFolder = oggetto come QueryFolder;' e modificando le seguenti 4 righe su 'if (item is QueryFolder) \t \t \t { \t \t \t \t risultato Guid = FindQuery ((QueryFolder) voce, queryName); \t \t \t \t if (risultato! = Guid.Empty) ' – Trisped

Problemi correlati