2009-07-21 17 views
5

stiamo collegando le iterazioni all'interno di TFS a un sistema esterno per il monitoraggio dei progetti attraverso l'intera azienda. In passato, stavamo collegando utilizzando IterationPath in un progetto TFS, ma il problema è che le persone rinominano questi IterationPath mentre i progetti procedono e il collegamento viene perso. Quindi, dopo alcune ricerche, sto pensando di fare il collegamento usando l'IterationID. L'IterationID nella TFSWarehouse NON è uguale all'IterationID nella tabella WorkItemTracking e non riesco a trovare un modo semplice per trovare IterationID di IterationPath? Qualcuno ha idea di come possiamo essere in grado di raggiungere questo obiettivo?Trovare IterationID in TFS

risposta

0

Utilizzare lo snap-in PowerShell dagli ultimi Power Tools TFS per questo.

> $tfs = Get-TfsServer <name> -all 
> $tfs.WIT.Projects | % { $_.IterationRootNodes } | ft -auto id, path 

Id Path          
-- ----         
100 Test-ConchangoV2\Release 1\Sprint 1   
92 Test-ConchangoV2\Release 1\Sprint 2   
97 Test-ConchangoV2\Release 1\Sprint 3   
91 Test-ConchangoV2\Release 1\Sprint 4   
94 Test-ConchangoV2\Release 1\Sprint 5   
93 Test-ConchangoV2\Release 1\Sprint 6   
96 Test-ConchangoV2\Release 2\Sprint 1   
90 Test-ConchangoV2\Release 2\Sprint 2   
98 Test-ConchangoV2\Release 2\Sprint 3   
99 Test-ConchangoV2\Release 3\Sprint 1   
95 Test-ConchangoV2\Release 3\Sprint 2   
89 Test-ConchangoV2\Release 3\Sprint 3   
+0

Grazie - scaricherà e dare un'occhiata! Se può essere fatto attraverso Powershell, ci dovrebbe essere un modo per farlo attraverso l'SDK? Questo strumento di collegamento è un'applicazione ASP.NET, quindi mi piacerebbe farlo in ASP.NET. – Kolchy

+0

Ha avuto una riproduzione e il precedente mostra solo Iterazione con profondità di 2 livelli (ad es. Nome client \ Iterazione dei root \ Iterazione dei bambini). Non mostra Root Iterations o Iterations che sono figli di bambini ... – Kolchy

+0

è solo questo 2015? Ho appena scaricato gli ultimi Power Tools TFS 2013 del 2015-04-13 e tali oggetti non sono disponibili. TFS Power Tools 2015 implica che funzionerà con Team Explorer 2015 ma non ho potuto farlo funzionare. – rob

2

OK - dopo qualche ulteriore scavo, ha trovato il codice qui sotto che scorre attraverso tutte le iterazioni, in modo da utilizzare un sottoinsieme di questo, mi metterò quello che mi serviva :)

using System; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.WorkItemTracking.Client; 

namespace TFSIterationList 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string tfsServer = "tfs"; 
      string tfsProject = "Project Name"; 
      TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(tfsServer); 
      WorkItemStore store = new WorkItemStore(tfsServer); 
      PrintTreeNodeCount(store, tfsProject); 
     } 


     private static void PrintTreeNodeCount(WorkItemStore store, string tfsProject) 
     { 
      int iterationNodeCount = 0; 
      NodeCollection rootNodeCollection = store.Projects[tfsProject].IterationRootNodes; 
      GetChildNodeCount(rootNodeCollection, ref iterationNodeCount); 
      Console.WriteLine(tfsProject + " Iteration nodes : " + iterationNodeCount); 
     } 

     private static void GetChildNodeCount(NodeCollection nodeCollection, ref int nodeCount) 
     { 
      nodeCount += nodeCollection.Count; 
      for (int i = 0; i < nodeCollection.Count; i++) 
      { 

       Console.WriteLine(nodeCollection[i].Id + " : " + nodeCollection[i].Path); 
       // Console.WriteLine(nodeCollection[i].Name); 

       if (nodeCollection[i].ChildNodes.Count > 0) 
       { 
       // Recursively walk through the child nodes 
        GetChildNodeCount(nodeCollection[i].ChildNodes, ref nodeCount); 
       } 
      } 
     } 

    } 
} 
+0

Questo ti dà effettivamente l'ID di iterazione con cui puoi interrogare? – sonicblis

0

se si desidera per stampare tutti i TFS Aree quindi modificare la riga seguente:

da: NodeCollection rootNodeCollection = store.Projects [tfsProject] .IterationRootNodes;

a: NodeCollection rootNodeCollection = store.Projects [tfsProject] .AreaRootNodes;

grazie per il codice è stato utile alla mia fine.

0

Questo può essere ottenuto anche utilizzando il linguaggio di interrogazione delle voci di lavoro (WIQL on MSDN).

Con WIQL, è possibile interrogare TFS. Ho usato C#, ma credo che funzioni con la maggior parte/tutti i linguaggi .NET.

WorkItemStore workItemStore = (WorkItemStore)projectCollection.GetService(typeof(WorkItemStore)); 
WorkItemCollection queryResults = workItemStore.Query(
        "Select [System.IterationID], [System.IterationPath] " + 
        "From WorkItems ORDER BY [System.IterationID]"); 

Si potrebbe trovare un iterationID specifica con l'aggiunta di una clausola dove la stringa di query:

+ " Where [System.IterationPath] = 'Path'"); 

I queryResults può essere vista da iterazione attraverso di loro:

foreach (WorkItem workitem in queryResults) 
      { 
       Console.WriteLine(workitem.IterationID); 
      }