TFS API - Как получить рабочие элементы из определенного командного проекта - PullRequest
38 голосов
/ 13 февраля 2012

Я пытаюсь запросить один командный проект в главном TfsTeamProjectCollection, который содержит в общей сложности 194 командных проекта.Я точно знаю, как получить WorkItem по идентификатору из WorkItemStore.Дело в том, что благодаря этому API выполняет поиск в ALL проектов в коллекции, и запрос занимает около минуты.Это слишком медленно, должен быть способ запроса рабочих элементов непосредственно из одного командного проекта?Вот код, который у меня есть:

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

Теперь, когда у меня есть интересующий меня командный проект, как я могу запросить рабочие элементы по идентификатору или просто получить все рабочие элементы в этом проекте?

Ответы [ 2 ]

36 голосов
/ 14 февраля 2012

Вы можете попробовать что-то вроде этого для получения всех WI в пределах 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]");

И это, чтобы получить конкретный идентификатор WorkItem:

WorkItem workItem = workItemStore.GetWorkItem(555);
15 голосов
/ 13 февраля 2012

Вероятно, наиболее эффективно использовать запрос, чтобы найти рабочие элементы , которые вас интересуют. Вы можете добавить в запрос Where project = '@Project', чтобы ограничить область действия только этим проектом.Сначала вызвав BeginQuery, а затем EndQuery, вы получите коллекцию рабочих элементов только для тех элементов, которые вы искали.

Самый простой способ получить требуемый запрос wql - создать запрос в Team Explorer, а затем использовать файл.-> сохранить как (в режиме редактирования), чтобы сохранить его в файл.Откройте этот файл в Блокноте, чтобы скопировать запрос оттуда.

В качестве альтернативы вы можете напрямую использовать метод WorkItemStore.Query для достижения того же результата.

...