В качестве системы управления проектами используем TFS. Возникло желание сделать Доску задач, не дожидаясь 2011 студии (в которой она уже встроена). Предполагается, что можно будет не только на нее любоваться, но и изменяя положение задач на доске менять статусы в TFS.
Для этого и захотелось залезть в TFS напрямую.
У меня проект на WPF, с биндингом, блекджеком и шлюхами. Чтобы все это не отвлекало от сути, буду выкладывать только код с необходимыми пояснениями.
1. Для подключения к серверу используем свойство:
public TfsConfigurationServer Server
2. Подключаемся и грузим все ProjetCollection которые есть на сервере:
На сегодня все, как появится что то работающее, обязательно поделюсь.
Для этого и захотелось залезть в 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.На сегодня все, как появится что то работающее, обязательно поделюсь.
Комментариев нет:
Отправить комментарий