private ConflictResolutionResult ResolveByDroppingField(MigrationConflict conflict, ConflictResolutionRule rule, out List <MigrationAction> actions) { actions = null; ClearQuestInvalidFieldValueConflictType conflictType = conflict.ConflictType as ClearQuestInvalidFieldValueConflictType; if (null == conflictType) { throw new InvalidOperationException(); } string invalidFieldName = rule.DataFieldDictionary[DropFieldConflictResolutionAction.ActionDataKey_FieldName]; if (string.IsNullOrEmpty(invalidFieldName)) { var result = new ConflictResolutionResult(false, ConflictResolutionType.Other); result.Comment = string.Format(ClearQuestResource.ClearQuest_Conflict_MissingResolutionData, DropFieldConflictResolutionAction.ActionDataKey_FieldName); return(result); } // // apply field map to the Action's Description document // XmlDocument desc = conflict.ConflictedChangeAction.MigrationActionDescription; XmlNode column = desc.SelectSingleNode(string.Format( @"/WorkItemChanges/Columns/Column[@ReferenceName=""{0}""]", invalidFieldName)); if (column == null || invalidFieldName != column.Attributes["ReferenceName"].Value) { return(new ConflictResolutionResult(false, ConflictResolutionType.Other)); } XmlNode columnsNode = column.ParentNode; columnsNode.RemoveChild(column); //note: changes to "MigrationConflict conflict" is saved by the conflict manager automatically return(new ConflictResolutionResult(true, ConflictResolutionType.UpdatedConflictedChangeAction)); }
private ConflictResolutionResult ResolveByValueMap(MigrationConflict conflict, ConflictResolutionRule rule, out List <MigrationAction> actions) { actions = null; ClearQuestInvalidFieldValueConflictType conflictType = conflict.ConflictType as ClearQuestInvalidFieldValueConflictType; if (null == conflictType) { throw new InvalidOperationException(); } string mapFromValue = rule.DataFieldDictionary[UseValueMapConflictResolutionAction.ActionDataKey_MapFromValue]; string mapToValue = rule.DataFieldDictionary[UseValueMapConflictResolutionAction.ActionDataKey_MapToValue]; string targetFieldName = rule.DataFieldDictionary[UseValueMapConflictResolutionAction.ActionDataKey_TargetFieldName]; // // apply value map to the Action's Description document // XmlDocument desc = conflict.ConflictedChangeAction.MigrationActionDescription; XmlNode column = desc.SelectSingleNode(string.Format( @"/WorkItemChanges/Columns/Column[@ReferenceName=""{0}""]", targetFieldName)); if (column == null) { // defer to migration time to resolve the conflict, mark it as resolved for now return(new ConflictResolutionResult(true, ConflictResolutionType.Other)); } else if (!mapFromValue.Equals(column.FirstChild.InnerText, StringComparison.InvariantCulture)) { return(new ConflictResolutionResult(false, ConflictResolutionType.Other)); } column.FirstChild.InnerText = mapToValue; //note: changes to "MigrationConflict conflict" is saved by the conflict manager automatically return(new ConflictResolutionResult(true, ConflictResolutionType.UpdatedConflictedChangeAction)); }