Подтвердить что ты не робот

TFS API - Как получить рабочие элементы из определенного Team Project

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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