我们将 TFS 内的迭代链接到外部系统,以跟踪整个公司的项目。过去,我们在 TFS 项目中使用 IterationPath 进行链接,但问题是人们会随着项目的进展重命名这些 IterationPath,导致链接丢失。因此,经过一些研究,我正在考虑使用 IterationID 进行链接。TFSWarehouse 中的 IterationID 与 WorkItemTracking 表中的 IterationID 不同,我似乎找不到找到 IterationPath 的 IterationID 的简单方法?任何人都知道我们如何能够实现这一目标?
问问题
6441 次
4 回答
2
好的 - 经过进一步挖掘,发现下面的代码迭代了所有迭代,所以使用其中的一个子集,我会得到我需要的:)
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);
}
}
}
}
}
于 2009-07-22T01:19:50.453 回答
0
为此,我将使用最新 TFS Power Tools 中的 powershell 管理单元。
> $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
于 2009-07-21T15:48:00.403 回答
0
如果要打印所有 TFS 区域,请更改以下行:
来自: NodeCollection rootNodeCollection = store.Projects[tfsProject].IterationRootNodes;
到: NodeCollection rootNodeCollection = store.Projects[tfsProject].AreaRootNodes;
感谢您提供的代码,它对我很有帮助。
于 2010-04-03T11:09:06.440 回答
0
这也可以通过使用工作项查询语言(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 子句来找到特定的迭代 ID:
+ " Where [System.IterationPath] = 'Path'");
可以通过遍历它们来查看 queryResults:
foreach (WorkItem workitem in queryResults)
{
Console.WriteLine(workitem.IterationID);
}
于 2016-03-01T21:21:52.063 回答