web-dev-qa-db-fra.com

API TFS - Comment récupérer des éléments de travail à partir d'un projet d'équipe spécifique

J'essaie d'interroger un seul projet d'équipe dans le TfsTeamProjectCollection principal qui contient 194 projets d'équipe au total. Je sais exactement comment obtenir un WorkItem par Id à partir d'un WorkItemStore. Le fait est que, ce faisant, l'API recherche dans TOUS des projets dans la collection et la requête prend environ une minute. C'est beaucoup trop lent, il doit y avoir un moyen d'interroger les éléments de travail directement à partir d'un projet d'équipe unique? Voici le code que j'ai:

    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;
    }

Maintenant que j'ai le projet d'équipe qui m'intéresse, comment puis-je rechercher des éléments de travail par ID ou simplement obtenir tous les éléments de travail de ce projet?

38
JF Beaulieu

Il est probablement plus efficace de tiliser une requête pour trouver les éléments de travail qui vous intéresse. Vous pouvez ajouter un Where project = '@Project' à la requête pour limiter la portée à ce projet uniquement. En appelant d'abord BeginQuery puis EndQuery, vous obtiendrez une collection d'éléments de travail pour les éléments que vous recherchiez.

La façon la plus simple d'obtenir la requête wql requise est de créer une requête dans Team Explorer, puis d'utiliser fichier-> enregistrer sous (en mode édition) pour l'enregistrer dans un fichier. Ouvrez ce fichier dans le Bloc-notes pour copier la requête à partir de là.

Alternativement, vous pouvez utiliser la méthode WorkItemStore.Query directement pour réaliser la même chose.

15
jessehouwing

Vous pouvez essayer quelque chose comme ceci pour obtenir tous les WI dans 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]");

Et cela pour obtenir un ID WorkItem spécifique:

WorkItem workItem = workItemStore.GetWorkItem(555);
36
pantelif