2009-03-06 12 views
5

estamos escribiendo una herramienta personalizada utilizando las API de cliente de TFS, para conectarse a TFS, en busca de elementos de trabajo para un proyecto, etc.TFS Client API: ¿pregunta para obtener elementos de trabajo vinculados a un archivo específico?


estamos consultando el almacén de elementos de trabajo, utilizando WIQL.

Dado un nombre de archivo completo, ¿cuál es la forma más fácil de obtener una lista de elementos de trabajo que tienen conjuntos de cambios que contienen el archivo especificado?

Respuesta

4

no estoy seguro de que hay una manera fácil de hacer la consulta que se está solicitando el uso de la API de TFS. Sé que definitivamente no puedes hacerlo usando WIQL. Creo que, usando la API, tendrías que iterar sobre todos los elementos de trabajo: obtener los enlaces del conjunto de cambios en ellos y luego buscar en cada conjunto de cambios la ruta del archivo que estás buscando. Esto obviamente no es mucho uso.

Sin embargo, podría obtener esos datos utilizando la base de datos TFS Data Warehouse. Esta información se retrasará con respecto a la información de la tienda operacional en vivo porque el almacén solo se actualiza periódicamente, pero le permitirá realizar un seguimiento de las cosas por la dimensión carpeta/archivo con bastante facilidad.

-2

Haga clic con el botón derecho en el Explorador de soluciones y seleccione Ver historial. Obtendrás una lista de conjuntos de cambios. Al hacer doble clic en un conjunto de cambios aparecerá un cuadro de diálogo donde puede ver los elementos de trabajo relacionados.

+0

En este momento, estoy hablando acerca del uso de WIQL para consultar el TFS de una herramienta personalizada que estamos desarrollando. – amazedsaint

2

Este pequeño fragmento de código obtendrá una colección de elementos de trabajo con un nombre de servidor TFS y un proyecto .. También filtra los elementos de trabajo en el estado eliminado.

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

Me acabo de dar cuenta de que está buscando una forma de obtener una lista de todos los elementos de trabajo que tienen conjuntos de cambios que afectan un archivo específico. –

+0

y la consulta WIQL le dará todos los elementos de trabajo, entonces supongo que puede iterar cada elemento de trabajo que tiene enlaces. Si los enlaces son conjuntos de cambios, puede ver si los conjuntos de cambios contienen el archivo en cuestión. Veré si puedo codificar algo así, revisaré mi respuesta más tarde. –

+0

yo estaba tratando el código que ha proporcionado, y tiene la advertencia de que la clase TeamFoundationServer está en desuso en TFS 2010. Solía ​​\t 'TFS TfsTeamProjectCollection = new TfsTeamProjectCollection (nueva Uri (servidor)); tfs.EnsureAuthenticated(); 'que funciona, pero la consulta parece ejecutarse para siempre (y no llega a su fin). ¿Tienes alguna pista? – Matt

1

Para 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

Para TFS 2013 siguiente código funciona para acceder a la información del proyecto 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; 
Cuestiones relacionadas