public override void Execute(ExecutionContext context) { var project = context.GetWorkItemProject(); var queryContext = new Hashtable { { "project", project.Name }, { "workitemtypename", _workItemTypeName }}; const string wiqlTemplate = @"select [System.Id], [{0}], [{1}] from WorkItems where [System.TeamProject] = @project and [System.WorkItemType] = @workitemtypename order by [System.Id]"; var wiql = string.Format(wiqlTemplate, _fromFieldReferenceName, _toFieldReferenceName); var workItems = project.Store.Query(wiql, queryContext); foreach (WorkItem workItem in workItems) { Debug.WriteLine(workItem.Id); var hasFromField = workItem.Fields.Contains(_fromFieldReferenceName); var hasToField = workItem.Fields.Contains(_toFieldReferenceName); if (hasFromField && hasToField) { if (!workItem.IsOpen) workItem.Open(); workItem.Fields[_toFieldReferenceName].Value = workItem.Fields[_fromFieldReferenceName].Value; workItem.Save(); } else { if (!hasFromField) { context.Log(string.Format("Work item '{0}' is missing field '{1}'.", workItem.Id, _fromFieldReferenceName), TraceLevel.Warning); } if (!hasToField) { context.Log(string.Format("Work item '{0}' is missing field '{1}'.", workItem.Id, _toFieldReferenceName), TraceLevel.Warning); } } } }
public override void Execute(ExecutionContext context) { if (context.TraceLevel >= TraceLevel.Verbose) { string traceFile; int count = 0; do { count++; traceFile = Path.Combine(context.OutputPath, string.Format("{0}-{1}-definition.xml", WorkItemTypeName, count)); } while (File.Exists(traceFile)); _typeDefinition.WITDElement.OwnerDocument.Save(traceFile); } var project = context.GetWorkItemProject(); var accumulator = new ImportEventArgsAccumulator(); project.WorkItemTypes.ImportEventHandler += accumulator.Handler; try { project.WorkItemTypes.Import(_typeDefinition.WITDElement); if (accumulator.ImportEventArgs.Count != 0) { throw new ProvisionValidationException(string.Format("Could not import work item type definition '{0}'", WorkItemTypeName)); } Thread.Sleep(5000); project.Store.RefreshCache(); project.Store.SyncToCache(); } catch (ProvisionValidationException) { foreach (var e in accumulator.ImportEventArgs) { context.Log("IMPORT: " + e.Message, TraceLevel.Error); } throw; } finally { project.WorkItemTypes.ImportEventHandler -= accumulator.Handler; } }