从TFS获取当前迭代路径

use*_*943 5 .net c# tfs tfs-sdk tfs2013

我正在尝试获取团队TFS项目的当前迭代路径.我试图这样做的方法是使用http://blog.johnsworkshop.net/tfs11-api-reading-the-team-configuration-iterations-and-areas/上的博客.我首先从以下代码获取团队配置:

        TfsTeamProjectCollection tpc = TFSConncetion(@"http://tfs/url");
        var configSvc = tpc.GetService<TeamSettingsConfigurationService>();
        var configs = configSvc.GetTeamConfigurationsForUser(projectUri);
Run Code Online (Sandbox Code Playgroud)

这个问题是我的配置总是空的,即使我是团队成员.我很肯定我的项目URI也是正确的.在此之后,我将获得团队设置并使用它来显示当前的迭代路径.

TeamSettings ts = config.TeamSettings;
Console.WriteLine(ts.CurrentIterationPath);
Run Code Online (Sandbox Code Playgroud)

即使这不起作用,我仍然可以从团队设置中查询迭代日期,以获得在今天之前有一个开始日期并在今天之后完成日期的一次迭代.主要的问题是,当我尝试使用我的项目URI获取团队配置时,我无法让我的TeamSettingsConfigurationService返回任何空值.

use*_*943 0

实际上,我自己根本没有使用 TeamSettingsConfigurationService 就得到了答案。我是这样做的:

    private static XmlNode currentIterationNode;
    TfsTeamProjectCollection tpc = TFSConncetion(@"http://tfs/url");

    ICommonStructureService4 css = tpc.GetService<ICommonStructureService4>();;
    WorkItemStore workItemStore = new WorkItemStore(tpc);

        foreach (Project teamProject in workItemStore.Projects)
        {
            if (teamProject.Name.Equals("TeamProjectNameGoesHere"))
            {
                NodeInfo[] structures = css.ListStructures(teamProject.Uri.ToString());
                NodeInfo iterations = structures.FirstOrDefault(n => n.StructureType.Equals("ProjectLifecycle"));

                if (iterations != null)
                {
                    XmlElement iterationsTree = css.GetNodesXml(new[] { iterations.Uri }, true);
                    XmlNodeList nodeList = iterationsTree.ChildNodes;
                    currentIterationNode = FindCurrentIteration(nodeList);
                    String currentIterationPath = currentIterationNode.Attributes["Path"].Value;
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

其中 currentIterationPath 是 TFS 的当前迭代路径。这样做的关键是从我从 chamindacNavantis https://social.msdn.microsoft.com/Forums/vstudio/en-US/4b785ae7获得的这两行代码中获取 NodeInfo[] 结构数组和 NodeInfo 迭代-66c0-47ee-a6d2-c0ad8a3bd420/tfs-get-iteration-dates-metadata?forum=tfsgeneral

    NodeInfo[] structures = css.ListStructures(teamProject.Uri.ToString());
    NodeInfo iterations = structures.FirstOrDefault(n => n.StructureType.Equals("ProjectLifecycle"));
Run Code Online (Sandbox Code Playgroud)

之后,我创建了一个 xml,其中包含团队项目内每次迭代的节点。这些节点还具有每次迭代的开始日期和结束日期。因此,我检查了每个节点的开始日期是否在 DateTime.Now 之前,以及结束日期在 DateTime.Now 之后,这就是 FindCurrentIteration(nodeList) 所做的全部工作。这将为您提供当前的迭代节点。