Как я могу запросить рабочие элементы и связанные с ними изменения в TFS?

В TFS 2010 у меня есть рабочие элементы со связанными наборами изменений. Я могу создать запрос, который сообщает рабочие элементы, которые я ищу. Теперь я хочу сделать запрос Рабочие элементы и прямые ссылки, который включает в себя все changeets, связанные с этими рабочими элементами. В редакторе запросов я не могу найти никаких средств для указания набора изменений в качестве связанного элемента. Являются рабочими элементами единственным результатом, доступным для запроса?

Ответ 1

Я только что посетил веб-семинар, улучшивший сотрудничество разработчиков и тестеров, где я задал свой вопрос. Инструктор Ken Arneson из alpi.com подтвердил, что ссылки на набор изменений не могут быть обработаны через Редактор запросов в TFS Team Explorer. Чтобы получить доступ к ссылкам на наборах изменений, для доступа к "Кубу" необходимо использовать другие инструменты. У меня есть чему поучиться.

Ответ 2

Опция заключается в использовании TFS API, например, следующего фрагмента.

var projectCollection = new TfsTeamProjectCollection(
    new Uri("http://localhost:8080/tfs"),
    new UICredentialsProvider());
projectCollection.EnsureAuthenticated();
var workItemStore = projectCollection.GetService<WorkItemStore>();
var versionControlServer = projectCollection.GetService<VersionControlServer>();
var artifactProvider = versionControlServer.ArtifactProvider;
var project = workItemStore.Projects["Test01.MSFAgile.v5"];
var teamQueryFolder = project.QueryHierarchy["Team Queries"] as QueryFolder;
var query = teamQueryFolder["My Tasks"];
var queryDefinition = workItemStore.GetQueryDefinition(query.Id);
var variables = new Dictionary<string, string>
{
    {"project", query.Project.Name}
};
var workItemCollection = workItemStore.Query(
    queryDefinition.QueryText,
    variables);
foreach (WorkItem workItem in workItemCollection)
{
    Console.WriteLine("WI: {0}, Title: {1}", workItem.Id, workItem.Title);
    foreach (var changeset in
        workItem.Links
            .OfType<ExternalLink>()
            .Select(link => artifactProvider
                .GetChangeset(new Uri(link.LinkedArtifactUri))))
    {
        Console.WriteLine(
            "CS: {0}, Comment: {1}",
            changeset.ChangesetId,
            changeset.Comment);
    }
}

Ответ 3

Если вы выполняете запрос и включаете счетчик внешних ссылок > 0, это фактически даст вам все рабочие элементы, у которых есть связанные с ним изменения.