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

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

Azure DevOps Services Rest Api. 4. Выполнение запросов по рабочим элементам

Posted by Shamrai Alexander на Октябрь 17, 2018

<< Перейти в радел «Azure DevOps Services (TFS/VSTS) Rest Api»

Основным клиентом для работы с запросами по рабочим элементам является WorkItemTrackingHttpClient. Используются следующие методы:

  • GetQueryAsync – информация о запросе по рабочим элементам.
  • QueryByWiqlAsync – выполнение запроса WIQL.
  • CreateQueryAsync – создание нового запроса по рабочим элементам.
  • UpdateQueryAsync – обновление существующего запроса.
  • DeleteQueryAsync – удаление существующего запроса.

Получить детальную информацию об известном запросе по рабочим элементам можно через метод GetQueryAsync со следующими основными параметрами:

  1. project – имя командного проекта, в котором находится запрос.
  2. query – путь к запросу, детализацию которого нужно получить.
  3. expand – уровень детализации информации о запросе.
  4. depth – количество уровней дочерних запросов и каталогов, который будет загружен в ответ метода

Пример выполнения метода:

QueryHierarchyItem detiledQuery = WitClient.GetQueryAsync(project, query.Path, QueryExpand.All, 1).Result;

Результатом является экземпляр класса detiledQuery со следующими полезными атрибутами:

  1. Name – наименование запроса
  2. Path – полный путь к запросу.
  3. IsFolder – признак, что это каталог.
  4. Wiql – Wiql текст запроса
  5. HasChildren – признак, что существуют дочерние экземпляры.
  6. Children – список дочерних экземпляров.

Для получения информации о корневых запросах (обычно это «Мои запросы» и «Общие запросы») можно использовать метод GetQueriesAsync, который имеет почти такие же параметры, как и в GetQueryAsync. Отличается только отсутствием параметра query, т.к. выполняется получение информации из корня дерева запросов.

List<QueryHierarchyItem>
rootQueries = WitClient.GetQueriesAsync(project, QueryExpand.All).Result;

Выполнить запрос можно через метод QueryByWiqlAsync со следующими параметрами:

  1. wiql – текст запроса на основе синтаксиса WIQL.
  2. project – наименование командного проекта, если используется макрос @project в теле запроса.

Пример выполнения метода:

WorkItemQueryResult result = WitClient.QueryByWiqlAsync(wiql, teamProject).Result;

Результат WorkItemQueryResult может быть обработан двумя методами:

1. Если запрос является простым списком, то получить список идентификаторов рабочих элементов можно из атрибута WorkItems. Этот атрибут включает список из WorkItemReference, который включает Id рабочего элемента и его URL.

foreach (var wiRef in result.WorkItems)

{

var wi = GetWorkItem(wiRef.Id);

Console.WriteLine(String.Format(«{0} — {1}», wi.Id, wi.Fields[«System.Title»].ToString()));

}

2. Если запрос включает ссылки, то результат можно получить из атрибута WorkItemRelations, который представляет собой список экземпляров WorkItemLink. WorkItemLink включает атрибуты:

  1. Rel – системное наименование ссылки. Наименование будет пустым, если это элемент верхнего уровня.
  2. Source – экземпляр WorkItemReference, который определяет рабочий элемент источник ссылки. Будет равным null, если это элемент верхнего уровня.
  3. Target – экземпляр WorkItemReference, который определяет рабочий элемент, на который ссылаются.

Пример использования:

foreach (var wiRel in result.WorkItemRelations)

{

if (wiRel.Source == null)

{

var wi = GetWorkItem(wiRel.Target.Id);

Console.WriteLine(String.Format(«Top Level: {0} — {1}», wi.Id, wi.Fields[«System.Title»].ToString()));

}

else

{

var wiParent = GetWorkItem(wiRel.Source.Id);

var wiChild = GetWorkItem(wiRel.Target.Id);

Console.WriteLine(String.Format(«{0} —> {1} — {2}», wiParent.Id, wiChild.Id, wiChild.Fields[«System.Title»].ToString()));

}

}

Запрос по рабочим элементам можно сконструировать с помощью синтаксиса WIQL: Syntax for the Work Item Query Language (WIQL). Однако можно пойти простым путем:

  1. В Visual Studio создать запрос и сохранить его на локальный диск:

  1. Сам текст WIQL можно просмотреть в теле запроса с помощью блокнота:

Если же необходимо выполнить запрос, который хранится на сервисе, то это можно сделать следующими шагами:

  1. Получить WIQL текст запроса через метод GetQueryAsync
  2. Выполнить запрос через метод QueryByWiqlAsync

Пример выполнения сохраненного запроса:

QueryHierarchyItem query = WitClient.GetQueryAsync(teamProject, queryPath, QueryExpand.Wiql).Result;

WorkItemQueryResult result = WitClient.QueryByWiqlAsync(query.Wiql, teamProject).Result;

Пример тестового приложения можно посмотреть здесь:

https://github.com/ashamrai/TFRestApi/blob/master/04.TFRestApiAppWorkItemQueries

English version

Один ответ to “Azure DevOps Services Rest Api. 4. Выполнение запросов по рабочим элементам”

  1. Дополнительный редактор WIQL запросов в магазине Visual Studio: https://marketplace.visualstudio.com/items?itemName=ottostreifel.wiql-editor

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

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

Логотип WordPress.com

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

Google photo

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

Фотография Twitter

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

Фотография Facebook

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

Connecting to %s

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