Posted by: Vinu Baby | April 16, 2009

Perform a custom action for Check-in event in Microsoft Team Foundation Server

Microsoft Team Foundation Server is a very powerful and customizable tool user of version control. TFS 2005 is less stable when compared to TFS 2008

Now I just faced a legitimate requirement..

When someone checks-in any file to the TFS, i need to get the list of files checked-in and perform a custom action based on that file(s) list. How do I do that??  I just need to extend the Microsoft TFS services.

TFS is nothing but a SQL Server database(s) and a Share Point Web Service. All actions to the TFS are done by calling webservices at http://yourservername:8080/…asmx. So what you need to do is listen for a particular event and then catch it and execute your code.

Build Completion Event NodesDeletedEvent
BuildStatusChangedEvent ProjectCreatedEvent
BranchMovedEvent ProjectDeletedEvent
NodeCreatedEvent CheckinEvent
NodePropertiesChangedEvent WorkItemChanged
NodeRenamedEvent

 

You can find the BisSubscribe.exe at –> C:\Program Files\Microsoft Visual Studio 2005 Team Foundation Server\TF Setup\

TFS has a small interesting utility called BisSubscribe.exe, you can use this tool to subscribe to quite a few events in TFS. So, now i want to subscribe to the TFS Checkin-Event, and the command goes like this

BisSubscribe.exe /server tfsserver01 /eventType CheckinEvent /deliveryType Email /address vinubaby1@gmail.com

this will create a subscription on the tfsserver01 server for CheckIn event and a email will be sent to vinubaby1@gmail.com, but this does not serve my requirement. I need a list of files checked-in the moment it is checked in. So, i just tweak the command like this.

BisSubscribe.exe /server tfsserver01 /eventType CheckinEvent /deliveryType Soap /address http://myserver:81/service.asmx

This command will create a subscription on tfsserver01 server for Checkin event and will invoke the Notify() method in the service.asmx webservice which i developed and published in http://myserver:81/

The webservice will have the Notify command with the following signature;

[SoapDocumentMethod(Action = "http://Microsoft.VisualStudio.Bis/Notify", RequestNamespace = http://Microsoft.VisualStudio.Bis)]
[WebMethod
]
public void Notify(string eventXml)
{
     //Write your custom code here
     //Use eventXml to extract event related fields and their values
}

The signature of the Notify function should be same as above.

Happy programming….. enjoy..


Responses

  1. How about if I want to monitor check-ins to a certain folder in TFS instead of any check-in anywhere. Is it possible?

  2. I think the best thing you can do is.. in the notify webmethod, you get the eventxml as parameter which contains all details about the checkin.. ie, areapath, files, user etc…

    you describe a condition here as you need, and if it meets that condition, you execute your code..

    what say..?


Leave a response

Your response:

Categories