Заметки консультанта

Шамрай Александр Владимирович

Создание коллекции проектов TFS 2015 через API

Posted by Шамрай Александр на Декабрь 21, 2015

Для автоматизации создания коллекции проектов используется метод QueueCreateCollection через интерфейс ITeamProjectCollectionService, который формирует задачу на создание новой коллекции. Этот метод имеет следующие параметры:

QueueCreateCollection(string name /*Название*/, string description /*Описание*/, bool isDefault /*коллекция по умолчанию*/, string virtualDirectory /*виртуальная директория*/, TeamFoundationServiceHostStatus state /*состояние после создания*/, IDictionary<string, string> servicingTokens /*сервисные данные*/);

Если с простыми параметрами все понятно, то сложность заключается в получении сервисных маркеров для портала проектов и сервера отчетности. Для создания используются следующие ключи:

  • SharePointAction со значениями CreateSite или None
  • SharePointSitePath – относительный путь для сайтов SharePoint в коллекции
  • SharePointServer – ключ сервера SharePoint
  • ReportingAction со значениями CreateFolder или None
  • ReportFolder – относительный путь для отчетности коллекции
  • ReportServer – ключ сервера отчетности

Пример:

Dictionary<string, string> servicingTokens = new
Dictionary<string, string>();

servicingTokens.Add(«SharePointAction», «CreateSite»);

servicingTokens.Add(«SharePointSitePath», «sites/» + newCollectionName);

servicingTokens.Add(«ReportingAction», «CreateFolder

servicingTokens.Add(«ReportFolder», «/TfsReports/» + newCollectionName);

Данные серверов отчетности и сайтов SharePoint можно получить из сервисной задачи создания коллекции TFS, которая выполнялась ранее. Она имеет название «Microsoft.TeamFoundation.JobService.Extensions.Core.ServicingJobExtension». Получить ключи можно по следующему примеру:

TeamFoundationJobDefinition[] _jobs = _jobservice.QueryJobs();

IEnumerable<TeamFoundationJobDefinition> _job = from a in _jobs where a.ExtensionName == «Microsoft.TeamFoundation.JobService.Extensions.Core.ServicingJobExtension»
select a;

if (_job.Count() > 0)

{


TeamFoundationJobDefinition _createcollection = _job.ElementAt(0);


XmlNodeList _nodes = _createcollection.Data.SelectNodes(«ServicingTokens/KeyValueOfStringString»);


foreach (XmlNode _node in _nodes)

{


if (_node.FirstChild.Name == «Key» && _node.FirstChild.InnerText == «SharePointServer») servicingTokens.Add(_node.FirstChild.InnerText, _node.LastChild.InnerText);


if (_node.FirstChild.Name == «Key» && _node.FirstChild.InnerText == «ReportServer») servicingTokens.Add(_node.FirstChild.InnerText, _node.LastChild.InnerText);

}

}

Теперь осталось выполнить формирование задачи для создания новой коллекции:

ITeamProjectCollectionService _tpcService = _tfsc.GetService<ITeamProjectCollectionService>();

ServicingJobDetail _createJob = _tpcService.QueueCreateCollection(newCollectionName, «Collection from console app», false, string.Format(«~/{0}/», newCollectionName), TeamFoundationServiceHostStatus.Started, servicingTokens);

TeamProjectCollection tpc = _tpcService.WaitForCollectionServicingToComplete(_createJob);

Пример можно скачать здесь.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

 
%d такие блоггеры, как: