2016-02-19 1 views
1

J'essaye d'écrire du code qui surveille les WorkItems TFS sur mon poste de travail local mais pour l'instant j'ai des problèmes pour déclencher les événements.Utilisation de l'API TFS 2010 pour vous abonner à WorkItem Events

Je me suis abonné à l'événement FieldChange de WorkItem mais il ne se déclenche pas lorsque je change/met à jour un workjet.

Le code ci-dessous est une application console qui, je pense, devrait fonctionner, mais ce n'est pas le cas. Est-ce que quelqu'un sait comment s'abonner avec succès à ces événements?

Toute aide dans ce domaine est appréciable.

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); 
     } 
    } 
} 

Répondre

0

Vous ne pouvez pas gérer les événements WorkItem de cette manière, cela ne fonctionnera que pour une seule instance. Il y a seulement un ensemble fixe d'événements que vous pouvez Händel:

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

Et vous avez besoin d'un eventhandler pour les utiliser:

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

MISE À JOUR

Si vous n » Si vous voulez utiliser BisSubscribe.exe, vous pouvez créer un abonnement en utilisant l'API. Si vous vérifiez mon mauvais code sur http://tfseventhandler.codeplex.com/SourceControl/latest#RELEASE/v1.3/RDdotNet.TeamFoundation/Managers/TeamServerManager.vb vous devriez voir une méthode "RegisterEvent()" qui fera le travail.

+0

Votre article utilise BisSubscribe.exe. Je ne souhaite pas l'utiliser. Pouvez-vous suggérer autre chose? –

+0

Vérifiez ce blog: http://www.codeproject.com/Articles/730928/Fermer-a-Work-Item-only-if-Child-Work-items-are-c –

+0

@ Cece-MSFT que je ne pense pas help –