воскресенье, 6 ноября 2011 г.

Доступ к WorkItem через объектную модель

В качестве системы управления проектами используем TFS. Возникло желание сделать Доску задач, не дожидаясь 2011 студии (в которой она уже встроена). Предполагается, что можно будет не только на нее любоваться, но и изменяя положение задач на доске менять статусы в TFS.
Для этого и захотелось залезть в TFS напрямую.

У меня проект на WPF, с биндингом, блекджеком и шлюхами. Чтобы все это не отвлекало от сути, буду выкладывать только код с необходимыми пояснениями.
1. Для подключения к серверу используем свойство:
 public TfsConfigurationServer Server
2. Подключаемся и грузим все ProjetCollection которые есть на сервере:
Server = TfsConfigurationServerFactory.GetConfigurationServer(new Uri(tbServer.Text, UriKind.Absolute));
ReadOnlyCollection<CatalogNode> collectionNodes = Server.CatalogNode.QueryChildren(
       new[] { CatalogResourceTypes.ProjectCollection },
       false, CatalogQueryOptions.None);
ProjectCollections = new ObservableCollection<TfsTeamProjectCollection>();
foreach (CatalogNode item in collectionNodes)
{
       ProjectCollections.Add(Server.GetTeamProjectCollection(new Guid(item.Resource.Properties["InstanceId"])));
}
SelectedCollection = ProjectCollections.FirstOrDefault();
3. Дальше, как только меняется выбранная коллекция, я для нее гружу хранилище WorkItem-ов, а у него, если это необходимо, есть свойство Projects:
if (current.SelectedCollection != null)
{
       current.Store = new WorkItemStore(current.SelectedCollection);
       current.SelectedProject = current.Store.Projects.Count > 0 ? current.Store.Projects[0] : null;
}
4. Ну а дальше, имея хранилище, к нему можно делать запросы: lbWorkItems.ItemsSource = selector.Store.Query
                                        (
                                        @"SELECT [System.Id],
                                        [System.WorkItemType],
                                        [System.AssignedTo],
                                        [Microsoft.VSTS.Scheduling.StartDate],
                                        [Microsoft.VSTS.Scheduling.FinishDate],
                                        [System.Title]
                                        FROM WorkItems WHERE [System.TeamProject] = '" + selector.SelectedProject.Name + "'"
                                        );
Вместо заключения. Посмотрев на запрос можно придти в ужас. Как такое можно написать руками? А на самом деле и не надо. Для написания запросов можно воспользоваться Team Explorer-ом из Visual Studio. Пишем запрос. Созраняем его. А потом уже в нашей программе у проекта подглядываем в свойство QueryHierarhy.
На сегодня все, как появится что то работающее, обязательно поделюсь.

Комментариев нет:

Отправить комментарий