コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }