Report: 1st UK ALM User Group meeting

Posted by Stuart Preston on February 14, 2010 under ALM, Application Lifecycle Management, SDLC, Software Development Lifecycle, Team Foundation Server, UKALMUG | Read the First Comment

The inaugural meeting of the UK ALM User Group was held on Thursday 11th February at Microsoft’s Cardinal Place offices near Victoria in London. 

The session was deliberately left with an open agenda, and after we had made our introductions we shared many anecdotes from our collective experiences with ALM, the discussion on the day mainly focusing around people and process rather than the tools.

As the majority of people in the meeting were practitioners using Microsoft ALM tooling – there was widespread support for bringing in presenters on non-Microsoft ALM tools to ensure that the group kept abreast of the latest developments.

Some of the wider questions about the group included:
– What is the vehicle for the UK ALM User Group message?
– Should the UK ALM User Group have a “voice”? 
– How do we spread the word about ALM and ‘make it stick’. 

Lessons learned were that we need to prioritise the topics and also timebox them!   Hopefully in future sessions this will be easier to achieve.

It was agreed that each member of the group should try and post a session topic to the User Group website (http://ukalmug.ning.com/forum/topics/discussion-topics-for-uk-alm).  The most popular session topics will be determined and we can then find presenters for them. 

There was also broad support for having the UK ALM User Group more regularly than the initially proposed (quarterly).  More details on this will follow soon.  If anyone can recommend a bar or other venue in London with presentation facilities then please let me know.

Drinks, socialising and continuation of some of the discussions were then had at a local bar…

Thanks to Microsoft for providing the venue and for the enthusiastic attendees some of whom had travelled from out of London to come to the meeting.  Hope to see all of you and more at the next meeting.

Please remember to tag anything related to the user group on twitter with #ukalmug.  There is also a list of members on twitter at @ukalmug/members

TFS2010 API: Retrieving a list of Process Templates on the server.

Posted by Stuart Preston on November 7, 2009 under Team Foundation Server | 2 Comments to Read

I thought I’d post some utility code that I’ve been playing with to retrieve information about the Process Templates available on a TFS 2010 instance.

As you can see from the code, each TeamProjectCollection has its own store of Process Templates (in TFS 2008 there was in effect a single “Project Collection”) so we need to look through each collection to retrieve the templates that have been uploaded to it.

You’ll need references to Microsoft.TeamFoundation.dll, Microsoft.TeamFoundation.Client.dll, Microsoft.TeamFoundation.Common.dll.  On a machine with Visual Studio 2010 installed they should be found in C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0 or C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0 depending on whether you have a 64-bit version of Windows or not.  You’ll also need to set the Target Framework to .NET Framework 3.5 as the assemblies required are in the v2 GAC.

This code will work against TFS2010 Beta 2 but is not guaranteed to work in the RTM.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Server;

namespace TFSUtils
{
    class Program
    {
        static void Main(string[] args)
        {
            //replace this with the URL to your TFS instance.
            Uri tfsUri = new Uri("http://sptfs02:8080/tfs");

            TeamFoundationApplicationInstance tfai = new TeamFoundationApplicationInstance(tfsUri, new UICredentialsProvider());
            tfai.EnsureAuthenticated();

            ITeamProjectCollectionService collectionService = tfai.GetService<ITeamProjectCollectionService>();
            IList<TeamProjectCollection> collections = collectionService.GetCollections();

            foreach (TeamProjectCollection collection in collections)
            {
                if (collection.State == TeamFoundationServiceHostStatus.Started)
                {
                    Console.WriteLine(String.Format("\nCollection: {0}", collection.Name));
                    IProcessTemplates processTemplates = tfai.GetTeamFoundationServer(collection.Id).GetService<IProcessTemplates>();
                    TemplateHeader[] templateHeaders = processTemplates.TemplateHeaders();
                    foreach (TemplateHeader header in templateHeaders)
                    {
                        Console.WriteLine(String.Format("\t{0} {1}", header.TemplateId, header.Name));
                    }
                }
            }

            Console.WriteLine("\nPress any key to continue.");
            Console.ReadKey();
        }
    }
}