private static WorkItemManger PrepareWorkItemManager(ConnectionManager connectionManager, string teamProjectName)
        {
            WorkItemManger workItemManger = new WorkItemManger(connectionManager);

            workItemManger.SetTeamProject(teamProjectName);
            return(workItemManger);
        }
        public override void Dump(
            StringBuilder stringBuilder,
            Dictionary <string, object> parameters,
            ConnectionManager connectionManager,
            WordTemplateFolderManager wordTemplateFolderManager,
            string teamProjectName)
        {
            WorkItemManger workItemManger = PrepareWorkItemManager(connectionManager, teamProjectName);

            parameters = parameters.ToDictionary(k => k.Key, v => v.Value); //clone
            //If we do not have query parameters we have a single query or we can have parametrized query with iterationPath
            var queries = PrepareQueries(parameters);

            foreach (var query in queries)
            {
                var workItems = workItemManger.ExecuteQuery(query).Take(Limit);
                foreach (var workItem in workItems.Where(ShouldExport))
                {
                    var values = workItem.CreateDictionaryFromWorkItem();
                    foreach (var value in values)
                    {
                        stringBuilder.AppendLine($"{value.Key.PadRight(50, ' ')}={value.Value}");
                    }
                }
            }
        }
Exemplo n.º 3
0
        public override void Assemble(
            WordManipulator manipulator,
            Dictionary <string, object> parameters,
            ConnectionManager connectionManager,
            WordTemplateFolderManager wordTemplateFolderManager,
            string teamProjectName)
        {
            parameters = parameters.ToDictionary(k => k.Key, v => v.Value); //clone
            //If we do not have query parameters we have a single query or we can have parametrized query with iterationPath
            var            queries        = PrepareQueries(parameters);
            WorkItemManger workItemManger = new WorkItemManger(connectionManager);

            workItemManger.SetTeamProject(teamProjectName);

            foreach (var query in queries)
            {
                var workItems = workItemManger.ExecuteQuery(query).Take(Limit);

                if (String.IsNullOrEmpty(TableTemplate))
                {
                    foreach (var workItem in workItems)
                    {
                        if (!SpecificTemplates.TryGetValue(workItem.Type.Name, out var templateName))
                        {
                            templateName = wordTemplateFolderManager.GetTemplateFor(workItem.Type.Name);
                        }
                        else
                        {
                            templateName = wordTemplateFolderManager.GenerateFullFileName(templateName);
                        }

                        manipulator.InsertWorkItem(workItem, templateName, true, parameters);
                    }
                }
                else
                {
                    //We have a table template, we want to export work item as a list
                    var tableFile = wordTemplateFolderManager.GenerateFullFileName(TableTemplate);
                    var tempFile  = wordTemplateFolderManager.CopyFileInTempDirectory(tableFile);
                    using (var tableManipulator = new WordManipulator(tempFile, false))
                    {
                        tableManipulator.SubstituteTokens(parameters);
                        tableManipulator.FillTableWithCompositeWorkItems(true, workItems);
                    }
                    manipulator.AppendOtherWordFile(tempFile);
                }
            }

            base.Assemble(manipulator, parameters, connectionManager, wordTemplateFolderManager, teamProjectName);
        }
