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; }
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); }