Использование TFS WIQL для получения идентификаторов ревизий для пользовательской истории?
Получение пользовательских историй, назначенных мне
WorkItemStore _WorkItemStore = (WorkItemStore) __ProjectCollection.GetService(typeof(WorkItemStore));
String _Query = @"SELECT [System.Id] FROM WorkItems where [Assigned to] = @Me AND [Work Item Type] = 'User Story'";
WorkItemCollection _Collection = _WorkItemStore.Query(_Query);
Пользовательская история может иметь тип рабочего элемента "Задача" или "Ошибка", назначенный ему как дочерний элемент. Затем с ошибками / задачами связаны наборы изменений.
Могу ли я получить список этих наборов изменений, которые прикреплены к задачам / ошибкам, которые являются дочерними элементами этих пользовательских историй?
1 ответ
Я добавляю этот ответ в качестве альтернативы, однако я все еще хотел бы знать, возможно ли достичь того же результата с помощью запроса WIQL.
Рекурсивная функция, которую я написал для извлечения всех наборов изменений для пользовательской истории, которые связаны с любыми дочерними рабочими элементами.
public List<Changeset> Query(int id, List<Changeset> associatedChangesets)
{
WorkItemStore _WorkItemStore = (WorkItemStore) __ProjectCollection.GetService(typeof(WorkItemStore));
WorkItem _WorkItem = _WorkItemStore.GetWorkItem(id);
List<Changeset> _AssociatedChangesets;
if (associatedChangesets == null)
{
_AssociatedChangesets = new List<Changeset>();
}
else
{
_AssociatedChangesets = associatedChangesets;
}
foreach (Link _Link in _WorkItem.Links)
{
RelatedLink _RelatedLink = null;
ExternalLink _ExternalLink = null;
if(_Link is RelatedLink)
{
_RelatedLink = (RelatedLink)_Link;
}
else if(_Link is ExternalLink)
{
_ExternalLink = (ExternalLink)_Link;
}
if (_ExternalLink != null)
{
ArtifactId _Artifact = LinkingUtilities.DecodeUri(_ExternalLink.LinkedArtifactUri);
if (String.Equals(_Artifact.ArtifactType, "Changeset", StringComparison.Ordinal))
{
_AssociatedChangesets.Add(__VersionControl.ArtifactProvider.GetChangeset(new Uri(_ExternalLink.LinkedArtifactUri)));
}
}
if (_RelatedLink != null)
{
if (String.Equals(_RelatedLink.LinkTypeEnd.Name, "Child", StringComparison.Ordinal))
{
associatedChangesets = Query(_RelatedLink.RelatedWorkItemId, _AssociatedChangesets);
}
}
}
return associatedChangesets;
}