Пример #1
0
        private static void UpdateTeamSettings(string TeamProjectName, string TeamName)
        {
            Console.WriteLine("==========Update Settings");

            TeamContext teamContext = new TeamContext(TeamProjectName, TeamName);

            TeamSetting teamSetting = WorkClient.GetTeamSettingsAsync(teamContext).Result;

            TeamSettingsPatch teamSettingsPatch = new TeamSettingsPatch();

            //update backlogs

            teamSettingsPatch.BacklogVisibilities = teamSetting.BacklogVisibilities;

            if (teamSettingsPatch.BacklogVisibilities.ContainsKey(BacklogCategories.Epic) && teamSettingsPatch.BacklogVisibilities[BacklogCategories.Epic])
            {
                teamSettingsPatch.BacklogVisibilities[BacklogCategories.Epic] = false;
            }
            if (teamSettingsPatch.BacklogVisibilities.ContainsKey(BacklogCategories.Feature) && teamSettingsPatch.BacklogVisibilities[BacklogCategories.Feature])
            {
                teamSettingsPatch.BacklogVisibilities[BacklogCategories.Feature] = false;
            }

            //more work
            teamSettingsPatch.WorkingDays = new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Saturday };

            teamSetting = WorkClient.UpdateTeamSettingsAsync(teamSettingsPatch, teamContext).Result;

            GetTeamSettings(TeamProjectName, TeamName);
        }
Пример #2
0
        public TeamSetting UpdateTeamSettings()
        {
            IDictionary <string, bool> backlogVisibilities = new Dictionary <string, bool>()
            {
                { "Microsoft.EpicCategory", false },
                { "Microsoft.FeatureCategory", true },
                { "Microsoft.RequirementCategory", true }
            };

            TeamSettingsPatch updatedTeamSettings = new TeamSettingsPatch()
            {
                BugsBehavior        = BugsBehavior.AsTasks,
                WorkingDays         = new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday },
                BacklogVisibilities = backlogVisibilities
            };

            VssConnection  connection = Context.Connection;
            WorkHttpClient workClient = connection.GetClient <WorkHttpClient>();

            Guid projectId = ClientSampleHelpers.FindAnyProject(this.Context).Id;
            var  context   = new TeamContext(projectId);

            TeamSetting result = workClient.UpdateTeamSettingsAsync(updatedTeamSettings, context).Result;

            Console.WriteLine("Backlog iteration: {0}", result.BacklogIteration.Name);
            Console.WriteLine("Bugs behavior: {0}", result.BugsBehavior);
            Console.WriteLine("Default iteration : {0}", result.DefaultIterationMacro);
            Console.WriteLine("Working days: {0}", String.Join(",", result.WorkingDays.Select <DayOfWeek, string>(dow => { return(dow.ToString()); })));

            return(result);
        }
Пример #3
0
        public TeamSetting UpdateTeamSettings(string project)
        {
            IDictionary <string, bool> backlogVisibilities = new Dictionary <string, bool>()
            {
                { "Microsoft.EpicCategory", false },
                { "Microsoft.FeatureCategory", true },
                { "Microsoft.RequirementCategory", true }
            };

            TeamSettingsPatch patchDocument = new TeamSettingsPatch()
            {
                BugsBehavior        = BugsBehavior.AsRequirements,
                WorkingDays         = new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday },
                BacklogVisibilities = backlogVisibilities
            };

            VssConnection  connection     = new VssConnection(_uri, _credentials);
            WorkHttpClient workHttpClient = connection.GetClient <WorkHttpClient>();
            var            teamContext    = new TeamContext(project);
            TeamSetting    result         = workHttpClient.UpdateTeamSettingsAsync(patchDocument, teamContext).Result;

            return(result);
        }
