Note: A successor to this blog post has been written focusing on authenticating to the data service. You can read it here.
Because TeamPulse makes it very easy to enter and track information regarding your project, users will find that they very quickly will have a large repository of valuable information in the TeamPulse data store. Due to the complex and integrated nature of most teams, rarely does information stay within one repository. It often needs to be digested and shared in many different ways and to many different people. Although TeamPulse has a rich visual aggregation of information a number of teams may need to mine the information repository in order to feed it to other systems via a myriad of different formats. Let’s discuss the various ways that TeamPulse users can extract information with the current release.
The Data Service
The TeamPulse Silverlight client interacts with the database using a WCF data service. WCF data services support the Open Data Protocol (OData) which is a popular way to expose and access information from a variety of sources including, but not limited to, relational databases, file systems, content management systems and traditional Web sites. One way to have a look at the TeamPulse data service is to simply browse to it at http://<server name>:9898/Services/DataService.svc:
You can begin inspecting the data using simple urls such as:
- http://<server name>:9898/Services/DataService.svc/Stories - to view all stories
- http://<server name>:9898/Services/DataService.svc/Stories?Status eq 'In Progress' - to view all stories that are in progress
- http://<server name>:9898/Services/DataService.svc/Stories?Status eq 'In Progress'&$expand=Tasks - to view all stories that are in progress along with their associated tasks
A good reference for learning the ins and outs of querying the data service using urls can be found here. Of course, you can also use Linq and other technologies to help execute calls and consume the results of the query.
Another way to inspect the data service entities is to create a new project and add a service reference to the url just mentioned. Using the Visual Studio 2010 OData Protocol Analyzer Extension you get a rich visual representation of the entities and relationships available from the service:
After exposing the existence of this integration treasure, some people might be disappointed to hear that we don’t yet officially support it. Although the service is reliable and robust as the client uses it fully, we cannot yet guarantee that we won’t make breaking changes to the structure and relationships of the entities. There also is no documentation yet to help fully understand the schema.
TeamPulse has a number of RSS feeds that can be used keep up with changes that are occurring with the system. The RSS feed addresses can be accessed from the project dashboard:
There are 3 feeds:
- The What’s New Feed which is a running update of changes, additions, and deletions of any entities in TeamPulse.
- The Status History Chart Feed which is updated once a day with the latest status history chart.
- The Sprint Burndown Chart Feed which is updated as well once a day with the latest Sprint Burndown chart.
The first feed can be used by a program to monitor for changes to entities in TeamPulse. The feed url can by modified slightly in order to provide a more easily consumed xml result. For example, a url of http://<server name>TeamPulseEarlyAccess/Feeds/NewsFeed.svc/news/data/1/rss will provide an RSS XML formatted result.
And Atom format is also available using a a url of http://<server name>TeamPulseEarlyAccess/Feeds/NewsFeed.svc/news/data/1/atom
Future Integration Plans
While version 1 of TeamPulse provides some useful integration points for users, there is much more that can be done. We have lots of ideas but even better would be to have ideas from our users. User feedback is the only way we’ll know that we’ll be hitting home runs as we invest time into improving TeamPulse from an integration scenario and any other perspective! We’ve had some users ask for an event based model that can be hooked into, and others looking to plug-in abilities. What do you think?