2012-05-25 9 views
11

¿Alguien sabe si es posible recuperar una lista de elementos de trabajo y sus elementos de trabajo vinculados en un viaje desde TFS utilizando su web de API TFS ¿servicios?Recuperar elementos de trabajo y sus elementos de trabajo vinculados en una sola consulta utilizando las API TFS

Por el momento, tenemos que hacer una segunda llamada para cada uno de los elementos de trabajo realizados durante la primera llamada, y está introduciendo un problema de rendimiento.

Si eso no es posible, ¿hay alguna manera de echar un vistazo al tipo de elemento de trabajo vinculado sin recuperarlos (por ejemplo, ver si se trata de una tarea o problema)?

Respuesta

9

Encontraron article con respecto a este problema.

Le permite usar una búsqueda en árbol, donde puede obtener los identificadores de elementos principales y los identificadores de elementos vinculados en una consulta. Al usar esto, se puede usar una segunda consulta para obtener los objetos de elementos de trabajo detallados reales. Dos consultas para resolver el problema.

Editar: También escribí un post sobre esto en mi blog.

16

El article al que se refiere en su respuesta presenta un método para hacer lo que está buscando, usando WIQL. Ciertamente, no es una mala elección.

Otra forma, en mi opinión mejor, es simplemente generar gráficamente la consulta que arroja los resultados que está buscando. Es probable que tenga un simple "Elementos de trabajo y de enlace directo":
enter image description here

Una vez que haya guardado que usted será capaz de:

  1. Abrir la consulta en VS & Equipo Web Access
  2. Tie la consulta con Excel & trabaja en WIs desde Excel
  3. Captura los resultados de la consulta con TFS-API.

Para la última parte, suponiendo que la consulta se denomina "MyLinkedQuery" y reside en "Consultas del equipo" de TeamProject "MyProj", se puede hacer algo como esto:

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

Son ¿Hay alguna ventaja en el rendimiento al guardar la consulta? También tengo elementos en una "tercera" capa que necesito recuperar, que aún no he podido descifrar cómo hacerlo. Es decir, Errores vinculados a Casos de prueba, que están vinculados al elemento de trabajo de requisito. –

+0

Recuperar la consulta de TFS debe tener, de hecho, una penalización de rendimiento. Esto sería mínimo sin embargo. La principal ventaja es que puede visualizar en VS los resultados y mantenerlo de manera fácil y consistente. La otra opción (tener una cadena WIQL codificada dentro de la aplicación de la consola) podría resultar a largo plazo menos sostenible. – pantelif

+0

El 'tercer' nivel que menciona no es accesible desde las consultas generadas visualmente en VS, pero ciertamente puede hacerlo con C#. – pantelif

Cuestiones relacionadas