2016-02-19 2 views
1

Я пытаюсь написать код, который контролирует TFS WorkItems на моей локальной рабочей станции, но в настоящий момент у меня возникают проблемы с тем, чтобы запустить события.Использование API TFS 2010 для подписки на события WorkItem

Я подписался на событие FieldChange WorkItem, но не срабатывает при изменении/обновлении любого рабочего элемента.

Код ниже представляет собой консольное приложение, которое, как я думаю, должно работать, но это не так. Кто-нибудь знает, как успешно подписаться на эти события?

Любая помощь в этом вопросе заметна.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.TeamFoundation.Client; 
using System.Net; 
using Microsoft.TeamFoundation.VersionControl.Client; 
using Microsoft.TeamFoundation.WorkItemTracking.Client; 
using Microsoft.TeamFoundation.Framework.Client; 

namespace TFSEvents 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       Uri serverUri = new Uri(@"http://tfs"); 
       string username, password; 
       Console.WriteLine("Enter Username:"); 
       username = Console.ReadLine(); 
       Console.WriteLine("Enter password:"); 
       password = ReadPassword(); 
       NetworkCredential cred = new NetworkCredential(username, password); 
       TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(serverUri, cred); 
       tfs.EnsureAuthenticated(); 
       IEventService vs = tfs.GetService<IEventService>(); 
       var wiww = tfs.GetService<WorkItemStore>(); 
       var wi = wiww.GetWorkItem(4671); 
       wi.FieldChanged += new WorkItemFieldChangeEventHandler(changeHandler); 
       var x = vs.GetAllEventSubscriptions().ToList(); 
       Console.WriteLine("Press \'q\' to quit."); 
       while (Console.ReadLine() != "q") ; 
      } 
      catch (Exception e) 
      { 

      } 
     } 

     private static void changeHandler(object o, WorkItemEventArgs e) 
     { 
      Console.WriteLine(e.Field); 
     } 
    } 
} 

ответ

0

Вы не можете обрабатывать события WorkItem таким образом, он будет работать только для одного экземпляра. Есть только фиксированный набор событий, которые вы можете Генделя:

http://nkdagility.com/tfs-event-handler-for-team-foundation-server-2010/

И вам нужно EventHandler использовать их:

http://nkdagility.com/tfs-event-handler-in-net-3-5-part-2-handling-team-foundation-server-events/

UPDATE

Если вы не» t хотите использовать BisSubscribe.exe, вы можете создать подписку, используя API. Если вы проверите мой плохой код на http://tfseventhandler.codeplex.com/SourceControl/latest#RELEASE/v1.3/RDdotNet.TeamFoundation/Managers/TeamServerManager.vb, вы увидите метод RegisterEvent(), который будет выполнять эту работу.

+0

В вашей статье используется BisSubscribe.exe. Я не хочу этого использовать. Можете ли вы предложить что-то еще? –

+0

Посмотрите этот блог: http://www.codeproject.com/Articles/730928/Close-a-Work-Item-only-if-Child-Work-items-are-c –

+0

@ Cece-MSFT, что я не думаю help –

Смежные вопросы