如何使用 TFS API 2013 获取所有迭代路径 [英] How to get all Iteration Paths with a TFS API 2013
问题描述
我已经使用 TFS API 库有一段时间了,并且在与 TFS 2010 交互时一直使用以下代码来获取迭代路径(代码来自此页面)..
I have been using the TFS API libraries for some time and have been using the follwoing code when interfacing with TFS 2010 to get the Iteration Paths (code from this page)...
public IList<string> GetIterationPaths(Project project)
{
List<string> iterations = new List<string>();
foreach (Node node in project.IterationRootNodes)
AddChildren(string.Empty, node, iterations);
return iterations;
}
private void AddChildren(string prefix, Node node, List<string> items)
{
items.Add(node.Path);
foreach (Node item in node.ChildNodes)
AddChildren(prefix + node.Name + "/", item, items);
}
当我考虑在 TFS 2013 中获取所有迭代时,情况发生了变化.在 TFS 2013 中,迭代的概念略有变化,TFS 2013 的 API 程序集没有 IterationRootNodes
When I was looking at getting all the iterations within TFS 2013 things changed. In TFS 2013 the concept of iterations changed slightly and the API assemblies for TFS 2013 do not have IterationRootNodes
我使用以下代码来获取团队迭代,但这是基于团队的,而不是针对项目的完整迭代集...(目前获得第一个团队,但可以编码以获得其他团队)
I have used the following code to get Team Iterations but that is team based and not the full set of Iterations against the project... (currently getting the first team but can be coded to get others)
var cred = new TfsClientCredentials(new WindowsCredential(), true);
TfsTeamProjectCollection coll = new TfsTeamProjectCollection("{URI to SERVER}", cred);
coll.EnsureAuthenticated();
var teamConfig = coll.GetService<TeamSettingsConfigurationService>();
var css = coll.GetService<ICommonStructureService4>();
var project = css.GetProjectFromName(projectInfo.ProjectName);
IEnumerable<TeamConfiguration> configs = teamConfig.GetTeamConfigurationsForUser(new[] { project.Uri.ToString() });
TeamConfiguration team = configs.FirstOrDefault(x => x.ProjectUri == project.Uri.ToString());
var iterations = BuildIterationTree(team, css);
其中 BuildIterationTree
看起来像...
where BuildIterationTree
looks like...
private IList<IterationInfo> BuildIterationTree(TeamConfiguration team, ICommonStructureService4 css)
{
string[] paths = team.TeamSettings.IterationPaths;
var result = new List<IterationInfo>();
foreach (string nodePath in paths.OrderBy(x => x))
{
var projectNameIndex = nodePath.IndexOf("\\", 2);
var fullPath = nodePath.Insert(projectNameIndex, "\\Iteration");
var nodeInfo = css.GetNodeFromPath(fullPath);
var name = nodeInfo.Name;
var startDate = nodeInfo.StartDate;
var endDate = nodeInfo.FinishDate;
result.Add(new IterationInfo
{
IterationPath = fullPath.Replace("\\Iteration", ""),
StartDate = startDate,
FinishDate = endDate,
});
}
return result;
}
我的问题是...我如何获得 TFS 2013 的完整迭代树而不是团队特定的迭代?
My question is... How do I get the full iteration tree rather than Team specific Iterations for TFS 2013?
可以通过针对迭代的复选框配置团队特定的迭代,以通过 Web 门户显示或不显示.
Team specific iterations can be configured to show or not via the Web Portal via a checkbox against the iteration.
推荐答案
你的问题回答了我关于如何获得团队特定迭代的问题,所以我至少可以提供这个获取完整迭代层次结构的代码片段.我想我最初是在 这个博客上找到这个代码的:
Your question answered my question on how to get the team specific iterations so the least I can do is offer this snippet that gets the full iteration hierarchy. I think I originally found this code on this blog:
public static void GetIterations(TfsTeamProjectCollection collection,
ICommonStructureService4 css, ProjectInfo project)
{
TeamSettingsConfigurationService teamConfigService = collection.GetService<TeamSettingsConfigurationService>();
NodeInfo[] structures = css.ListStructures(project.Uri);
NodeInfo iterations = structures.FirstOrDefault(n => n.StructureType.Equals("ProjectLifecycle"));
XmlElement iterationsTree = css.GetNodesXml(new[] { iterations.Uri }, true);
string baseName = project.Name + @"\";
BuildIterationTree(iterationsTree.ChildNodes[0].ChildNodes, baseName);
}
private static void BuildIterationTree(XmlNodeList items, string baseName)
{
foreach (XmlNode node in items)
{
if (node.Attributes["NodeID"] != null &&
node.Attributes["Name"] != null &&
node.Attributes["StartDate"] != null &&
node.Attributes["FinishDate"] != null)
{
string name = node.Attributes["Name"].Value;
DateTime startDate = DateTime.Parse(node.Attributes["StartDate"].Value, CultureInfo.InvariantCulture);
DateTime finishDate = DateTime.Parse(node.Attributes["FinishDate"].Value, CultureInfo.InvariantCulture);
// Found Iteration with start / end dates
}
else if (node.Attributes["Name"] != null)
{
string name = node.Attributes["Name"].Value;
// Found Iteration without start / end dates
}
if (node.ChildNodes.Count > 0)
{
string name = baseName;
if (node.Attributes["Name"] != null)
name += node.Attributes["Name"].Value + @"\";
BuildIterationTree(node.ChildNodes, name);
}
}
}
这篇关于如何使用 TFS API 2013 获取所有迭代路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!