在TFS寻找IterationID(Finding IterationID in TFS)

2019-06-26 09:58发布

我们联,在TFS迭代到外部系统通过整个公司跟踪项目。 在过去,我们在TFS项目使用IterationPath连接,但问题是,人们重命名这些IterationPaths作为项目的进度,并链接丢失。 所以经过一番研究,我想通过IterationID做链接的。 该IterationID在TFSWarehouse是不一样的IterationID在WorkItemTracking表,我似乎无法找到一个简单的方法来找到IterationPath的IterationID? 任何人有任何想法,我们如何能做到这一点?

Answer 1:

OK - 经过进一步挖掘,发现低于迭代的代码直通所有迭代,所以使用这个子集,我会得到我需要的东西:)

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

    }
}


Answer 2:

我使用PowerShell管理单元从最新的TFS电动工具这一点。

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


Answer 3:

如果你想打印出所有TFS地区则更改以下行:

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

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

感谢您的代码,它是在我结束乐于助人。



Answer 4:

这也可以通过使用工作项查询语言(实现在MSDN WIQL )。

随着WIQL,您可以查询TFS。 我使用C#,但我相信这与大多数/所有.NET语言。

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

您可以通过添加where子句的查询字符串找到特定iterationID:

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

该queryResults可以通过它们迭代可以查看:

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


文章来源: Finding IterationID in TFS
标签: tfs iteration