Мне нужна помощь в распечатке результатов запроса в TFS.
Я выполняю код для получения тестового примера и записей выполнения теста из TFS.
Извлечение работает, и я получаю список всех рабочих элементов со всей связанной информацией.
Я понял, как распечатать стандартные поля TFS. Но я не могу найти, как распечатать поля, которые являются настраиваемыми полями (то есть мы добавили их в запись теста TFS; их нет в готовом виде).
Есть ли способ выполнить запрос и вместо получения набора записей просто получить необработанные выходные строки, которые SQL-запрос выведет на экран, если бы я запустил его непосредственно в БД?
Ниже приведен код, который я использую сейчас. Чтобы запустить его, вам нужно заменить «путь к моей БД» на правильный путь, а [пользовательское поле] - на соответствующий. Проблема, с которой я сталкиваюсь, заключается в том, как распечатать значение моего настраиваемого поля, надеюсь, не выясняя, где в рабочем элементе оно находится.
Я обнаружил, что у меня есть значение для моего настраиваемого поля (путь скопирован из поля «watch»):
(new System.Collections.Generic.Mscorlib_DictionaryDebugView<int, object>(workitem.FieldData.m_latestData).Items[78]).Value
Но: я не хочу выяснять, для каждого настраиваемого поля, в каком расположении элементов [] оно находится; также при попытке поместить вышеупомянутое в оператор Console.Writeline (или назначить его сначала переменной), оно не компилируется.
using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
namespace tfs_api_starter
{
class Program
{
static void Main()
{
// connect to a tfs collection
var collectionUri = new Uri("https://path to my DB");
var tfsCollection = new TfsTeamProjectCollection(collectionUri);
// workitemStore object is used to query and update workitems
var workitemStore = tfsCollection.GetService<WorkItemStore>();
// query workitems
var queryText = "SELECT [System.Id], [System.WorkItemType], [System.Title], [System.State], [System.CreatedBy], [System.AreaPath], [System.IterationPath], [My Custom field] FROM WorkItemLinks WHERE Source.[System.WorkItemType] = 'Test Case' and (Target.[System.WorkItemType] = 'Test Execution' and Target.[System.CreatedDate] >= '2019-04-01T00:00:00.0000000') ";
var workitemCollection = new Query(workitemStore, queryText).RunLinkQuery();
foreach (var link in workitemCollection)
{
var workitem = workitemStore.GetWorkItem(link.TargetId);
if (workitem.Type.Name == "Test Case")
{
Console.WriteLine("{0}|{1}|{2}",
workitem.Id,
workitem.Title,
<my custom field value>);
}
if (workitem.Type.Name == "Test Execution")
{
Console.WriteLine("{0}|{1}|{2}", workitem.Id, workitem.Type.Name, workitem.State);
}
}
}
}
}