How to retrieve list of child tasks from a Product Backlog Item in TFS API?
As a standard, team project in MSF Agile comes with a set of queries. Take a look at 'Work Items' -> 'Iteration 1' -> 'Iteration Backlog'.
Saving this query as WIQL file in your disk is absolutely possible.
Using it as a modified wiqlQuery
should relieve you from a lot of the filtering you do.
EDIT (in response to comment: "Ok, I did that, but the query doesn't mention the relationship between parent and linked (child) items"):
I opened the WIQL of a default "Iteration Backlog":
<?xml version="1.0" encoding="utf-8"?>
<WorkItemQuery Version="1">
<TeamFoundationServer>
http://****>
<TeamProject>****</TeamProject>
<Wiql>SELECT [System.Id], [System.WorkItemType], [System.Title],
[System.State], [System.AssignedTo],
[Microsoft.VSTS.Scheduling.RemainingWork],
[Microsoft.VSTS.Scheduling.CompletedWork],
[Microsoft.VSTS.Scheduling.StoryPoints],
[Microsoft.VSTS.Common.StackRank],
[Microsoft.VSTS.Common.Priority],
[Microsoft.VSTS.Common.Activity], [System.IterationPath],
[System.AreaPath] FROM WorkItemLinks WHERE
(Source.[System.TeamProject] = @project and
Source.[System.AreaPath] under @project and
Source.[System.IterationPath] under '****\Iteration 1' and
(Source.[System.WorkItemType] = 'User Story' or
Source.[System.WorkItemType] = 'Task')) and
[System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
and Target.[System.WorkItemType] = 'Task' ORDER BY
[Microsoft.VSTS.Common.StackRank],
[Microsoft.VSTS.Common.Priority] mode(Recursive)</Wiql>
</WorkItemQuery>
The part of the query that retrieves the related items should be this
[System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
Padu Merloti
Curious learner. Family lover. Air faller. Robot maker. Software developer.
Updated on June 18, 2022Comments
-
Padu Merloti almost 2 years
Given a certain product backlog id, I want to programmatically retrieve a list of tasks that are child to the PBI.
I am aware that there's not one field in the task that says "Parent PBI Id". I have a version of code that is working, but that's really really slow, since I have do perform part of my filtering int the client.
See how I'm currently doing:
string wiqlQuery = string.Format( "Select ID, [Remaining Work], State " + "from WorkItems " + "where (([Work Item Type] = 'Task')" + " AND ([Iteration Path] = '{0}' )" + " AND (State <> 'Removed')" + " AND (State <> 'Done')) ", sprint, storyId); // execute the query and retrieve a collection of workitems WorkItemCollection workItems = wiStore.Query(wiqlQuery); if (workItems.Count <= 0) return null; var result = new List<TaskViewModel>(); foreach (WorkItem workItem in workItems) { var relatedLink = workItem.Links[0] as RelatedLink; if (relatedLink == null) continue; if (relatedLink.RelatedWorkItemId != storyId) continue; Field remWorkField = (from field in workItem.Fields.Cast<Field>() where field.Name == "Remaining Work" select field).FirstOrDefault(); if (remWorkField == null) continue; if (remWorkField.Value == null) continue; var task = new TaskViewModel { Id = workItem.Id, ParentPbi = relatedLink.RelatedWorkItemId, RemainingWork = (double) remWorkField.Value, State = workItem.State }; result.Add(task); } return result;
-
Padu Merloti over 12 yearsI'm using the Scrum template, but I think I know what you're talking about. In my case I have a "Sprint Backlog" query that does what I want, but I don't see any way to save it to disk or how to see the string query that is being used. It is a query of type "Tree of Work Items"
-
pantelif over 12 yearsI myself wasn't aware of this as well, and caught it in this thread stackoverflow.com/questions/6534060/…. Once you have saved the file you can open it in any editor and copy the WIQL query in your C#
-
Padu Merloti over 12 yearsOk, I did that, but the query doesn't mention the relationship between parent and linked (child) items
-
Admin about 6 yearsi can't find LinkType in he fields col. @PaduMerloti
-
Admin about 6 years@pantelif can't find LinkType