Finding IterationID in TFS

前端 未结 4 526
不知归路
不知归路 2021-01-12 21:44

we are linking Iterations within TFS to an external system for tracking projects through the entire company. In the past, we were linking using the IterationPath in a TFS Pr

相关标签:
4条回答
  • 2021-01-12 22:09

    I'd use the powershell snap-in from the latest TFS Power Tools for this.

    > $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 讨论(0)
  • 2021-01-12 22:14

    if you want to print out all TFS Areas then change the following line:

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

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

    thanks for the code it was helpfull at my end.

    0 讨论(0)
  • 2021-01-12 22:17

    OK - after some further digging, found the code below that iterates thru all the iterations, so using a subset of this, I will get what I needed :)

    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 讨论(0)
  • 2021-01-12 22:19

    This can also be achieved by using Work Item Query Language (WIQL on MSDN).

    With WIQL, you can query TFS. I used C#, but I believe this works with most/all .NET languages.

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

    You could find a specific iterationID by adding a where clause to your query string:

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

    The queryResults can be view by iterating through them:

    foreach (WorkItem workitem in queryResults)
                {
                    Console.WriteLine(workitem.IterationID);
                }
    
    0 讨论(0)
提交回复
热议问题