2012-05-25 1 views
11

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

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

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

ответ

9

Найдено article относительно этого вопроса.

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

Редактировать: Я также написал post об этом в своем блоге.

16

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

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

После того как вы спасены, что вы будете иметь возможность:

  1. Открыть запрос в VS & Team Web Access
  2. Tie запрос с Excel & работает с WI из Excel.
  3. Поймайте результаты запроса с помощью 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); 
        } 
       } 
      }  
     } 
    } 
} 
+0

Are есть ли преимущества в производительности для сохранения запроса? У меня также есть элементы на «третьем» слое, который мне нужно получить, и я до сих пор не смог понять, как это сделать. То есть, ошибки связаны с тестовыми случаями, которые связаны с рабочим элементом требования. –

+0

Получение запроса от TFS должно иметь, по сути, ограничение производительности. Это было бы минимальным. Основной выигрыш заключается в том, что вы можете визуализировать в VS результаты и поддерживать их легко и последовательно. Другой вариант (имеющий жестко закодированную строку WIQL в вашем консольном приложении) может оказаться в долгосрочной перспективе менее ремонтопригодным. – pantelif

+0

«Третий» уровень, о котором вы говорите, недоступен из визуально сгенерированных запросов в VS, но вы, безусловно, можете сделать это с помощью C#. – pantelif