Пример #4
0
        protected override Models.Team DoSetItem()
        {
            var(tpc, tp, t) = GetCollectionProjectAndTeam();
            var description      = GetParameter <string>(nameof(SetTeam.Description));
            var defaultTeam      = GetParameter <bool>(nameof(SetTeam.Default));
            var defaultAreaPath  = GetParameter <string>(nameof(SetTeam.DefaultAreaPath));
            var areaPaths        = GetParameter <IEnumerable <string> >(nameof(SetTeam.AreaPaths));
            var backlogIteration = GetParameter <string>(nameof(SetTeam.BacklogIteration));
            var iterationPaths   = GetParameter <IEnumerable <string> >(nameof(SetTeam.IterationPaths));
            var defaultIteration = GetParameter <string>(nameof(SetTeam.DefaultIterationMacro));

            var teamClient    = GetClient <TeamHttpClient>();
            var projectClient = GetClient <ProjectHttpClient>();
            var workClient    = GetClient <WorkHttpClient>();

            // Set description

            if (HasParameter("Description") && ShouldProcess(t, $"Set team's description to '{description}'"))
            {
                teamClient.UpdateTeamAsync(new WebApiTeam()
                {
                    Description = description ?? string.Empty
                }, tp.Id.ToString(), t.Id.ToString())
                .GetResult($"Error setting team '{t.Name}''s description to '{description}'");
            }

            // Set default team

            if (defaultTeam && ShouldProcess(tp, $"Set team '{t.Name} as default'"))
            {
                throw new NotImplementedException("Set team as default is currently not supported");
            }

            // Set Team Field / Area Path settings

            var ctx            = new TeamContext(tp.Name, t.Name);
            var teamFieldPatch = new TeamFieldValuesPatch();

            if (!string.IsNullOrEmpty(defaultAreaPath) &&
                ShouldProcess(t, $"Set team's default area path (team field) to '{defaultAreaPath}'"))
            {
                if (tpc.IsHosted)
                {
                    this.Log("Conected to Azure DevOps Services. Treating Team Field Value as Area Path");
                    defaultAreaPath = NodeUtil.NormalizeNodePath(defaultAreaPath, tp.Name, "Areas", includeTeamProject: true);
                }

                if (areaPaths == null)
                {
                    this.Log("AreaPaths is empty. Adding DefaultAreaPath (TeamFieldValue) to AreaPaths as default value.");

                    areaPaths = new string[] { defaultAreaPath };
                }

                var area = new { Node = defaultAreaPath };

                if (!TestItem <Models.ClassificationNode>(area))
                {
                    NewItem <Models.ClassificationNode>(area);
                }

                this.Log($"Setting default area path (team field) to {defaultAreaPath}");

                teamFieldPatch.DefaultValue = defaultAreaPath;
            }

            if (areaPaths != null &&
                ShouldProcess(t, $"Set {string.Join(", ", areaPaths)} as team's area paths"))
            {
                var values = new List <TeamFieldValue>();

                foreach (var a in areaPaths)
                {
                    values.Add(new TeamFieldValue()
                    {
                        Value           = NodeUtil.NormalizeNodePath(a.TrimEnd('\\', '*'), tp.Name, scope: "Areas", includeTeamProject: true),
                        IncludeChildren = a.EndsWith("*")
                    });
                }

                teamFieldPatch.Values = values;

                workClient.UpdateTeamFieldValuesAsync(teamFieldPatch, ctx)
                .GetResult("Error applying team field value and/or area path settings");
            }

            // Set backlog and iteration path settings

            bool isDirty        = false;
            var  iterationPatch = new TeamSettingsPatch();

            if (backlogIteration != null &&
                ShouldProcess(t, $"Set the team's backlog iteration to '{backlogIteration}'"))
            {
                this.Log($"Setting backlog iteration to {backlogIteration}");

                var iteration = GetItem <Models.ClassificationNode>(new
                {
                    Node           = backlogIteration,
                    StructureGroup = TreeStructureGroup.Iterations
                });

                iterationPatch.BacklogIteration     =
                    iterationPatch.DefaultIteration =
                        iteration.Identifier;

                isDirty = true;
            }

            if (!string.IsNullOrEmpty(defaultIteration) &&
                ShouldProcess(t, $"Set the team's default iteration to '{defaultIteration}'"))
            {
                this.Log($"Setting default iteration to '{defaultIteration}'");

                if (!defaultIteration.StartsWith("@"))
                {
                    var iteration = GetItem <Models.ClassificationNode>(new
                    {
                        Node           = defaultIteration,
                        StructureGroup = TreeStructureGroup.Iterations
                    });

                    iterationPatch.DefaultIteration = iteration.Identifier;
                }
                else
                {
                    iterationPatch.DefaultIteration      = null;
                    iterationPatch.DefaultIterationMacro = defaultIteration;
                }

                isDirty = true;
            }

            if (isDirty)
            {
                workClient.UpdateTeamSettingsAsync(iterationPatch, ctx)
                .GetResult("Error applying iteration and/or board settings");
            }

            // TODO: Finish migration

            //         if (BacklogVisibilities && ShouldProcess(Team, $"Set the team"s backlog visibilities to {_DumpObj {BacklogVisibilities}}"))
            //         {
            //             this.Log($"Setting backlog iteration to {BacklogVisibilities}");
            //             patch.BacklogVisibilities = _NewDictionary @([string], [bool]) BacklogVisibilities

            //             isDirty = true
            //         }

            //         if (DefaultIterationMacro && ShouldProcess(Team, $"Set the team"s default iteration macro to {DefaultIterationMacro}"))
            //         {
            //             this.Log($"Setting default iteration macro to {DefaultIterationMacro}");
            //             patch.DefaultIterationMacro = DefaultIterationMacro

            //             isDirty = true
            //         }

            //         if (WorkingDays && ShouldProcess(Team, $"Set the team"s working days to {_DumpObj {WorkingDays}}"))
            //         {
            //             this.Log($"Setting working days to {{WorkingDays}|ConvertTo=-Json -Compress}");
            //             patch.WorkingDays = WorkingDays

            //             isDirty = true
            //         }

            //         if(BugsBehavior && ShouldProcess(Team, $"Set the team"s bugs behavior to {_DumpObj {BugsBehavior}}"))
            //         {
            //             this.Log($"Setting bugs behavior to {_DumpObj {BugsBehavior}}");
            //             patch.BugsBehavior = BugsBehavior

            //             isDirty = true
            //         }

            //         if(isDirty)
            //         {
            //             task = client.UpdateTeamSettingsAsync(patch, ctx)
            //             result = task.Result; if(task.IsFaulted) { _throw new Exception("Error applying iteration settings" task.Exception.InnerExceptions })
            //         }

            //         if(Passthru.IsPresent)
            //         {
            //             WriteObject(t); return;
            //         }
            //     }
            // }

            return(GetItem <Models.Team>());
        }