none
如何通过编程方式删除TFS上的Work Item? RRS feed

  • 问题

  • 通过TFS服务器上的工具可以删除Work Item,那么如何在客服端通过编程方式删除Work Item呢?谢谢!!!
    Never bend, never break, never back down!
    2010年11月15日 10:27

答案

  • 你好 LoseSS,

    你可以尝试使用一下的示例代码去删除Work Item.

    using System.Text;
    using Microsoft.TeamFoundation.VersionControl.Client;
    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.WorkItemTracking.Client;
    using Microsoft.TeamFoundation.Server;
    using Microsoft.TeamFoundation.Build.Client;
    using System.Net;
    
    namespace Model
    {
      public class TfsServer
      {
        static TfsServer instance = null;
        public static TfsServer Instance
        {
          get
          {
            if (instance == null)
            {
              instance = new TfsServer("http://MSDN2010at:8080/tfs/VSTS");
            }
            return instance;
          }
        }
    
        public static WorkItemStore GetWorkItemStore(this TfsServer tfsServer)
        {
          return tfsServer.TfsTeamProjectCollection.GetService<WorkItemStore>();
    
        }
      }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Model.WorkItemTracking
    {
      public class DestroyWorkItem
      {
        public static void Delete(int id)
        {
          var wis = TfsServer.Instance.GetWorkItemStore();
    
    
          List<int> toDeletes = new List<int>();
          toDeletes.Add(id);
          var errors = wis.DestroyWorkItems(toDeletes);
    
          foreach (var error in errors)
          {
            Console.WriteLine(error.Exception.Message);
          }
          wis.RefreshCache();
          wis.SyncToCache();
        }
      }
    }
    
    

    如果你仍然有一些不清楚的地方,可以与我联系。

    Vicky Song

    • 已标记为答案 Sven K 2010年12月6日 4:23
    2010年11月17日 7:45
    版主

全部回复

  • 你好 LoseSS,

    你可以尝试使用一下的示例代码去删除Work Item.

    using System.Text;
    using Microsoft.TeamFoundation.VersionControl.Client;
    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.WorkItemTracking.Client;
    using Microsoft.TeamFoundation.Server;
    using Microsoft.TeamFoundation.Build.Client;
    using System.Net;
    
    namespace Model
    {
      public class TfsServer
      {
        static TfsServer instance = null;
        public static TfsServer Instance
        {
          get
          {
            if (instance == null)
            {
              instance = new TfsServer("http://MSDN2010at:8080/tfs/VSTS");
            }
            return instance;
          }
        }
    
        public static WorkItemStore GetWorkItemStore(this TfsServer tfsServer)
        {
          return tfsServer.TfsTeamProjectCollection.GetService<WorkItemStore>();
    
        }
      }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Model.WorkItemTracking
    {
      public class DestroyWorkItem
      {
        public static void Delete(int id)
        {
          var wis = TfsServer.Instance.GetWorkItemStore();
    
    
          List<int> toDeletes = new List<int>();
          toDeletes.Add(id);
          var errors = wis.DestroyWorkItems(toDeletes);
    
          foreach (var error in errors)
          {
            Console.WriteLine(error.Exception.Message);
          }
          wis.RefreshCache();
          wis.SyncToCache();
        }
      }
    }
    
    

    如果你仍然有一些不清楚的地方,可以与我联系。

    Vicky Song

    • 已标记为答案 Sven K 2010年12月6日 4:23
    2010年11月17日 7:45
    版主
  • 你好,Vicky
    非常感谢的回答。

    我使用你提供的方式的来进行删除,但是还是无法删除,

    调试的时候出现下面的错误提示:

    "Unable to automatically step into the server. Connecting to the server machine '[ServerName]' failed. The Microsoft Visual Studio Remote Debugging Monitor (MSVSMON.EXE) does not appear to be running on the remote computer. Please see Help for assistance."

    同时error.Exception.Message的值是: "TF26208: The item does not exist, or you do not have perssion to it."

    请问这是什么原因?是因为我的权限不够吗?非常感谢!


    Never bend, never break, never back down!
    2010年11月17日 8:42
  • LoseSS,

     public static TfsServer Instance
      {
       get
       {
        if (instance == null)
        {
         instance = new TfsServer("http://MSDN2010at:8080/tfs/VSTS");
        }
        return instance;
       }
      }
    
    
    

    在给instance赋值的时候,应该把我代码中的"http://MSDN2010at:8080/tfs/VSTS" 改成你自己的TFS URL+CollectionName. 你改变之后,再试一下。

    谢谢

    Vicky Song

    2010年11月17日 8:53
    版主
  • 你好,Vicky TFS的URL是没有的问题的,我新建,修改,导出WorkItem都没有问题,就是删除不行。
    Never bend, never break, never back down!
    2010年11月17日 8:57
  • LoseSS,

    那么请你确认一下,你想要删除的那个work item 在数据库中是确实存在的。

    最简单的方法去检验那个work item 是否存在,在Team Explorer中->右键->Go To WorkItem->输入你想要删除的work item 的ID。

    你也可是尝试删除另外一个work item 去看看这个错误是否存在。

    Vicky Song

    2010年11月17日 9:24
    版主
  • 你好,Vicky 我已经检查了我要删除的WorkItem是存在的,删除其它的WorkItem问题依然相同。 是否是因为权限问题?
    Never bend, never break, never back down!
    2010年11月17日 9:30
  • 依然没有解决,无奈。。。
    Never bend, never break, never back down!
    2010年11月22日 9:57
  • 总算解决了,是因为权限问题
    Never bend, never break, never back down!
    2010年12月6日 4:24