如何以编程方式设置积压迭代和 Team/Area 连接?

How to set Backlog Iteration and Team/Area connection programmatically?

到目前为止,我可以通过编程方式创建一个新团队和一个新区域,但是当我导航到 TFS 2015 "Work" 选项卡时,我看到了这个错误:

TF400509:未指定积压迭代路径。您必须 select 一个迭代路径。

所以如果我手动选择一个迭代然后我得到:

TF400512:您还没有select为您的团队编辑任何区域。您必须 select 至少一个区域才能使用产品待办事项列表、任务板或磁贴等功能。

这是我的代码:

            tpc.Authenticate();

            // Create New Area
            ICommonStructureService css = tpc.GetService<ICommonStructureService>();
            string rootNodePath = string.Format("\Onboarding\Area");
            var pathRoot = css.GetNodeFromPath(rootNodePath);
            var newAreaPath = css.CreateNode("Area 51", pathRoot.Uri);

            // Create new Team with Same Name
            TfsTeamService tts = tpc.GetService<TfsTeamService>();
            string newteamname = "Area 51";
            string teamdescription = "Area 51 Team Description";
            IDictionary<string, object> prop = new Dictionary<string, object>
            {
                {"Area", "Area 51"},
                {"Iteration", "\Onboarding\Iteration\Onboarding" }
            };
            tts.CreateTeam(onboardingProject.Uri.ToString(), newteamname, teamdescription, prop);


            TfsTeamService teamService = tpc.GetService<TfsTeamService>();
            ProjectInfo projectInfo = css.GetProjectFromName("Onboarding");
            var allTeams = teamService.QueryTeams(projectInfo.Uri);

所以问题又来了?

什么时候可以为新区域设置 积压迭代,how/where select 新区域 新团队?

您正在寻找的是 TeamSettings Class, you can check case TFS 2012 API Set TeamSettings Programmatically 如何以编程方式设置 TeamSettings:

 // Set up default team sprint date and time
        var teamConfig = _tfs.GetService<TeamSettingsConfigurationService>();
        var css = _tfs.GetService<ICommonStructureService4>();

        string rootNodePath = string.Format("\{0}\Iteration\Release 1\Sprint 1", _selectedTeamProject.Name);
        var pathRoot = css.GetNodeFromPath(rootNodePath);

        css.SetIterationDates(pathRoot.Uri, DateTime.Now.AddDays(-5), DateTime.Now.AddDays(7));

        var configs = teamConfig.GetTeamConfigurationsForUser(new[] { _selectedTeamProject.Uri });
        var team = configs.Where(c => c.TeamName == "Demo").FirstOrDefault();

        var ts = team.TeamSettings;
        ts.BacklogIterationPath = string.Format(@"{0}\Release 1", _selectedTeamProject.Name);
        ts.IterationPaths = new string[] { string.Format(@"{0}\Release 1\Sprint 1", _selectedTeamProject.Name), string.Format(@"{0}\Release 1\Sprint 2", _selectedTeamProject.Name) };

        var tfv = new TeamFieldValue();
        tfv.IncludeChildren = true;
        tfv.Value = _selectedTeamProject.Name;
        ts.TeamFieldValues = new []{tfv};

        teamConfig.SetTeamSettings(team.TeamId, ts);

有用的博客:http://blogs.microsoft.co.il/shair/2012/05/23/tfs-api-part-46-vs11-team-settings/

您可以添加以下代码来设置积压迭代路径:

    TeamSettingsConfigurationService tscs = tpc.GetService<TeamSettingsConfigurationService>();
    IEnumerable<TeamFoundationTeam> teams = tts.QueryTeams(projectInfo.Uri);
    TeamFoundationTeam team = teams.Where(a => a.Name == "Area 51").FirstOrDefault();
    var teamconfigs = tscs.GetTeamConfigurations(new[] { team.Identity.TeamFoundationId });
    TeamConfiguration tconfig = teamconfigs.FirstOrDefault();
    Console.WriteLine(tconfig.TeamName);
    TeamSettings ts = tconfig.TeamSettings;
    ts.IterationPaths = new string[] { string.Format("\Onboarding\Iteration 1") };
    ts.BacklogIterationPath = string.Format("\Onboarding\Iteration 1");
    TeamFieldValue tfv = new TeamFieldValue();
    tfv.IncludeChildren = true;
    tfv.Value = projectInfo.Name + "\Area 51";
    ts.TeamFieldValues = new TeamFieldValue[] { tfv};
    tscs.SetTeamSettings(tconfig.TeamId,ts);