Получение рабочих элементов и связанных с ними рабочих элементов в одном запросе с использованием API TFS

Кто-нибудь знает, можно ли получить список рабочих элементов и их связанных рабочих элементов за одну поездку из TFS, используя их веб-службы TFS API?

В настоящий момент нам нужно сделать второй вызов для каждого из рабочих элементов, сделанных во время первого вызова, и представляет проблему с производительностью.

Если это невозможно, есть ли способ заглянуть в тип связанного рабочего элемента без их извлечения (например, посмотреть, является ли это задачей или проблемой)?

Ответ 1

Нашел статью относительно этой проблемы.

Он позволяет использовать запрос дерева, в котором вы можете получить идентификаторы родительских элементов и связать элементы ids в одном запросе. Используя это, второй запрос может быть использован для получения фактических подробных объектов рабочих элементов. Два вопроса для решения проблемы.

Изменить: я также написал post об этом в своем блоге.

Ответ 2

статья, на которую вы ссылаетесь в своем ответе, представляет собой способ делать то, что вам нужно, используя WIQL. Конечно, не плохой выбор.

Еще один способ, на мой взгляд, лучше всего просто генерировать графически запрос, который дает результаты, которые вы после. Вам, вероятно, нужны простые "Рабочие элементы и прямая ссылка":
enter image description here

Как только вы сохранили, что сможете:

  • Откройте запрос в VS и Team Web Access
  • Свяжите запрос с Excel и работайте с WI из Excel
  • Получить результаты запроса с помощью TFS-API.

В последнем случае, если ваш запрос называется "MyLinkedQuery" и он находится в разделе "Командные запросы" TeamProject "MyProj", вы можете сделать что-то вроде этого:

using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;

namespace LinkedQueryResults
{
    class Program
    {
        static void Main()
        {
            TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSURL"));

            var workItemStore = (WorkItemStore)teamProjectCollection.GetService(typeof(WorkItemStore));

            var project = workItemStore.Projects["MyProj"];
            QueryHierarchy queryHierarchy = project.QueryHierarchy;
            var queryFolder = queryHierarchy as QueryFolder;
            QueryItem queryItem = queryFolder["Team Queries"];
            queryFolder = queryItem as QueryFolder;

            if (queryFolder != null)
            {
                var myQuery = queryFolder["MyLinkedQuery"] as QueryDefinition;
                if (myQuery != null)
                {
                    var wiCollection = workItemStore.Query(myQuery.QueryText);
                    foreach (WorkItem workItem in wiCollection)
                    {
                        Console.WriteLine(workItem.Title); 
                    }
                }
            }       
        }
    }
}