2012-02-13 10 views
37

Próbuję wysłać zapytanie do pojedynczego projektu zespołowego w głównej wersji TfsTeamProjectCollection, która zawiera w sumie 194 projekty zespołów. Dokładnie wiem, jak uzyskać WorkItem przez Id od WorkItemStore. Chodzi o to, że w ten sposób API wyszukuje w projektach w kolekcji i zapytanie trwa około minuty. To jest zbyt powolne, musi istnieć sposób na zapytanie o elementy pracy bezpośrednio z jednego projektu zespołowego? Oto kod mam:TFS API - jak pobrać element (y) pracy z określonego projektu zespołu

private Uri collectionUri; 
    private TfsTeamProjectCollection projectCollection; 
    private WorkItemStore workItemStore; 

    public Project GetTeamProject() 
    { 
     projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(collectionUri); 

     workItemStore = projectCollection.GetService<WorkItemStore>(); 
     Project teamProject = workItemStore.Projects[TFS_PROJECT_KEY]; 
     return teamProject; 
    } 

Teraz mam Zespół Projektu jestem zainteresowany, jak mogę kwerendy dla elementów roboczych przez ID lub po prostu wszystkie elementy pracy w tym projekcie?

+0

FYI, pozbyć się tego try/bloku catch. Nie robi nic. –

+0

używane do wychwytywania punktu zerowego wyjątku, ponieważ metoda miałaby identyfikator projektu jako parametr, ale zmieniłem go. –

+1

Wszystko, co zrobiłeś, to wyrzucić wyjątek, który jest taki sam, jak nie łapanie go w ogóle. Powinieneś również nigdy nie wychwycić wyjątku NullReferenceException, ponieważ zawsze oznacza to błąd programowania. –

Odpowiedz

15

Jest to prawdopodobnie najbardziej efektywne z use a query to find the workitems, które Cię interesuje. Możesz dodać projekt Where = "@Project" do zapytania, aby ograniczyć zakres tylko do tego projektu. Najpierw wywołując BeginQuery, a następnie EndQuery otrzymasz kolekcję workitem dla tylko tych przedmiotów, których szukałeś.

Najprostszym sposobem uzyskania wymaganego zapytania wql jest utworzenie zapytania w Team Explorer, a następnie użycie pliku-> zapisz jako (w trybie edycji), aby zapisać go do pliku. Otwórz ten plik w Notatniku, aby skopiować tamte zapytanie.

Alternatywnie można użyć przycisku WorkItemStore.Query method bezpośrednio, aby uzyskać to samo.

+3

Zapisanie kwerendy wql jest genialną wskazówką. O wiele łatwiej jest uzyskać poprawne zapytanie za pomocą interfejsu GUI Eksploratora zespołu. Uratowałeś mi wiele godzin pracy :-) – DaveF

34

można spróbować coś takiego dla uzyskania wszystkich Wis ciągu teamProject:

WorkItemCollection workItemCollection = workItemStore.Query(
    " SELECT [System.Id], [System.WorkItemType],"+  
    " [System.State], [System.AssignedTo], [System.Title] "+ 
    " FROM WorkItems " + 
    " WHERE [System.TeamProject] = '" + teamProject.Name + 
    "' ORDER BY [System.WorkItemType], [System.Id]"); 

i to, aby uzyskać konkretny WorkItem ID:

WorkItem workItem = workItemStore.GetWorkItem(555); 
+0

Czy wiesz, jakie odniesienie dodać do projektu, aby zapytanie zostało rozpoznane? Ponieważ już używam 'Microsoft.TeamFoundation.Client' i' Microsoft.TeamFoundation.WorkItemTracking.Client' i otrzymuję błędy dla wszystkiego w parametrze 'workItemStore.Query()' –

+0

+1 dla tej odpowiedzi, jeśli możesz pomóc :) –

+0

Nieważne, działa ... Dzięki –

Powiązane problemy