2009-03-06 12 views
5

Stiamo scrivendo uno strumento personalizzato utilizzando le API client TFS, per la connessione a TFS, per andare a prendere gli elementi di lavoro per un progetto eccAPI client TFS - Query per ottenere elementi di lavoro collegati a un file specifico?


Siamo l'interrogazione del negozio elemento di lavoro, utilizzando WIQL.

Dato un nome file completo, qual è il modo più semplice per ottenere un elenco di elementi di lavoro che hanno serie di modifiche che contengono il file specificato?

risposta

4

Non sono sicuro che esista un modo semplice per eseguire la query che si sta richiedendo utilizzando l'API TFS. So che sicuramente non puoi farlo usando WIQL. Penso che, usando l'API, dovresti iterare su tutti gli elementi di lavoro: ottenere i collegamenti del changeset al loro interno e quindi cercare in ogni changeset il percorso del file che stai cercando. Questo ovviamente non è molto utile.

È tuttavia possibile ottenere tali dati utilizzando il database del data warehouse TFS. Queste informazioni saranno in ritardo rispetto alle informazioni dell'archivio operativo in tempo reale poiché il magazzino viene aggiornato solo periodicamente, ma consente di tenere traccia delle cose in base alla dimensione della cartella/file piuttosto facilmente.

-2

Fare clic con il pulsante destro del mouse in Esplora soluzioni e selezionare Visualizza cronologia. Otterrai un elenco di changeset. Facendo doppio clic su un changeset verrà visualizzata una finestra di dialogo in cui è possibile visualizzare gli elementi di lavoro correlati.

+0

Mi dispiace, sto parlando con WIQL per interrogare il TFS da uno strumento personalizzato che stiamo sviluppando. – amazedsaint

2

Questo piccolo frammento di codice ti consente di ottenere una serie di elementi di lavoro in base al nome di un server TFS e a un progetto. Inoltre, filtra gli elementi di lavoro nello stato eliminato.

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

Mi sono appena reso conto che stai cercando un modo per ottenere un elenco di tutti gli elementi di lavoro che hanno changeset che interessano un file specifico. –

+0

bene la query WIQL ti darà tutti gli elementi di lavoro, quindi suppongo che tu possa iterare ogni elemento di lavoro che ha collegamenti. Se i collegamenti sono changeset, puoi vedere se i changeset contengono il file in questione. Vedrò se riesco a codificare qualcosa del genere, rivedrò la mia risposta più tardi. –

+0

Stavo provando il codice che hai fornito e ho ricevuto l'avviso che la classe TeamFoundationServer è deprecata in TFS 2010. Ho usato \t 'TfsTeamProjectCollection tfs = new TfsTeamProjectCollection (new Uri (server)); tfs.EnsureAuthenticated(); 'che funziona, ma sembra che la query funzioni per sempre (e non finisce mai). Hai un suggerimento? – Matt

1

Per 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

Per TFS 2013 seguente codice funziona per accedere informazioni sul progetto TFS:

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; 
Problemi correlati