2012-02-13 11 views
37

Sto tentando di eseguire una query su un singolo progetto di team nel TfsTeamProjectCollection principale che contiene 194 progetti di team in totale. So esattamente come ottenere un ID WorkItem da un WorkItemStore. Il fatto è che, facendo ciò, l'API cerca in ALL dei progetti nella raccolta e la query richiede circa un minuto. Questo è troppo lento, ci deve essere un modo per interrogare gli oggetti di lavoro direttamente da un singolo progetto di squadra? Ecco il codice che ho:API TFS - Come recuperare elementi di lavoro da specifici Team Project

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; 
    } 

Ora che ho il team di progetto mi interessa, come posso query per elementi di lavoro per ID o semplicemente ottenere tutti gli elementi di lavoro in questo progetto?

+0

FYI, sbarazzarsi di che provare/blocco catch. Non fa nulla. –

+0

utilizzato per catturare un punto zero, perché il metodo accetta un ID di progetto come parametro, ma l'ho modificato. –

+1

Tutto ciò che hai fatto è rilanciare l'eccezione, che è la stessa cosa che non la cattura affatto. Non dovresti mai prendere NullReferenceException, poiché significa sempre un errore di programmazione. –

risposta

15

È probabilmente più efficiente per use a query to find the workitems che ti interessa. Puoi aggiungere un progetto Where = '@Project' alla query per limitare l'ambito al solo progetto. Con la prima chiamata BeginQuery e poi EndQuery otterrai una collezione workitem solo per gli elementi che stavi cercando.

Il modo più semplice per ottenere la query wql richiesta è creare una query in Team Explorer, quindi utilizzare file-> salva come (in modalità di modifica) per salvarlo in un file. Apri quel file in Blocco note per copiare la query da lì.

In alternativa è possibile utilizzare direttamente lo WorkItemStore.Query method per ottenere la stessa funzione.

+3

Il salvataggio della query wql è un suggerimento geniale. Molto più facile ottenere correttamente la query utilizzando la GUI di Team Explorer. Mi hai risparmiato ore a fare scherzi :-) – DaveF

34

Si potrebbe provare qualcosa di simile per ottenere tutti Sap all'interno 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]"); 

E questo per ottenere un ID specifico WorkItem:

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

Sai quale riferimento aggiungere al progetto perché la query venga riconosciuta? Perché sto già usando 'Microsoft.TeamFoundation.Client' e' Microsoft.TeamFoundation.WorkItemTracking.Client' e ottengo errori per tutto in parametro 'workItemStore.Query()' –

+0

+1 per questa risposta se puoi aiutare :) –

+0

Nevermind, funziona ... Grazie –

Problemi correlati