关于TFS中WorkItem的探究

前几天,师父给了一个任务,寻找借口来获取从TFS中获取的工作项的历史记录。深感为难,明明知道应该怎么做,可是找了两天API也没有找到!最后为自己的愚蠢行为深深地折服了,忘记了一个最最重要的东西--断点。

这就是获取到的WorkItem对象的数据结构,里面有什么一目了然了!

这里的testItem是WorkItem的一个对象,其中, testItem = workItemStore.GetWorkItem(findID, dt.AddSeconds(-1));可以获得当前项目前一秒种之前的一个WorkItem版本信息。这样逐个向前递推就可以取到所有的历史版本。

在testItem的属性中有一个叫做Fields,里面枚举了一个工作项的全部信息,从Fields[0]到Fields[50]一共51项。

同样的道理也可以获取到每个历史记录中的链接和附件的状态。

下面的代码分别是展现记录的内容和各个版本变化情况的逻辑,仅供参考:

 /// <summary>
/// 显示历史数据
/// </summary>
/// <param name="testItem"></param>
private static void DisplayFields(WorkItem testItem)
{
    int FieldsLenth = testItem.Fields.Count;
    string writeValue = String.Empty;//字段内容
    for (int i = 0; i < FieldsLenth; i++)
    {
        if ((testItem.Fields[i].Value == null) || (testItem.Fields[i].Value.ToString() == ""))
        {
            writeValue = "null";
        }
        else
        {
             writeValue = testItem.Fields[i].Value.ToString();
        }
        Console.WriteLine(testItem.Fields[i].Name + ":" + writeValue);
        }
} 

  

 1         /// <summary>
 2         /// 显示变化信息
 3         /// </summary>
 4         private static void DisplayChange()
 5         {
 6             int Length = staticWorkItems.Length;
 7             int FieldsLenth = staticWorkItems[1].Fields.Count;
 8             for (int i = 0; i < (Length-1); i++)//控制workItem的版本变化
 9             {
10                 for (int j = 0; j < FieldsLenth; j++)//控制检索内容向前
11                 {
12                     if (((staticWorkItems[i].Fields[j].Value == null) && (staticWorkItems[i + 1].Fields[j].Value != null)) && (staticWorkItems[i].Fields[j].Value == "") && (staticWorkItems[i + 1].Fields[j].Value != ""))
13                     {
14                         Console.WriteLine(staticWorkItems[i].Fields[j].Name + ":null" +
15                                           "->" + staticWorkItems[i + 1].Fields[j].Value);
16                     }
17                     else if (((staticWorkItems[i].Fields[j].Value != null) && (staticWorkItems[i + 1].Fields[j].Value != null)) && (staticWorkItems[i].Fields[j].Value.ToString() != staticWorkItems[i + 1].Fields[j].Value.ToString()))
18                     {//先判断取出来的值是否为空,避免空异常
19                         Console.WriteLine(staticWorkItems[i].Fields[j].Name + "" + staticWorkItems[i].Fields[j].Value +
20                                           "->" + staticWorkItems[i + 1].Fields[j].Value);
21                     }
22                     
23                 }
24                 DisplayAttachments(staticWorkItems[i]);
25                 Console.WriteLine("");
26             }
27         }
原文地址:https://www.cnblogs.com/ProgrammerHu/p/3921268.html