Моя конечная цель - получить родительский элемент одного рабочего элемента за раз рекурсивно, пока в иерархии не будет больше родителей. На данный момент нет ничего рекурсивного, я все еще в состоянии оптимизировать способ получения родительского элемента работы. Я придумал способ делать это с участием запроса:TFS API. Как получить родительский элемент рабочего элемента.
public WorkItem GetParentWorkItem(int id)
{
StringBuilder queryString = new StringBuilder("SELECT [System.Id]" +
" FROM WorkItemLinks " +
" WHERE [Source].[System.WorkItemType] = '" + TFS_TIMESHEET_WORK_ITEM_TYPE + "'" +
" AND [Source].[System.TeamProject] = '" + TFS_TIMESHEET_PROJECT_KEY + "'" +
" AND [Source].[System.Id] = " + id
);
Query wiQuery = new Query(GetWorkItemStore, queryString.ToString());
WorkItemLinkInfo[] wiTrees = wiQuery.RunLinkQuery();
WorkItem wi = GetWorkItemStore.GetWorkItem(wiTrees[1].TargetId);
return wi;
}
Проблема этого метода состоит в том, что он получает все связанные элементы работы, в том числе предшественника, преемника, детей и родителей. Я знал, что wiTrees[1]
является родительским рабочим элементом, поэтому я жестко закодировал индекс.
Я нашел способ, чтобы получить «родительский» WorkItemTypeEnd
объект из хранилища рабочего элемента:
WorkItemLinkTypeEnd linkTypEnd = GetWorkItemStore.WorkItemLinkTypes.LinkTypeEnds["Parent"];
Куда я иду отсюда?
вы можете расширить свой запрос, используя режим (mustcontain) для извлечения только запросы с указанным типом связи, что, как вы знаете наверняка, что вы извлечения правильные: 'SELECT [System.Id] FROM WorkItemLinks WHERE ([Source]. [System.WorkItemType] = 'Пользовательская история") И ([System.Links.LinkType] =' Parent ')) (MustContain) '(см .: http://msdn.microsoft.com/en-us/library/bb130306.aspx#sectionToggle2) – jessehouwing