예제 #1
0
        private void FillTasksData(ALM.Task task, IDictionary <string, object> fields, int?parentId)
        {
            foreach (var field in fields)
            {
                var key   = field.Key;
                var value = field.Value;

                if (key.ToUpperInvariant().Contains("System.Id".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.SourceId = Convert.ToInt32(value, CultureInfo.InvariantCulture);
                }

                if (key.ToUpperInvariant().Contains("System.IterationId".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.IterationSk = Convert.ToInt32(value, CultureInfo.InvariantCulture);
                }

                if (key.ToUpperInvariant().Contains("System.CreatedDate".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.CreationDate = Convert.ToDateTime(value, CultureInfo.InvariantCulture);
                }

                if (key.ToUpperInvariant().Contains("System.AssignedTo".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.AssignedTo = ((IdentityRef)value).DisplayName;
                }

                if (key.ToUpperInvariant().Contains("System.Title".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.TaskName = value.ToString();
                }

                if (key.ToUpperInvariant().Contains("System.State".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.State = value.ToString();
                }

                if (key.ToUpperInvariant().Contains("Microsoft.VSTS.Scheduling.CompletedWork".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.CompletedWork = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
                }

                if (key.ToUpperInvariant().Contains("Microsoft.VSTS.Scheduling.OriginalEstimate".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.OriginalEstimate = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
                }

                if (key.ToUpperInvariant().Contains("Microsoft.VSTS.Scheduling.RemainingWork".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.RemainingWork = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
                }

                if (key.ToUpperInvariant().Contains("Microsoft.VSTS.Common.Activity".ToUpperInvariant(), StringComparison.InvariantCulture))
                {
                    task.Activity = value.ToString();
                }
            }
            task.IsActive          = 1;
            task.UserStorySourceId = parentId != 0 ? parentId : null;
        }
예제 #2
0
        public List <ALM.Task> GetTasks(DateTime fromdate, DateTime?toDate)
        {
            List <ALM.Task>    onlineTasks = new List <ALM.Task>();
            QueryHierarchyItem tasksQuery  = _queriesFolder.Children?.FirstOrDefault(qhi => qhi.Name.Equals(TasksQueryName, StringComparison.InvariantCulture));

            if (tasksQuery == null)
            {
                tasksQuery = new QueryHierarchyItem
                {
                    Name = TasksQueryName,
                    Wiql = string.Format(CultureInfo.InvariantCulture,
                                         "SELECT [System.Id]," +
                                         "[System.IterationId]," +
                                         "[System.CreatedDate]," +
                                         "[System.Title]," +
                                         "[System.State]," +
                                         "[System.AssignedTo]," +
                                         "[Microsoft.VSTS.Scheduling.CompletedWork]," +
                                         "[Microsoft.VSTS.Scheduling.OriginalEstimate]," +
                                         "[Microsoft.VSTS.Scheduling.RemainingWork]," +
                                         "[Microsoft.VSTS.Common.Activity]" +
                                         "FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Task' AND [System.State] <> 'Removed' AND[System.CreatedDate] >= '{0:MM / dd / yyyy}'", fromdate),
                    IsFolder = false
                };
                if (toDate?.Year != 1)
                {
                    tasksQuery.Wiql += string.Format(CultureInfo.InvariantCulture, Environment.NewLine + "AND [System.CreatedDate] <= '{1:MM/dd/yyyy}'", toDate);
                }
                tasksQuery = _workItemTrackingClient.CreateQueryAsync(tasksQuery, OnlineTfsTeamProjectName, _queriesFolder.Id.ToString()).Result;
            }
            WorkItemQueryResult tasksQueryResult = _workItemTrackingClient.QueryByIdAsync(tasksQuery.Id).Result;

            if (tasksQueryResult.WorkItems.Any())
            {
                int       skip      = 0;
                const int batchSize = 100;
                IEnumerable <WorkItemReference> workItemRefs;
                do
                {
                    workItemRefs = tasksQueryResult.WorkItems.Skip(skip).Take(batchSize);
                    if (workItemRefs.Any())
                    {
                        var workItems = _workItemTrackingClient.GetWorkItemsAsync(workItemRefs.Select(wir => wir.Id), expand: WorkItemExpand.All).Result;
                        foreach (var workItem in workItems)
                        {
                            int parentId = 0;
                            if (workItem.Relations != null)
                            {
                                foreach (var relation in workItem.Relations)
                                {
                                    if (!relation.Rel.ToUpperInvariant().Equals(ParentRelationType.ToUpperInvariant(), StringComparison.InvariantCulture))
                                    {
                                        continue;
                                    }
                                    string path = relation.Url;
                                    int    pos  = path.LastIndexOf("/", StringComparison.Ordinal) + 1;
                                    int.TryParse(path.Substring(pos, path.Length - pos), out parentId);
                                }
                            }
                            ALM.Task task = new ALM.Task();
                            FillTasksData(task, workItem.Fields, parentId);
                            onlineTasks.Add(task);
                        }
                    }
                    skip += batchSize;
                } while (workItemRefs.Count() == batchSize);
            }
            return(onlineTasks);
        }