API de TFS - Cómo obtener elementos de trabajo de un proyecto de Equipo específico


Estoy tratando de consultar un solo proyecto de equipo en el principal TfsTeamProjectCollection que contiene 194 Proyectos de Equipo en total. Sé exactamente cómo obtener un WorkItem por Id de un WorkItemStore. La cosa es, que al hacer esto, la API busca en TODOS los de los proyectos en la colección y la consulta toma alrededor de un minuto. Esto es demasiado lento, debe haber una manera de consultar los elementos de trabajo directamente desde un solo proyecto de equipo ? Aquí está el código que tengo:

    private Uri collectionUri;
    private TfsTeamProjectCollection projectCollection;
    private WorkItemStore workItemStore;

    public Project GetTeamProject()
    {
        projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(collectionUri);

        workItemStore = projectCollection.GetService<WorkItemStore>();
        Project teamProject = workItemStore.Projects[TFS_PROJECT_KEY];
        return teamProject;
    }

Ahora que tengo el Proyecto del Equipo estoy interesado en, ¿cómo puedo consultar los elementos de trabajo por ID o simplemente obtener todos los elementos de trabajo en este proyecto ?

Author: JF Beaulieu, 2012-02-13

2 answers

Probablemente sea más eficiente usar una consulta para encontrar los workitems que te interesan. Puede agregar un Where project = '@ Project ' a la consulta para limitar el alcance solo a ese proyecto. Al llamar primero a BeginQuery y luego a EndQuery, obtendrás una colección de workitem solo para los elementos que estabas buscando.

La forma más fácil de obtener la consulta wql requerida es crear una consulta en Team Explorer, luego usar archivo->guardar como (en modo de edición) para guardarla en archivo. Abre ese archivo en Bloc de notas para copiar la consulta de allí.

Alternativamente puede usar el WorkItemStore.Método de consulta directamente para lograr lo mismo.

 15
Author: jessehouwing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-13 20:08:13

Podrías intentar algo como esto para obtener todos los WIs dentro de teamProject:

WorkItemCollection workItemCollection = workItemStore.Query(
     " SELECT [System.Id], [System.WorkItemType],"+    
     " [System.State], [System.AssignedTo], [System.Title] "+ 
     " FROM WorkItems " +
     " WHERE [System.TeamProject] = '" + teamProject.Name +
    "' ORDER BY [System.WorkItemType], [System.Id]");

Y esto para obtener un ID de WorkItem específico:

WorkItem workItem = workItemStore.GetWorkItem(555);
 36
Author: pantelif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-13 22:40:01