Search code examples
c#tfsworkitem

List 'areas' used in TFS project


I've been playing about with the WorkItem objects from the Microsoft.TeamFoundation schemas in C#, but was wondering if anyone knows how I would refer to an object of type 'Area' or, for that matter, 'Iteration'.

It seems that these are treated as objects in TFS, but I haven't come across any information on how to refer to these in C#.

You can filter WorkItems by [Area] or [Iteration] using WIQL, but what if I wanted to populate a ComboBox with all Areas or Iterations?

Also, how can I view the database structure of my workplace's TFS project?

Thanks guys,

Andy


Solution

  • Have a look at this Blog Post. There's sample code and a demo.

    Here's a quick LINQPad Query that should do the job (download VS2010 / VS2012):

    void Main()
    {
        const String CollectionAddress = "http://tfsserver:8080/tfs/MyCollection";
        const String ProjectName = "MyProject";
    
        using (var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(
            new Uri(CollectionAddress)))
        {
            tfs.EnsureAuthenticated();
            var server = tfs.GetService<ICommonStructureService>();
    
            var projectInfo = server.GetProjectFromName(ProjectName);
            var nodes = server.ListStructures(projectInfo.Uri).Dump();
    
            // You should be able to re-factor this with "Iteration"
            // for getting those too.
            var nodesXml = server.GetNodesXml(
                nodes
                    .Where(node => node.Name == "Area")
                    .Select(node => node.Uri).ToArray(),
                true);
    
            var areaPathAndId =
                XElement.Parse(nodesXml.OuterXml)
                .Descendants("Node")
                .Select(xe => new 
                { 
                    Path = xe.Attribute("Path").Value, 
                    ID = xe.Attribute("NodeID").Value, 
                })
                .Dump();        
        }
    }