2009-03-06 2 views
5

Мы пишем собственный инструмент, используя клиентские интерфейсы TFS, чтобы подключиться к TFS, чтобы принести рабочие элементы для проекта и т.д.API-интерфейс TFS Client - запрос на получение рабочих элементов, связанных с определенным файлом?


Мы запрашивая магазин рабочего элемента, используя WIQL.

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

ответ

4

Я не уверен, что есть простой способ выполнить запрос, который вы запрашиваете с помощью TFS API. Я знаю, что вы определенно не можете это сделать, используя WIQL. Я думаю, используя API, вам придется перебирать все рабочие элементы - получите в них ссылки на набор изменений, а затем загляните в каждый набор изменений для пути к файлу, который вы используете. Очевидно, это не так много.

Однако вы можете получить эти данные, используя базу данных хранилища данных TFS. Эта информация будет отставать от информации о реальном оперативном хранилище, потому что склад периодически обновляется, но позволяет вам легко отслеживать вещи по размеру папки/файла.

-2

Щелкните правой кнопкой мыши файл в обозревателе решений и выберите «Просмотр истории». Вы получите список наборов изменений. Двойной щелчок на наборе изменений вызовет диалог, в котором вы можете увидеть связанные рабочие элементы.

+0

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

2

Этот небольшой фрагмент кода предоставит вам набор рабочих элементов с именем сервера TFS и проектом .. Он также отфильтровывает рабочие элементы в удаленном состоянии.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.WorkItemTracking.Client; 

    namespace EngineTFSAutomation 
    { 
     class TFSHelper 
     { 
      static public WorkItemCollection QueryWorkItems(string server, string projectname) 
      { 
       TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(server); 
       WorkItemStore workItemStore = (WorkItemStore)tfs.GetService(typeof(WorkItemStore)); 
       Project p = workItemStore.Projects[projectname]; 
       string wiqlQuery = "Select * from Issue where [System.TeamProject] = '"+projectname+"'"; 
       wiqlQuery += " and [System.State] <> 'Deleted'"; 
       wiqlQuery+= " order by ID"; 
       WorkItemCollection witCollection = workItemStore.Query(wiqlQuery); 
       return witCollection; 
      } 
     } 
    } 
+0

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

+0

хорошо, WIQL-запрос даст вам все рабочие элементы, тогда я полагаю, вы можете перебирать каждый рабочий элемент со ссылками. Если ссылки являются наборами изменений, вы можете увидеть, содержит ли набор изменений этот файл. Я посмотрю, смогу ли я закодировать что-то подобное, я позже переработаю свой ответ. –

+0

Я пробовал код, который вы предоставили, и получил предупреждение о том, что класс TeamFoundationServer устарел в TFS 2010. Я использовал \t 'TfsTeamProjectCollection tfs = new TfsTeamProjectCollection (новый Uri (сервер)); tfs.EnsureAuthenticated(); 'который работает, но запрос, похоже, работает вечно (и не подходит к концу). У вас есть намек? – Matt

1

Для TFS 2012

Uri tfsUri = new Uri("http://xxx.xx.xx.xxx:8080/tfs2012"); 
    TfsConfigurationServer configurationServer =TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);     
    ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren(new[] {CatalogResourceTypes.ProjectCollection },false,CatalogQueryOptions.None); 

    foreach (CatalogNode collectionNode in collectionNodes) 
    { 
     // Use the InstanceId property to get the team project collection 
     Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]); 
     TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId); 

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

     string query = "SELECT [System.Id] FROM WorkItems where [Assigned to][email protected]"; 
     WorkItemCollection queryResults = workItemStore.Query(query); 

    } 
0

Для TFS 2013 Следующий код работает для доступа проекта TFS Информация:

var tfsUri = new Uri("http://tfs.xxx.xxx.com:8080/tfs/myCollection"); 
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri); 
tfs.EnsureAuthenticated(); 
var iis = tfs.GetService<Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore>(); 
// here access to a particular Project with its name 
var uriWithGuid = iis.Projects["My project name"].Uri;