前期说明
:在Project2007中可以选择一个团队项目(TFS),然后在Project2007中排好进度,作为工作项发布到TFS服务器上。之后可以直接作为工作项在VS2005等工具中填写项目进度。本文的目的就是要显示出TFS中保存的实时项目进度情况等。
技术说明 :在Project2007之前的版本可以通过oledb的方式直接读取project的mpp文件来显示进度,在project2007时不再提供oledb的方式了,可能的两种实现方法有:
1、使用Project2007提供的COM接口,读取mpp文件中的任务 + TFS中的实时进度
2、把所有的进度安排(包括父任务)发布到TFS中,直接读取TFS中的实时进度
一、COM接口的方式
Code
这种方式我就不具体说了,可以看代码中的注释。采用这种方式有几个问题:
速度比较慢;b/s结构时有点问题;
经常报错: 异常详细信息: System.Runtime.InteropServices.COMException: 消息筛选器显示应用程序正在使用中。试了一些解决方案,好像都不行的。
二、直接读取TFS的方式
主意思路是:在TFS中定制一个新的工作项类型,其中包含一个新的工作项字段(项目分解结构);设置Project和TFS之间同步哪些字段,把新的字段包含进去;在Project中使用这个新的工作项类型;使用TFS SDK读出进度情况。
主要分成以下几个步骤进行:
(以下的command命令都是在VS2005命令提示窗口输入的)、
1、加入新的工作项类型
用以下命令导出原有的工作项类型:
然后编辑这个xml文件,以下文件中红色的部分是修改的地方:
工作项类型
然后用以下命令把它加入到tfs中去:
witimport
/
f
"
E:\\scheduletask.xml
"
/
t
"
http://server:8080/
"
/
p projectname
这样我们就增加了一个新的工作项类型:进度,和一个新的工作项字段:
Microsoft.VSTS.Scheduling.WBS
2、确定TFS和project之间可以同步哪些字段
首先下载原有配置:
TFSFieldMapping.exe download http:
//
server:8080 projectname "E:\MappingFile.xml"
在原有配置上修改,见红色部分:
TFS配置
再把配置文件上传:
TFSFieldMapping.exe upload http:
//
server:8080 projectname "E:\MappingFile.xml"
这样就把TFS字段和project中的指定字段对应起来了
三、在project中使用"进度"工作项类型
这一步比较简单,就是在project中选择团队项目,排计划时选择"进度"类型,然后发布到tfs中就可以了
四、使用tfs SDK读取进度
就是使用TFS SDK就可以了:
private
void
BindTfs()
{
ArrayList taskList = new ArrayList();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
StringBuilder sbSql = new StringBuilder();
sbSql.Append("Select [Microsoft.VSTS.Scheduling.RemainingWork],[Microsoft.VSTS.Scheduling.CompletedWork]");
sbSql.Append(",[System.Title]");
sbSql.Append(",[System.AssignedTo]");
sbSql.Append(",[Microsoft.VSTS.Scheduling.StartDate]");
sbSql.Append(",[Microsoft.VSTS.Scheduling.FinishDate]");
sbSql.Append(",[Microsoft.VSTS.Scheduling.WBS]");
sbSql.Append(" from workitems where [System.WorkItemType]='进度' ");
sbSql.Append(" order by [Microsoft.VSTS.Scheduling.WBS]");
WorkItemStore Store = new WorkItemStore(tfsServer);
WorkItemCollection wicollection = Store.Query(sbSql.ToString());
foreach (WorkItem item in wicollection)
{
ProTask proTask = new ProTask();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//当前进度
string strRate = "";
float RemainingWork = Convert.ToSingle(item["Microsoft.VSTS.Scheduling.RemainingWork"]);
float CompletedWork = Convert.ToSingle(item["Microsoft.VSTS.Scheduling.CompletedWork"]);
if ((int)CompletedWork == 0)
{
strRate = "0%";
}
else if ((int)RemainingWork == 0)
{
strRate = "100%";
}
else
{
float Rate = CompletedWork / (CompletedWork + RemainingWork);
Rate = Rate * 100;
strRate = Convert.ToString(Rate);
if (strRate.Length > 2)
{
strRate = strRate.Substring(0, 2);
}
strRate = strRate + "%";
}
proTask.PCT = strRate;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
proTask.TaskName = item.Title;
proTask.StartDate = Convert.ToDateTime(item["Microsoft.VSTS.Scheduling.StartDate"]);
proTask.FinishDate = Convert.ToDateTime(item["Microsoft.VSTS.Scheduling.FinishDate"]);
proTask.Resources = item["System.AssignedTo"].ToString();
proTask.WBS = item["Microsoft.VSTS.Scheduling.WBS"].ToString();
taskList.Add(proTask);
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
gvTask.DataSource = taskList;
gvTask.DataBind();
}
附:
在浏览所有进度时出现问题:拒绝访问(The work item does not exist, or you do not have permission to access it. )
技术说明 :在Project2007之前的版本可以通过oledb的方式直接读取project的mpp文件来显示进度,在project2007时不再提供oledb的方式了,可能的两种实现方法有:
1、使用Project2007提供的COM接口,读取mpp文件中的任务 + TFS中的实时进度
2、把所有的进度安排(包括父任务)发布到TFS中,直接读取TFS中的实时进度
一、COM接口的方式
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
速度比较慢;b/s结构时有点问题;
经常报错: 异常详细信息: System.Runtime.InteropServices.COMException: 消息筛选器显示应用程序正在使用中。试了一些解决方案,好像都不行的。
二、直接读取TFS的方式
主意思路是:在TFS中定制一个新的工作项类型,其中包含一个新的工作项字段(项目分解结构);设置Project和TFS之间同步哪些字段,把新的字段包含进去;在Project中使用这个新的工作项类型;使用TFS SDK读出进度情况。
主要分成以下几个步骤进行:
(以下的command命令都是在VS2005命令提示窗口输入的)、
1、加入新的工作项类型
用以下命令导出原有的工作项类型:
然后编辑这个xml文件,以下文件中红色的部分是修改的地方:
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2、确定TFS和project之间可以同步哪些字段
首先下载原有配置:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
三、在project中使用"进度"工作项类型
这一步比较简单,就是在project中选择团队项目,排计划时选择"进度"类型,然后发布到tfs中就可以了
四、使用tfs SDK读取进度
就是使用TFS SDK就可以了:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
附:
在浏览所有进度时出现问题:拒绝访问(The work item does not exist, or you do not have permission to access it. )
原因:tfs装的是90天测试版,在过期时把日期改为之前两个月了,导致进度这个工作项的加入时间和系统时间有冲突,将系统时间改为工作项加入之后的时间,重启iis就可以了
本文转自永春博客园博客,原文链接:http://www.cnblogs.com/firstyi/archive/2008/04/10/1140897.html,如需转载请自行联系原作者