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 или просто получить все рабочие элементы в этом проекте?
Ответы
Ответ 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);