private void InitializeUniqueValues() { FieldToUniqueValues = new Dictionary <string, IList <string> >(); foreach (var sourceWorkItem in SourceWorkItems) { foreach (var kvp in sourceWorkItem.FieldValuePairs) { string value = kvp.Value as string; if (string.IsNullOrEmpty(value)) { continue; } if (SourceNameToFieldMapping.ContainsKey(kvp.Key) && SourceNameToFieldMapping[kvp.Key].HasAllowedValues) { if (!FieldToUniqueValues.ContainsKey(kvp.Key)) { FieldToUniqueValues.Add(kvp.Key, new List <string>()); } if (!FieldToUniqueValues[kvp.Key].Contains(value)) { FieldToUniqueValues[kvp.Key].Add(value); } } } } }
/// <summary> /// Save TFS Workitem and return result workitem(passed,failed or warning) depending upon the result of migration. /// </summary> /// <param name="workItem"></param> /// <param name="sourceWorkItem"></param> /// <returns></returns> public ISourceWorkItem SaveWorkItem(IWorkItem workItem, ISourceWorkItem sourceWorkItem) { try { workItem.Save(); } catch (WorkItemMigratorException te) { return(new FailedSourceWorkItem(sourceWorkItem, te.Args.Title)); } ISourceWorkItem updatedSourceWorkItem = new SourceWorkItem(sourceWorkItem); updatedSourceWorkItem.FieldValuePairs.Clear(); string warning = null; int id = -1; switch (WorkItemTypeToCategoryMapping[SelectedWorkItemTypeName]) { case TestCaseCategory: id = ((ITestCase)(workItem.WorkItem)).Id; break; default: id = ((WorkItem)(workItem.WorkItem)).Id; break; } foreach (var kvp in sourceWorkItem.FieldValuePairs) { string previousValue = kvp.Value as string; if (!string.IsNullOrEmpty(previousValue)) { if (SourceNameToFieldMapping[kvp.Key].ValueMapping.ContainsKey(previousValue) && String.CompareOrdinal(SourceNameToFieldMapping[kvp.Key].ValueMapping[previousValue], Resources.IgnoreLabel) != 0) { previousValue = SourceNameToFieldMapping[kvp.Key].ValueMapping[previousValue]; } string tfsFieldName = SourceNameToFieldMapping[kvp.Key].TfsName; string newValue = workItem.GetFieldValue(tfsFieldName).ToString(); if (String.CompareOrdinal(previousValue, newValue) != 0 && !SourceNameToFieldMapping[kvp.Key].IsHtmlField && !SourceNameToFieldMapping[kvp.Key].IsAreaPath && !SourceNameToFieldMapping[kvp.Key].IsIterationPath) { warning += String.Format(CultureInfo.CurrentCulture, "Value of Field:{0} is modified from \n'{1}'\n to \n'{2}'", kvp.Key, previousValue, newValue); } updatedSourceWorkItem.FieldValuePairs.Add(kvp.Key, newValue); } else { string fieldName = kvp.Key; if (SourceNameToFieldMapping.ContainsKey(kvp.Key)) { fieldName = SourceNameToFieldMapping[kvp.Key].TfsName; } List <SourceTestStep> testSteps = kvp.Value as List <SourceTestStep>; if (testSteps != null) { updatedSourceWorkItem.FieldValuePairs.Add(kvp.Key, testSteps); } else { updatedSourceWorkItem.FieldValuePairs.Add(kvp.Key, workItem.GetFieldValue(fieldName)); } } } if (string.IsNullOrEmpty(warning)) { return(new PassedSourceWorkItem(updatedSourceWorkItem, id)); } else { return(new WarningSourceWorkItem(updatedSourceWorkItem, id, warning)); } }
/// <summary> /// Creates Workitem from Source Workitem /// </summary> /// <param name="sourceWorkItem"></param> /// <returns></returns> public IWorkItem CreateWorkItem(ISourceWorkItem sourceWorkItem) { if (sourceWorkItem == null) { throw new ArgumentNullException("sourceWorkItem", "source work item"); } // Initializing the variables IWorkItem workItem = null; // Initializing the Workitem switch (WorkItemTypeToCategoryMapping[SelectedWorkItemTypeName]) { case TestCaseCategory: TestCase testCase = new TestCase(m_teamProject, SelectedWorkItemTypeName, IsTFS2012); workItem = testCase; break; default: workItem = new WorkItemBase(m_teamProject.WitProject, SelectedWorkItemTypeName); break; } workItem.Create(); // iterating through each field-value pair foreach (KeyValuePair <string, object> kvp in sourceWorkItem.FieldValuePairs) { // Refernce Name of the field which is to be updated string fieldName = kvp.Key; // value of the field which has to assigned object fieldValue = kvp.Value; // Gets the correct field reference name if (SourceNameToFieldMapping.ContainsKey(kvp.Key)) { fieldName = SourceNameToFieldMapping[kvp.Key].TfsName; if (CreateAreaIterationPath && SourceNameToFieldMapping[kvp.Key].IsAreaPath) { // Create area path if it does not already exist. fieldValue = m_areaAndIterationPathCreator.Create(Node.TreeType.Area, fieldValue as string); SourceNameToFieldMapping[kvp.Key].ValueMapping.Clear(); } if (CreateAreaIterationPath && SourceNameToFieldMapping[kvp.Key].IsIterationPath) { // Create area path if it does not already exist. fieldValue = m_areaAndIterationPathCreator.Create(Node.TreeType.Iteration, fieldValue as string); SourceNameToFieldMapping[kvp.Key].ValueMapping.Clear(); } // If it is autogenerated value then just ignore the assignment of value and continue to next iteration if (SourceNameToFieldMapping[kvp.Key].IsAutoGenerated) { continue; } } string value = kvp.Value as string; // value to assign is of type string and it is not null if (value != null) { // If this value is dataMapped if (SourceNameToFieldMapping.ContainsKey(kvp.Key) && SourceNameToFieldMapping[kvp.Key].ValueMapping.ContainsKey(value)) { if (String.Compare(SourceNameToFieldMapping[kvp.Key].ValueMapping[value], Resources.IgnoreLabel, StringComparison.CurrentCulture) == 0) { continue; } else { // else sets the correct data value fieldValue = SourceNameToFieldMapping[kvp.Key].ValueMapping[value]; } } } // Update the workitem with field-value workItem.UpdateField(fieldName, fieldValue); } // return the workitem return(workItem); }