Team Foundation Server (TFS)工具的亮点之一是管理日常工作项, 工作项如Bug, Task,Task Case等。

使用TFS API编程访问TFS服务器中的工作项, 步骤如下:

1。 准备,

首先要明确TFS服务器的URL, TFS服务器访问就像访问网站。需要通过一个网络地址。

其次要了解TFS中工作项相关组织结构:

Microsoft.TeamFoundation.Client.TfsTeamProjectCollection ;

Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore;

Microsoft.TeamFoundation.WorkItemTracking.Client.Project;

Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemType;

Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem

TfsTeamProjectCollection像是一座物理建筑,它有门牌编号,我们通过门牌号码找到该建筑。WorkItemStore像是图书馆,里边存放各种类别,各种年级的书籍。Project像是年级的概念,每个年级是隔离的,每个年级也都有不同类别的书,比如各年级都有语文,数学,英语等类别的书籍。WorkItemType是类别的概念,比如数学,英语。每个Project有不同WorkItemType的工作项。如一年纪有语文学习的书籍,数学学习的书籍;二年级也有语文类的书籍,数学类的书籍。

然后还要了解对WorkItem来说,里边有一些属性是直属WorkItem的,而有些属性(我们在界面上看到的Fields)是存放在数组中的,通过WorkItem.Fields["Field Name"]访问。

2。开始编程,

访问TFS服务器

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client; string tfsUri = "https://vstf-cooper.com:8080/tfs/learning"; Microsoft.TeamFoundation.Client.TfsTeamProjectCollection server = new TfsTeamProjectCollection(tfsUri);

获取WorkItemStore

Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore myWorkItemStore = server.GetService<WorkItemStore>();

创建隶属于"Project1"的Bug

Project myProject = myWorkItemStore.Projects["Project1"];
WorkItemType bugType = iltProject.WorkItemTypes["Bug"]; WorkItem bug = new WorkItem(bugType);
bug.Title = "";
bug.Fields["Assigned To"].Value = "Cooper";
bug.Save();

3。查询TFS中工作项,

查询TFS中的工作项是通过SQL语句Query出来的,返回结果是Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemCollection.

string sql = @"Select * From WorkItems Where [Work Item Type] = '{0}' and [System.TeamProject] = '{1}' ";
WorkItemCollection queryResults = myWorkItemStore.Query(sql);

TFSAPI的更多相关文章

随机推荐

  1. Netty 对通讯协议结构设计的启发和总结

    Netty 通讯协议结构设计的总结 key words: 通信,协议,结构设计,netty,解码器,LengthFieldBasedFrameDecoder 原创 包含与机器/设备的通讯协议结构的设计 ...

  2. 【BZOJ】【1406】【AHOI2007】密码箱

    数论 Orz iwtwiioi 果然数论很捉鸡>_>完全不知道怎么下手 $$x^2 \equiv 1 \pmod n \rightarrow (x+1)*(x-1)=k*n $$ 所以,我 ...

  3. 理解Session的几种模式

    一.写在前面 我们在使用ASP.NET开发的过程中,有时会进行数据存储以实现请求前后的状态保持(HTTP是无状态保持的协议),而Session作为一种快速简单易于实现的方式被我们经常使用,当然如果出于 ...

  4. mapred和mapreduce

    总体上看,Hadoop MapReduce分为两部分:一部分是org.apache.hadoop.mapred.*,这里面主要包含旧的API接口以及MapReduce各个服务(JobTracker以及 ...

  5. Javascript里的那些距离们

    1.有滚动条的控件的距离: scrollTop和scrollLeft:分别指有滚动条的容器控件的滚动条的top和left:页面滚动条的通用取法:document.body.scrollTop(FF\C ...

  6. codeforces 439C Devu and Partitioning of the Array(烦死人的多情况的模拟)

    题目 //这是一道有n多情况的烦死人的让我错了n遍的模拟题 #include<iostream> #include<algorithm> #include<stdio.h ...

  7. .NET Framework 框架简述01

    NET技术可以以规范和实现两部分来划分.   规范:   公共语言架构(Common Language Infrastructure, CLI),主要包括 1.通用类型系统(Common Type S ...

  8. Windows 7,64位机器上安装DB2 7.2+FP7

    1.要想在Windows 7,64位机器上安装DB2 7.2+FP7,注意:1)拷贝所有安装文件到本地2)设置setup.exe文件兼容windows 20003)使得users用户勾选“完全控制”权 ...

  9. [转载] Linux下多路复用IO接口 epoll select poll 的区别

    原地址:http://bbs.linuxpk.com/thread-43628-1-1.html 废话不多说,一下是本人学习nginx 的时候总结的一些资料,比较乱,但看完后细细揣摩一下应该就弄明白区 ...

  10. MFC中错误知识总结(一)

    1.在继承与派生中,单目:表示派生,双目::表示继承,例如 class A { public: void c(); }; class B: public A {}; //类B继承类A void A:: ...