用C#显示Project2007+TFS2008结合后的实时项目进度

简介:
前期说明 :在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、加入新的工作项类型
用以下命令导出原有的工作项类型:
witexport  / " E:\scheduletask.xml "   / http://server:8080/   / p projectname  / " 任务 "
然后编辑这个xml文件,以下文件中红色的部分是修改的地方:
工作项类型
然后用以下命令把它加入到tfs中去:
witimport  / " E:\\scheduletask.xml "   / " 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();

            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();

                
//当前进度
                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(02);
                    }

                    strRate 
= strRate + "%";
                }

                proTask.PCT 
= strRate;

                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);
            }



            gvTask.DataSource 
= taskList;
            gvTask.DataBind();
        }

附:
在浏览所有进度时出现问题:拒绝访问(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,如需转载请自行联系原作者

相关文章
|
1月前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
8月前
|
C#
C#之四十六 迷你贪吃蛇项目
C#之四十六 迷你贪吃蛇项目
56 0
|
1月前
|
传感器 数据采集 大数据
C#/BS手麻系统源码 手术麻醉管理系统源码 商业项目源码
手麻系统从麻醉医生实际工作环境和流程需求方面设计,与HIS,LIS,PACS,EMR无缝连接,方便查看患者的信息;实现术前、术中、术后手术麻醉信息全记录;减少麻醉医师在手术中填写麻醉记录单时间,证手术麻醉相关信息的准确性,有效降低医护人员的术中书写医疗文书的压力,使得麻醉医生在术中能够更加集中精力在病人的麻醉操作上,提升手术质量
28 2
|
1月前
|
安全 算法 测试技术
C#编程实战:项目案例分析
【4月更文挑战第20天】本文以电子商务系统为例,探讨C#在实际项目中的应用。通过面向对象编程实现组件抽象和封装,确保代码的可维护性和可扩展性;利用安全性特性保护用户数据;借助数据库操作处理商品信息;通过逻辑控制和算法处理订单;调试工具加速问题解决,展现C#的优势:面向对象、数据库交互、数据安全和开发效率。C#在实际编程中展现出广泛前景。
|
1月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
102 2
|
10月前
|
开发框架 .NET C#
C#/.NET/.NET Core优秀项目和框架精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)
C#/.NET/.NET Core优秀项目和框架精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)
172 1
|
1月前
|
运维 数据挖掘 C#
C#大型LIS检验信息系统项目源码
LIS系统能实现临床检验信息化,检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后,自动生成打印报告,通过网络存储在数据库中,使医生能够通过医生工作站方便、及时地看到患者的检验结果。
44 0
|
1月前
|
数据采集 开发框架 JavaScript
C#/.NET/.NET Core优秀项目和框架2023年12月简报
C#/.NET/.NET Core优秀项目和框架2023年12月简报
172 0
|
1月前
|
Rust 算法 C#
C#/.NET/.NET Core优秀项目和框架2023年11月简报
C#/.NET/.NET Core优秀项目和框架2023年11月简报
|
8月前
|
JavaScript C# 数据安全/隐私保护
C#/.NET/.NET Core优秀项目和框架2023年9月简报
C#/.NET/.NET Core优秀项目和框架2023年9月简报