Exemplo n.º 4
0
        /// <summary>
        /// This is similar to <see cref="FillTableWithSingleFieldWorkItems(bool, IEnumerable{WorkItem})"/>
        /// but with this version the routine will perform a complete substitution in each cell
        /// so you can have multiple value in cells. This is more time consuming that
        /// <see cref="FillTableWithSingleFieldWorkItems(bool, IEnumerable{WorkItem})"/>
        /// </summary>
        /// <param name="skipHeader"></param>
        /// <param name="workItems"></param>
        /// <returns></returns>
        public WordManipulator FillTableWithCompositeWorkItems(
            Boolean skipHeader,
            IEnumerable <WorkItem> workItems,
            WorkItemManger workItemManger)
        {
            List <Dictionary <String, Object> > workItemCellsData = new List <Dictionary <String, Object> >();
            List <Int32> parentList = workItems
                                      .Select(wi => wi.GetParentLink())
                                      .Where(l => l != null)
                                      .Select(l => l.RelatedWorkItemId)
                                      .ToList();

            Dictionary <int, WorkItem> parentWorkItems = workItemManger.LoadListOfWorkItems(parentList)
                                                         .ToDictionary(w => w.Id);

            List <Int32> granParentList = parentWorkItems.Values
                                          .Select(wi => wi.GetParentLink())
                                          .Where(l => l != null)
                                          .Select(l => l.RelatedWorkItemId)
                                          .ToList();

            Dictionary <int, WorkItem> granParentWorkItems = workItemManger.LoadListOfWorkItems(granParentList)
                                                             .ToDictionary(w => w.Id);

            foreach (var workItem in workItems)
            {
                var         parameters = workItem.CreateDictionaryFromWorkItem();
                RelatedLink parentLink = workItem.GetParentLink();
                parameters["parent.title"]        = String.Empty;
                parameters["parent.id"]           = String.Empty;
                parameters["parent.parent.title"] = String.Empty;
                parameters["parent.parent.id"]    = String.Empty;
                if (parentWorkItems.TryGetValue(parentLink?.RelatedWorkItemId ?? 0, out var parent))
                {
                    parameters["parent.title"] = parent.Title;
                    parameters["parent.id"]    = parent.Id;
                    var granParentLink = parent.GetParentLink();
                    if (granParentWorkItems.TryGetValue(granParentLink?.RelatedWorkItemId ?? 0, out var granParent))
                    {
                        parameters["parent.parent.title"] = granParent.Title;
                        parameters["parent.parent.id"]    = granParent.Id;
                    }
                }
                workItemCellsData.Add(parameters);
            }
            return(FillCompositeTable(skipHeader, workItemCellsData));
        }
Exemplo n.º 5
0
        private static void TestExcelExtraction(ConnectionManager connection)
        {
            WorkItemManger workItemManger = new WorkItemManger(connection);

            workItemManger.SetTeamProject("CMMI Playground");
            var hr = workItemManger.ExecuteHierarchicQuery(@"SELECT
    *
FROM workitemLinks
WHERE
    (
        [Source].[System.TeamProject] = '{teamProjectName}'
        AND[Source].[System.WorkItemType] = 'Feature'
        AND[Source].[Microsoft.VSTS.Scheduling.TargetDate] < '2062-01-01T00:00:00.0000000'
        AND[Source].[Microsoft.VSTS.Scheduling.TargetDate] > '1990-02-02T00:00:00.0000000'
    )
    AND(
        [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
    )
    AND(
        [Target].[System.TeamProject] = '{teamProjectName}'
        AND[Target].[System.WorkItemType] <> ''
    )
MODE(Recursive)
",
                                                           new[] { "task", "requirement", "feature", "epic" });

            var tempFile = @"c:\temp\test2.xlsx";

            if (File.Exists(tempFile))
            {
                File.Delete(tempFile);
            }

            File.Copy(@"c:\temp\test.xlsx", tempFile);
            using (ExcelManipulator m = new ExcelManipulator(tempFile))
            {
                m.FillWorkItems(hr);
            }
            System.Diagnostics.Process.Start(tempFile);
        }
        private static void PerformStandardIterationExport(ConnectionManager connection)
        {
            WorkItemManger workItemManger = new WorkItemManger(connection);

            workItemManger.SetTeamProject(options.TeamProject);
            var workItems = workItemManger.LoadAllWorkItemForAreaAndIteration(
                options.AreaPath,
                options.IterationPath);

            var fileName        = Path.GetTempFileName() + ".docx";
            var templateManager = new TemplateManager("Templates");
            var template        = templateManager.GetWordDefinitionTemplate(options.TemplateName);

            using (WordManipulator manipulator = new WordManipulator(fileName, true))
            {
                AddTableContent(manipulator, workItems, template);
                foreach (var workItem in workItems)
                {
                    manipulator.InsertWorkItem(workItem, template.GetTemplateFor(workItem.Type.Name), true);
                }
            }

            System.Diagnostics.Process.Start(fileName);
        }
        public override void AssembleExcel(
            ExcelManipulator manipulator,
            Dictionary <string, object> parameters,
            ConnectionManager connectionManager,
            WordTemplateFolderManager wordTemplateFolderManager,
            string teamProjectName)
        {
            WorkItemManger workItemManger = PrepareWorkItemManager(connectionManager, teamProjectName);
            //If we do not have query parameters we have a single query or we can have parametrized query with iterationPath
            var queries = PrepareQueries(parameters);

            foreach (var query in queries)
            {
                if (HierarchyMode?.Length > 0)
                {
                    var hr = workItemManger.ExecuteHierarchicQuery(query, HierarchyMode);
                    manipulator.FillWorkItems(hr);
                }
                else
                {
                    throw new NotSupportedException("This version of the program only support hierarchy mode for excel");
                }
            }
        }