Exemple #1
0
        /// <summary>
        /// <para>
        /// This will generate word file directly from the folder, we just
        /// need to know the connection and the team project we want to
        /// use.
        /// </para>
        /// <para>
        /// This can be used only if the folder with the template have a
        /// text file to parse a <see cref="TemplateDefinition"/>
        /// </para>
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="connectionManager"></param>
        /// <param name="parameters">Parameters should be given from external code
        /// because this class does not know how to ask parameter to the user.</param>
        /// <param name="teamProjectName"></param>
        public void GenerateWordFile(
            String fileName,
            ConnectionManager connectionManager,
            String teamProjectName,
            Dictionary <string, Object> parameters)
        {
            if (_wordTemplateFolderManager.TemplateDefinition == null)
            {
                throw new ApplicationException("Cannot generate work file, template folder name does not contain valid structure.txt file");
            }

            //Ok, we start creating the empty file, then proceed to create everything.
            using (WordManipulator manipulator = new WordManipulator(fileName, true))
            {
                //now we need to scan the sections of the definition so we can use
                //each section to build the file
                foreach (var section in _wordTemplateFolderManager.TemplateDefinition.AllSections)
                {
                    //now each section can do something with my standard word manipulator
                    section.Assemble(manipulator, parameters, connectionManager, _wordTemplateFolderManager, teamProjectName);
                }
            }
        }
        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);
        }
        private void InnerExecuteExport()
        {
            var baseFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            foreach (var selectedTemplate in Templates.Where(t => t.IsSelected))
            {
                if (selectedTemplate.IsScriptTemplate)
                {
                    if (ArrayParameters.Any())
                    {
                        var arrayParameters = ArrayParameters.Select(p => new
                        {
                            Name   = p.Name,
                            Values = p.Value?.Split(',', ';').ToList() ?? new List <string>()
                        })
                                              .ToList();

                        Int32 maxParameterCount = arrayParameters.Max(p => p.Values.Count);
                        for (int i = 0; i < maxParameterCount; i++)
                        {
                            StringBuilder fileSuffix = new StringBuilder();
                            Dictionary <string, object> parameters = PrepareUserParameters();
                            foreach (var arrayParameter in arrayParameters)
                            {
                                var value = arrayParameter.Values.Count > i ? arrayParameter.Values[i] : String.Empty;
                                parameters[arrayParameter.Name] = value;
                                fileSuffix.Append(arrayParameter.Name);
                                fileSuffix.Append("_");
                                fileSuffix.Append(value);
                            }
                            var fileName = Path.Combine(baseFolder, selectedTemplate.TemplateName + "_" + DateTime.Now.ToString("dd_MM_yyyy hh mm")) + "_" + fileSuffix.ToString();
                            GenerateFileFromScriptTemplate(fileName, selectedTemplate, parameters);
                        }
                    }
                    else
                    {
                        var fileName = Path.Combine(baseFolder, selectedTemplate.TemplateName + "_" + DateTime.Now.ToString("dd_MM_yyyy hh mm"));
                        Dictionary <string, object> parameters = PrepareUserParameters();
                        GenerateFileFromScriptTemplate(fileName, selectedTemplate, parameters);
                    }
                }
                else
                {
                    var fileName = Path.Combine(baseFolder, selectedTemplate.TemplateName + "_" + DateTime.Now.ToString("dd_MM_yyyy hh mm")) + ".docx";
                    var selected = SelectedQuery?.Results?.Where(q => q.Selected).ToList();
                    if (selected == null || selected.Count == 0)
                    {
                        return;
                    }

                    var template = selectedTemplate.WordTemplateFolderManager;
                    using (WordManipulator manipulator = new WordManipulator(fileName, true))
                    {
                        foreach (var workItemResult in selected)
                        {
                            var workItem = workItemResult.WorkItem;
                            manipulator.InsertWorkItem(workItem, template.GetTemplateFor(workItem.Type.Name), true);
                        }
                    }
                    ManageGeneratedWordFile(fileName);
                }
            }
            Status = $"Export Completed";
        }
        public override void Assemble(
            WordManipulator manipulator,
            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)
            {
#if DEBUG
                //Limit = 20;
#endif
                List <WorkItem> queryRawReturnValue = workItemManger.ExecuteQuery(query)
                                                      .Take(Limit)
                                                      .ToList();
                var workItems = queryRawReturnValue
                                .Where(ShouldExport)
                                .ToList();

                //Add the table only if whe really have work item selected.
                if (String.IsNullOrEmpty(TableTemplate))
                {
                    if (workItems.Count > 0)
                    {
                        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, PageBreak, 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, workItemManger);
                    }
                    manipulator.AppendOtherWordFile(tempFile);
                }
            }

            base.Assemble(manipulator, parameters, connectionManager, wordTemplateFolderManager, teamProjectName);
        }