/// <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); }