Как показать ассоциированный рабочий элемент из кода?
Вопрос
Мы разрабатываем какой-то продукт, используя внутренний инструмент проектирования, который хранит информацию в XML-файлах.Чтобы обеспечить надлежащую интеграцию с TFS, мы также запрограммировали поставщика, который отслеживает в TFS операции регистрации и оформления заказа от пользователей во время использования конструктора без какой-либо необходимости взаимодействовать с Team Explorer.
Теперь требуется добавить также связанный workitem при проверке файлов, я погуглил и просмотрел некоторые образцы SDK, но я не смог понять, есть ли способ показать ту же форму Windows, которая позволяет пользователю связывать код с workitem из кода, или мы должны реализовать полную форму Windows из кода (извлекать и искать workitems, связывать их, выполнять проверку и так далее).Любая информация была бы признательна, потому что между этими двумя решениями существует большая разница в том, сколько кода нам нужно написать.
Решение 2
Я проверил в MS consultancy, и нет способа показать окно проверки, используемое TFS или расширением оболочки, не прибегая к низкоуровневому коду, который на самом деле небезопасен.
Таким образом, единственным возможным решением является использование TFS Api для создания нового элемента управления / проекта C #, имитирующего окно проверки TFS.
С уважением Massimo
Другие советы
Вот некоторый код, который поможет с обновлением workItems. Кроме того, попробуйте [эту ссылку] [1] для получения дополнительной информации.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
namespace WorkItemTrackingSample2
{
class Program
{
static void Main(string[] args)
{
// Connect to the server and the store.
TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer("YourTfsServerNameHere");
WorkItemStore workItemStore = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
// Get a specific WorkItem from the store.
// Replace "12345" with a WorkItem ID appropriate for testing.
WorkItem workItem = workItemStore.GetWorkItem(12345);
// Save the existing Priority so we can restore it later.
int oldPriority = (int)workItem.Fields["Priority"].Value;
// Set the Priority to an arbitrarily high number.
workItem.Fields["Priority"].Value = 9999;
// Display the results of this change.
if (workItem.IsDirty)
Console.WriteLine("The workItem has changed, but has not been saved.");
if (workItem.IsValid() == false)
Console.WriteLine("The workItem is not valid.");
if (workItem.Fields["Priority"].IsValid == false)
Console.WriteLine("The workItem's Priority field is not valid.");
// Tries to save the invalid WorkItem.
try
{
workItem.Save();
}
catch (ValidationException)
{
Console.WriteLine("The workItem threw a ValidationException.");
}
// Set the priority to a more reasonable number.
if (oldPriority == 1)
workItem.Fields["Priority"].Value = 2;
else
workItem.Fields["Priority"].Value = 1;
// If the WorkItem is valid, saves the changed WorkItem.
if (workItem.IsValid())
{
workItem.Save();
Console.WriteLine("The workItem saved this time.");
}
// Restore the WorkItem's Priority to its original value.
workItem.Fields["Priority"].Value = oldPriority;
workItem.Save();
}
}
}
[1]: http://msdn.microsoft.com/en-us/library/bb130323(VS.80).aspx