Получить иерархию детей, используя WorkItemLinks

Я пытаюсь получить всех детей с заданным идентификатором рабочего элемента из TFS, используя TFS API и C#

Вот сценарий

Особенность (Id: 1)

-> Элемент незавершенного производства (Id: 2) -> Задача (Id: 3)

-> Товар в резерве товара (Id: 4)

Работа с идентификатором: 1 имеет 2 детей с идентификаторами 2 и 4

Id: 2 имеет ребенка с Id: 3

Когда передан идентификатор рабочего элемента, я хочу получить все дочерние элементы, заполнить дерево, так что для вышеописанного сценария I при пропуске Id: 1 метод должен вернуть все дочерние идентификаторы 2, 3, 4. Вот что у меня есть, с трудом делать рекурсивный вызов,, может кто-нибудь помочь мне

Примечание: я не хочу использовать wiql для возврата иерархии, я хочу вернуть все дочерние элементы, используя WorkItemLinks

 public List<string> getWorkItemChildren(string Collection, string Project, int Id)
    {
        var teamCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("tfsConnection" + Collection));
        teamCollection.EnsureAuthenticated();
        WorkItemStore store = new WorkItemStore(teamCollection);
        Query query = new Query(store, "select * from issue where System.TeamProject = @project", new Dictionary<string, string>() { { "project", Project } });
        query.RunQuery();
        WorkItem workitem = store.GetWorkItem(Id);
        int parentLinkId = store.WorkItemLinkTypes.LinkTypeEnds["Parent"].Id;

        List<int> relatedWorkItemIds = new List<int>();
        List<string> relatedWorkItemType = new List<string>();
        if(workitem.Links.Count!=0)
        {
            foreach (WorkItemLink link in workitem.WorkItemLinks)
            {
                if (link.LinkTypeEnd.Id != parentLinkId)
                {
                    relatedWorkItemIds.Add(link.TargetId);

                }
            } 
        foreach (var linkType in relatedWorkItemIds)
        {
            WorkItem relatedWorkItem = store.GetWorkItem(linkType);
            relatedWorkItemType.Add(relatedWorkItem.Type.Name);
            foreach(WorkItemLink childlinks in relatedWorkItem.WorkItemLinks)
            {

            }
        }

        return relatedWorkItemType;

        } 
    }

1 ответ

Вам необходимо использовать:

Store.GetWorkItem (123);

Затем выполните итерацию по ссылкам, и для каждого дочернего типа ссылок сделайте то же самое.

Затем повторяется...

Другие вопросы по тегам