How to delete work items from TFS or VSO

Audience

Everyone

Have you ever created a bunch of work items that you decided later that you had to delete. Well I have… especially as a user of the TFS Integration Platform. And when things go wrong there they can really go wrong.

Now while you can put stuff into the “removed” state it is still hanging around cluttering up the place. The only way out of the box to remove items is to give the ID for each work item that you want to delete and execute the command line for each one.:

witadmin destroywi /collection:CollectionURL /id:id [/noprompt]

WARNING: This code can result in total loss of all work items you have if you miss key a query! Be careful… and you are on your own. Don’t blame me, and no… I can’t get them back for you…

Well that’s just great unless you have a couple of thousand things to delete. So I knocked up a little bit of code to do it for me. Now, since I have had to knock it up a bunch of times before I thought that I had better share it. I started this blog in the first place so that I would remember things.

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
 
            TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("http://tfs.company.com:8080/tfs/DefultCollection"));
            WorkItemStore store = tpc.GetService();
            string query = @"SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = 'projectName'  AND  [System.AreaPath] UNDER 'projectName\_TOBEDELETED' ORDER BY [System.Id]";
            WorkItemCollection wis = store.Query(query);
            IEnumerable x = from WorkItem wi in wis select wi.Id;
            Console.WriteLine(string.Format("DESTROY {0} work items (they really can't be resurrected): y/n?", wis.Count));
            ConsoleKeyInfo cki = Console.ReadKey();
            Console.WriteLine();
          if (cki.Key.ToString().ToLower() == "y")
            {
            try
                {
                    Console.WriteLine("Deleting....");
                    IEnumerable y = store.DestroyWorkItems(x.ToArray());
                    Console.WriteLine("DONE");
                    foreach (var item in y)
                    {
                        Console.WriteLine(item.ToString());
                    }
                }
                catch (Exception)
                {
 
                    Console.WriteLine("Things have gotten all pooped up please try again!"); 
                }
         
            }
 
          Console.WriteLine("Freedom");
        }
    
    }
}

 The first thing that you may notice is that I search for items in a specific area path. I use _TOBEDELETED as it is obvious what is going to happen to things that end up there. Although I did work with a user who complained that all his files had gone missing. When asked where he kept them he pointed at the recycle bin on his desktop!

Anyhoo… just in case you made a mistake it will let you know how many work items that you are deleting. It’s a simple check but I have had it say “100,000” work items… AS you can imagine I very carefully terminated the program (never trust the ‘no’ option).

Create a conversation around this article

Share on Facebook
Share on Twitter
Share on Linkdin

We dont have any dates for public classes right now. sign-up to be the first to know, or contact us for discounts or private training.

Read more
Martin Hinshelwood
As we progress deeper into the dynamic landscape of the 21st century, our long-established organisations, born of the Industrial Age and infused with a DNA of strict command and control, stand on shaky ground. These organisations strut with command-and-control bravado, erecting clear hierarchies in their stable inert markets where bureaucracy …
Martin Hinshelwood
In organizational development and team dynamics, Agile (as the Agile Manifesto delineates) and Scrum (as the Scrum Guide outlines) guide teams not by solving their problems but by illuminating the issues that demand attention. These frameworks aim to identify and spotlight the challenges within a team or organization’s processes, effectively …
Martin Hinshelwood
This week, I participated in a Scrum.org Webinar hosted by Sabrina Love (Scrum.org Product Owner) as well as my colleagues, Joanna Płaskonka, Ph.D. and Alex Ballarin to discuss the state of learning and how immersive learning is the future of training. You can watch the video below to hear what …
Martin Hinshelwood
For a long time now I have been searching for that perfect domain that epitomised the vision, the why, of what I am trying to achieve with my customers and the industry at large. Now I have found it in http://nkdagility.com