5,447,640 members and growing! (20,454 online)
Email Password   helpLost your password?
Languages » VB.NET » General     Advanced License: The Microsoft Public License (Ms-PL)

Creating your own event handler for TFS Event Handler Service

By Martin Hinshelwood

Creating an event handler with the Team Foundation Server Event Handlers is very easy. You will need to inherit from the AEventHandler class which is part of RDdotNet.TeamFoundation.dll located in the install directory (I will make an SDK later).
VB 8.0, VB 9.0, VB, Windows, .NET, .NET 3.0, .NET 2.0, WCF, VS2005, Visual Studio, Dev

Posted: 21 Aug 2007
Updated: 21 Aug 2007
Views: 4,182
Bookmarked: 10 times
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
2 votes for this Article.
Popularity: 1.30 Rating: 4.33 out of 5
0 votes, 0.0%
1
0 votes, 0.0%
2
0 votes, 0.0%
3
1 vote, 50.0%
4
1 vote, 50.0%
5
Note: This is an unedited contribution. If this article is inappropriate, needs attention or copies someone else's work without reference then please Report This Article

Creating an event handler with the Team Foundation Server Event Handlers is very easy. You will need to inherit from the AEventHandler class which is part of RDdotNet.TeamFoundation.dll located in the install directory (I will make an SDK later).

Download Source

image

Imports Microsoft.TeamFoundation.Client

Public MustInherit Class AEventHandler(Of TEvent)

    Public MustOverride Sub Run(ByVal EventHandlerItem As EventHandlerItem(Of TEvent), _ 
                                ByVal ServiceHost As ServiceHostItem, _
                                ByVal TeamServer As TeamServerItem, _
                                ByVal e As NotifyEventArgs(Of TEvent))

    Public MustOverride Function IsValid(ByVal EventHandlerItem As EventHandlerItem(Of TEvent), _
                                         ByVal ServiceHost As ServiceHostItem, _
                                         ByVal TeamServer As TeamServerItem, _
                                         ByVal e As NotifyEventArgs(Of TEvent)) As Boolean

End Class

Both of the methods that the AEventHandler exposes have the same signature. Hear is what it all means...

Name Type Description
EventHandlerItem EventHandlerItem(Of TEvent) The event handler item contains information about the handler. This includes an instance of the config data, the handler its self and a status property. The TEvent generic makes sure that everything is strongly types for the event that you are dealing with.
ServiceHost ServiceHostItem Base Address of the service, Event Type, Host Config data and a link to the service host object.
TeamServer TeamServerItem Config data for the team server as well as an instance of the Microsoft.TeamFoundation.TeamFoundationServer object
e NotifyEventArgs(Of TEvent) This object allows access to all of the event specific data including the event object, the event type, the TFS Identity object and the TFS Subscription object.

Lets look at the implementation that comes with the TFS Event Handler, the "AssignedToHandler". The IsValid method denotes wither the handler will acrualy run at all:

    Public Overrides Function IsValid(ByVal EventHandlerItem As EventHandlerItem(Of WorkItemChangedEvent), _
                                      ByVal ServiceHost As ServiceHostItem, _
                                      ByVal TeamServer As TeamServerItem, _
                                      ByVal e As NotifyEventArgs(Of WorkItemChangedEvent)) As Boolean
        If e.Event Is Nothing Then
            Return False
        End If
        Dim assignedName As String = WorkItemEventQuerys.GetAssignedToName(e.Event)
        If String.IsNullOrEmpty(assignedName) Then
            Return False
        Else
            Return Not assignedName = WorkItemEventQuerys.GetChangedByName(e.Event)
        End If
    End Function

This method initially checks to see if the event exists and then queries the assigned name from the event using a work item event query which consists of:

Return eventData.CoreFields.StringFields.Find(New Predicate(Of StringField)(AddressOf FindAssignedTo)).NewValue

All this does is search the String fields associated with the core work item bits to find the "System.AssignedTo" value. You could so this manually, but I have a number of queries there and you can add any number you wish.

The logic: If Event exists and assigned name is not empty then check that the assigned name is not the changed name.

So in English with all of the crap split out: Did the user assign the work item to himself? If not then send them an email!

The rest, as they say, is just logic. The "Run" method calls the "IsValid" and then sends an email if it is in fact valid, hardly rocket science.

Hopefully with this knowledge you will be able to make many many event handlers!

For the delayed CTP 1 of the TFS Event Handler I have changed the logic quite a lot but the same IsValid and Run methods exist. The parameters are, however slightly different. I have taken into account security and you will have to make your own connection to the TFS server using your own username and password. I have changed this to protect the security of the application as I want developers to be able to upload event handler assemblies and WF workflow without having to get access to the server. I ahve also changed it so the service that captures the events is not the same one that runs the handlers. This allows me to send the events between these services using MSMQ, thus giving the service some much needed redundancy.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)

About the Author

Martin Hinshelwood


Martin has been involved with computers in one way or another for as long as he can remember, but started professionally in 2000. After university Martin started out as an ASP 3.0 developer for a year working with Access and VBScript, but he breathed a sigh of relief when the .NET Framework was released in 2001 and has been working with .NET and VB ever since.



Occupation: Software Developer
Location: United Kingdom United Kingdom

Other popular VB.NET articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
  (Refresh) 
Subject  Author Date 
-- There are no messages in this forum --

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 21 Aug 2007
Editor:
Copyright 2007 by Martin Hinshelwood
Everything else Copyright © CodeProject, 1999-2008
Web18 | Advertise on the Code Project