/* Compare work item type definitions and add fields from source work item types and replace workflow */ public void SetFieldDefinitions(WorkItemTypeCollection workItemTypesSource, Hashtable fieldList) { foreach (WorkItemType workItemTypeSource in workItemTypesSource) { WorkItemType workItemTypeTarget = null; if (workItemTypeSource.Name == "User Story") { workItemTypeTarget = workItemTypes["Product Backlog Item"]; } else if (workItemTypeSource.Name == "Issue") { workItemTypeTarget = workItemTypes["Impediment"]; } else { workItemTypeTarget = workItemTypes[workItemTypeSource.Name]; } XmlDocument workItemTypeXmlSource = workItemTypeSource.Export(false); XmlDocument workItemTypeXmlTarget = workItemTypeTarget.Export(false); workItemTypeXmlTarget = AddNewFields(workItemTypeXmlSource, workItemTypeXmlTarget, (List <object>)fieldList[workItemTypeTarget.Name]); try { WorkItemType.Validate(store.Projects[projectName], workItemTypeXmlTarget.InnerXml); store.Projects[projectName].WorkItemTypes.Import(workItemTypeXmlTarget.InnerXml); } catch (XmlException) { logger.Info("XML import falied for " + workItemTypeSource.Name); } } }
public string ReplaceWorkFlow(WorkItemTypeCollection workItemTypesSource, List <object> fieldList) { string error = ""; for (int i = 0; i < fieldList.Count; i++) { object[] list = (object[])fieldList[i]; if ((bool)list[1]) { WorkItemType workItemTypeTarget = workItemTypes[(string)list[0]]; WorkItemType workItemTypeSource = null; if (workItemTypesSource.Contains((string)list[0])) { workItemTypeSource = workItemTypesSource[(string)list[0]]; } else if (workItemTypeTarget.Name == "Product Backlog Item") { workItemTypeSource = workItemTypesSource["User Story"]; } else if (workItemTypeTarget.Name == "Impediment") { workItemTypeSource = workItemTypesSource["Issue"]; } XmlDocument workItemTypeXmlSource = workItemTypeSource.Export(false); XmlDocument workItemTypeXmlTarget = workItemTypeTarget.Export(false); XmlNodeList transitionsListSource = workItemTypeXmlSource.GetElementsByTagName("WORKFLOW"); XmlNode transitions = transitionsListSource[0]; XmlNodeList transitionsListTarget = workItemTypeXmlTarget.GetElementsByTagName("WORKFLOW"); XmlNode transitionsTarget = transitionsListTarget[0]; string defTarget = ""; try { string def = workItemTypeXmlTarget.InnerXml; string workflowSource = transitions.OuterXml; string workflowTarget = transitionsTarget.OuterXml; defTarget = def.Replace(workflowTarget, workflowSource); WorkItemType.Validate(store.Projects[projectName], defTarget); store.Projects[projectName].WorkItemTypes.Import(defTarget); fieldList.Remove(list); i--; } catch (Exception ex) { logger.Info("Error Replacing work flow"); error = error + "Error Replacing work flow for " + (string)list[0] + ":" + ex.Message + "\n"; } } } return(error); }
private static void ImportWorkItemTypes(ILogger logger, ApplicationTask task, bool setTaskProgress, ref int step, ImportOptions options, WorkItemStore store, Dictionary <TeamProjectInfo, List <WorkItemTypeDefinition> > teamProjectsWithWorkItemTypes) { var importValidationFailed = false; ImportEventHandler importEventHandler = (sender, e) => { if (e.Severity == ImportSeverity.Error) { importValidationFailed = true; var message = e.Message; var schemaValidationException = e.Exception as XmlSchemaValidationException; if (schemaValidationException != null) { message = string.Format("XML validation error at row {0}, column {1}: {2}", schemaValidationException.LineNumber, schemaValidationException.LinePosition, message); } task.SetError(message); } else if (e.Severity == ImportSeverity.Warning) { task.SetWarning(e.Message); } }; // Validate. if (!task.IsCanceled) { WorkItemType.ValidationEventHandler += importEventHandler; try { foreach (var teamProjectWithWorkItemTypes in teamProjectsWithWorkItemTypes) { var teamProject = teamProjectWithWorkItemTypes.Key; var project = store.Projects[teamProject.Name]; foreach (var workItemTypeFile in teamProjectWithWorkItemTypes.Value) { task.Status = string.Format("Validating {0} for Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); try { WorkItemType.Validate(project, workItemTypeFile.XmlDefinition.OuterXml); } catch (Exception exc) { var message = string.Format("An error occurred while validating {0} for Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); logger.Log(message, exc); task.SetError(message, exc); } if (task.IsCanceled) { break; } } if (task.IsCanceled) { task.Status = "Canceled"; break; } } } finally { WorkItemType.ValidationEventHandler -= importEventHandler; } } // Import. if (!task.IsCanceled && !importValidationFailed) { foreach (var teamProjectWithWorkItemTypes in teamProjectsWithWorkItemTypes) { var teamProject = teamProjectWithWorkItemTypes.Key; var project = store.Projects[teamProject.Name]; project.WorkItemTypes.ImportEventHandler += importEventHandler; try { foreach (var workItemTypeFile in teamProjectWithWorkItemTypes.Value) { if (options.HasFlag(ImportOptions.Simulate)) { var status = string.Format("Simulating import of {0} in Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); if (setTaskProgress) { task.SetProgress(step++, status); } else { task.Status = status; } } else { var status = string.Format("Importing {0} in Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); if (setTaskProgress) { task.SetProgress(step++, status); } else { task.Status = status; } try { project.WorkItemTypes.Import(workItemTypeFile.XmlDefinition.DocumentElement); } catch (Exception exc) { var message = string.Format("An error occurred while importing {0} in Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); logger.Log(message, exc); task.SetError(message, exc); } } if (task.IsCanceled) { break; } } } finally { project.WorkItemTypes.ImportEventHandler -= importEventHandler; } if (task.IsCanceled) { task.Status = "Canceled"; break; } } } }