2009-03-06 13 views

Odpowiedz

4

Nie jestem pewien, czy istnieje prosty sposób wykonania zapytania, którego żąda się przy użyciu interfejsu TFS API. Wiem, że na pewno nie możesz tego zrobić przy użyciu WIQL. Sądzę, że używając API, musiałbyś iterować po wszystkich elementach pracy - uzyskaj w nich linki do zestawów zmian, a następnie przejrzyj wszystkie zestawy zmian dla ścieżki pliku, której szukasz. To oczywiście niewiele.

Można jednak uzyskać te dane przy użyciu bazy danych hurtowni danych TFS. Informacje te będą opóźnione w stosunku do informacji o aktywnym sklepie, ponieważ magazyn jest tylko okresowo aktualizowany, ale umożliwia łatwe śledzenie elementów według wymiarów folderu/pliku.

-2

Kliknij prawym przyciskiem myszy plik w oknie Solution Explorer i wybierz opcję View History. Otrzymasz listę zestawów zmian. Dwukrotne kliknięcie zestawu zmian spowoduje wyświetlenie okna dialogowego, w którym możesz zobaczyć powiązane elementy pracy.

+0

Niestety, mówię o używaniu WIQL kwerendy TFS z własnego narzędzia, które rozwijamy. – amazedsaint

2

Ten mały fragment kodu zawiera kolekcję elementów roboczych z nazwą serwera TFS i projektem. Odfiltrowuje także elementy pracy w stanie usuniętym.

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

Właśnie zdałem sobie sprawę, że szukasz sposobu na uzyskanie listy wszystkich elementów pracy, które mają zestawy zmian wpływające na konkretny plik. –

+0

Cóż, zapytanie WIQL da ci wszystkie elementy pracy, wtedy przypuszczam, że możesz iterować każdy element pracy, który ma łącza. Jeśli linki są zestawami zmian, możesz sprawdzić, czy zestawy zmian zawierają dany plik. Zobaczę, czy uda mi się coś takiego napisać, później poprawię odpowiedź. –

+0

Próbowałem dostarczonego kodu i otrzymałem ostrzeżenie, że klasa TeamFoundationServer jest przestarzała w TFS 2010. Użyłem \t 'TfsTeamProjectCollection tfs = new TfsTeamProjectCollection (new Uri (server)); tfs.EnsureAuthenticated(); 'która działa, ale zapytanie wydaje się działać wiecznie (i nie kończy się). Czy masz podpowiedź? – Matt

1

Dla 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

Dla TFS 2013 Poniższy kod działa dostęp do informacji o projekcie 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;