public List <WorkItemData> FilterExistingWorkItems( List <WorkItemData> sourceWorkItems, TfsWiqlDefinition wiqlDefinition, TfsWorkItemMigrationClient sourceWorkItemMigrationClient) { Log.Debug("FilterExistingWorkItems: START | "); var targetQuery = string.Format( @"SELECT [System.Id], [{0}] FROM WorkItems WHERE [System.TeamProject] = @TeamProject {1} ORDER BY {2}", _config.AsTeamProjectConfig().ReflectedWorkItemIDFieldName, wiqlDefinition.QueryBit, wiqlDefinition.OrderBit); Log.Debug("FilterByTarget: Query Execute..."); var targetFoundItems = GetWorkItems(targetQuery); Log.Debug("FilterByTarget: ... query complete."); Log.Debug("FilterByTarget: Found {TargetWorkItemCount} based on the WIQLQueryBit in the target system.", targetFoundItems.Count); var targetFoundIds = (from WorkItemData twi in targetFoundItems select GetReflectedWorkItemId(twi)) //exclude null IDs .Where(x => x != null) .ToList(); ////////////////////////////////////////////////////////// sourceWorkItems = sourceWorkItems.Where(p => targetFoundIds.All(p2 => p2.ToString() != sourceWorkItemMigrationClient.CreateReflectedWorkItemId(p).ToString())).ToList(); Log.Debug("FilterByTarget: After removing all found work items there are {SourceWorkItemCount} remaining to be migrated.", sourceWorkItems.Count); Log.Debug("FilterByTarget: END"); return(sourceWorkItems); }
private IList <WorkItem> GetWorkItemsFromQuery(TfsWorkItemMigrationClient wiClient) { var startTime = DateTime.UtcNow; var timer = System.Diagnostics.Stopwatch.StartNew(); List <WorkItem> results = new List <WorkItem>(); WorkItemCollection workItemCollection; try { Log.Debug("Query sent"); workItemCollection = wiClient.Store.Query(Query); Log.Debug("{0} Work items received, verifying", workItemCollection.Count); foreach (WorkItem item in workItemCollection) { try { if (!string.IsNullOrEmpty(item.Title)) // Force to read WI { results.Add(item); } } catch (DeniedOrNotExistException ex) { Log.Error(ex, "Deleted Item detected."); } } timer.Stop(); Telemetry.TrackDependency(new DependencyTelemetry("TfsObjectModel", MigrationClient.Config.AsTeamProjectConfig().Collection.ToString(), "GetWorkItemsFromQuery", null, startTime, timer.Elapsed, "200", true)); } catch (Exception ex) { timer.Stop(); Telemetry.TrackDependency(new DependencyTelemetry("TfsObjectModel", MigrationClient.Config.AsTeamProjectConfig().Collection.ToString(), "GetWorkItemsFromQuery", null, startTime, timer.Elapsed, "500", false)); Telemetry.TrackException(ex, new Dictionary <string, string> { { "CollectionUrl", wiClient.Store.TeamProjectCollection.Uri.ToString() } }, new Dictionary <string, double> { { "QueryTime", timer.ElapsedMilliseconds } }); Log.Error(ex, " Error running query"); throw; } return(results); }