2009-07-21 16 views
5

estamos vinculando Iteraciones dentro de TFS a un sistema externo para rastrear proyectos a través de toda la compañía. En el pasado, estábamos vinculando usando IterationPath en un proyecto TFS, pero el problema es que las personas cambian el nombre de estos IterationPaths a medida que avanzan los proyectos, y el enlace se pierde. Entonces, después de algunas investigaciones, estoy pensando en hacer los enlaces usando el IterationID. IterationID en TFSWarehouse NO es lo mismo que IterationID en la tabla WorkItemTracking, y parece que no puedo encontrar una forma fácil de encontrar el IterationID de un IterationPath. ¿Alguien tiene alguna idea de cómo podemos lograr esto?Encontrar IterationID en TFS

Respuesta

0

Usaría el complemento powershell de las últimas herramientas eléctricas TFS para esto.

> $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

Gracias - ¡descargará y echará un vistazo! Si se puede hacer a través de Powershell, debería haber una forma de hacerlo a través del SDK. Esta herramienta de enlace es una aplicación ASP.NET, por lo que me encantaría hacerlo en ASP.NET. – Kolchy

+0

Tuvo un juego, y lo anterior solo muestra la iteración que tiene 2 niveles de profundidad (por ejemplo, Nombre del cliente \ Iteración de raíz \ Iteración del niño). No muestra Iteraciones de raíz o Iteraciones que son hijos de niños ... – Kolchy

+0

¿es solo este 2015? Acabo de descargar la última TFS Power Tools 2013 del 2015-04-13 y esos objetos no están disponibles. TFS Power Tools 2015 implica que funcionará con Team Explorer 2015, pero no pude lograr que funcionara. – rob

2

bien - después de algo de investigación más, encontró el siguiente código que itera a través de todas las iteraciones, por lo que usar un subconjunto de esto, voy a conseguir lo que necesitaba :)

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

¿Esto realmente le da la identificación de iteración con la que puede consultar? – sonicblis

0

si quieren para imprimir todas las Áreas de TFS continuación, cambie la línea siguiente:

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

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

gracias por el código fue útil en mi extremo.

0

Esto también se puede lograr utilizando el Idioma de consulta de elementos de trabajo (WIQL on MSDN).

Con WIQL, puede consultar TFS. Usé C#, pero creo que esto funciona con la mayoría de los lenguajes .NET.

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

Se puede encontrar una iterationID específica mediante la adición de una cláusula donde a su cadena de consulta:

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

Los queryResults pueden ser vistas por iteración a través de ellos:

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