TFS Client API - Запрос, чтобы получить рабочие элементы, связанные с конкретным файлом? - PullRequest
5 голосов
/ 06 марта 2009

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


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

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

Ответы [ 4 ]

4 голосов
/ 06 марта 2009

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

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

2 голосов
/ 10 июня 2011

Этот небольшой фрагмент кода предоставит вам коллекцию рабочих элементов с именем сервера 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;
            }
        }
    }
1 голос
/ 17 июля 2013

Для 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]=@Me";
        WorkItemCollection queryResults = workItemStore.Query(query);

    }
0 голосов
/ 09 февраля 2015

Для 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...