如何在TFS的过程模板中添加报表
在新建团队项目的过程中,TFS的“新建团队项目向导”会根据用户选择的过程模板类型(CMMI, Scrum,Agile等)自动为团队项目创建一个SSRS(SQL Server Reporting Service)报表站点。在大多数情况下,这些开箱即用的报表可以满足用户的基本需求。但是也有许多企业会根据自己的管理流程特点,开发和定制许多报表。用户可以在创建团队项目以后,手动将这些定制的报表发布到每个团队项目中。但是如果团队项目比较多,每次手动发布报表就比较耗时耗力,还容易出现错误。实际上TFS的过程模板支持自定义的报表,只需要通过修改过程模板,并将自己新建的报表包含在过程模板中,在新建团队项目的时,系统会自动将这些报表发布到TFS的报表站点中。下面我就来介绍如何修改过程模板,实现自定义报表的自动化部署。
过程模板结构
首先将现有的过程模板下载到本地,这里以CMMI过程模板为列。

建流程模板的所有文件添加到一个空的项目中(如下图),这样可以方便的通过Visual Studio来修改流程模板文件。
通过分析,我们发现TFS的报表文件保存在一个叫做Reports的文件夹中,其中所有的.rdl文件是报表文件,ReportsTasks.xml文件是在创建团队项目过程中,TFS执行的任务文件,用来自动创建报表站点和报表。

增加报表文件(.rdl)
将我们自定义的报表复制到Reports目录中即可。这里,用于测试,我把自己自定义开发的一个用于统计团队项目任务的报表复制到Reports目录中。

修改报表任务
在Visual Studio中打开报表任务的文件ReportsTask.xml:
1. 需要增加新的报表节点:reports,最简单的方法就是复制之前已经存在的节点。但是需要注意,如果你的报表中不需要参数ExplicitProject,应该将这个节点删除(我的示例报表就不需要这个参数)。
2. 需要指定报表的目录,如果打算放在报表站点的根目录中,保持folder属性的值为空就可以。
3. 需要指定数据源datasources,name是指报表系统中的已经存在的数据源,dsname是指报表中的数据源名称。

更新流程模板,并新建团队项目
通过团队资源管理器上传流程模板,以更新模板(如下图)。更新流程模板以后,可以使用新建的模板创建一个团队项目。在创建团队项目的过程中,如果所必须的配置没有完成,可能会出现错误,这时可以通过错误详细信息排查问题。

验证新增报表
团队项目创建成功以后,在报表站点中会看到自己定制的报表(如下图1),这是你就可以验证自己的报表了(如图2)

图1

图2
常见问题
1. 报表文件的XML版本不正确
在创建团队项目的过程中提示下面的错误,原因是使用Visual Studio 2015编辑或者开发报表,报表文件的Schemal自动被修改成了2016,而TFS 2013不支持这种格式。
| 异常消息: System.Web.Services.Protocols.SoapException: 此报表的定义无效或不受此版本的 Reporting Services 支持。该报表定义可能是使用以前版本的 Reporting Services 创建的,或包含格式不符合 Reporting Services 架构或无效的内容。 |
2. 必须的数据源不存在
需要在创建团队项目前,将报表的数据源创建好,并配置好数据库连接。
如何在TFS的过程模板中添加报表的更多相关文章
- 如何在ChemDraw 15.1 Pro中添加模板
ChemDraw化学绘图工具为了方便用户的使用,特地开发了众多的各种类型模板.用户在绘制一些简单或复杂的化学结构式时,可以直接从ChemDraw模板库里直接调用使用,虽然ChemDraw模板非常的丰富 ...
- 如何在github的README.md中添加图片
如何在github的README.md中添加图片 总结: 链接引用: 简介: 1.在github上的仓库建立一个存放图片的文件夹,文件夹名字随意.如:img ...
- WPF ListBoxItem模板中添加CheckBox选中问题
原文:WPF ListBoxItem模板中添加CheckBox选中问题 是这样的,需要一个ListBox来展示照片,并添加一个选中的CheckBox.这就需要对ListBox的ItemTemplate ...
- (转)如何在maven的pom.xml中添加本地jar包
1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下所示: 1 groupId 2 artifactId 3 version 4 jar包的依赖 如果要将 ...
- 在django模板中添加jquery
路径 /project_name /app_name /templates /index.html /project_name setting.py /static /js jquery.js 导入方 ...
- (转)如何在maven的pom.xml中添加本地jar包
转载自: https://www.cnblogs.com/lixuwu/p/5855031.html 1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下 ...
- 如何在Windows 10 IoT Core中添加其他语言的支持,如中文
目前很多开发者已经开始使用Windows 10 IoT来做物联网领域的开发了,目前Windows 10 IoT Core的版本支持树莓派2(以及新出的树莓派3).Minnowboard Max以及Dr ...
- django模板中变更数据库信息后,如何把变更后的信息同步更新到数据库
我们在基于django开发项目的过程中,经常会遇到数据库表字段增加,删除,或者修改的情况,以及字段属性更改的情况,因为django基于ORM模式来操作数据库的, 传统上如果django项目中的数据库m ...
- LoadRunner测试场景中添加负载生成器
如何在LoadRunner测试场景中添加负载生成器 本文对如何在LoadRunner的测试场景中添加负载生成器,如何使用负载生成器的方法,总结形成操作指导手册,以指导测试人员指导开展相关工作. 1.什 ...
随机推荐
- 簡單SQL存儲過程實例
簡單SQL存儲過程實例 摘自:http://blog.csdn.net/libra6956/article/details/5589173 实例1:只返回单一记录集的存储过程. 银行存款表(bankM ...
- knockout的依赖属性dependentObservable的参数 和Value转换器
可写的依赖监控属性ko.dependentObservable的参数 read: 必选,一个用来执行取得依赖监控属性当前值的函数write: 可选,如果声明将使你的依赖属性可写,别的代码如果这个 ...
- wget进行整站下载
wget加上参数之后,即可成为相当强大的下载工具. wget -r -p -np -k http://xxx.com/abc/ -r, --recursive(递归) specif ...
- mysql select语句解析
select语句用于从一个或多个数据表选出特定行.特定列的交集 最简单的select语句的语法格式如下: select column1,column2 ........ (列) from 数 ...
- Little Jumper---(三分)
Description Little frog Georgie likes to jump. Recently he have discovered the new playground that s ...
- NoSuchMethodException <init>()
1. Question Description: SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/n ...
- online judge(ACM) 的设计与分析 (有c#demo)
ACM.OJ,算法在线判题系统. 帮朋友完成毕业设计而写的,软件环境windows系统,语言是C# winform(因为我不熟悉asp.net,现在暂用winform写的demo). 看了下其他相关论 ...
- sessionId在fragment里无法保存的问题
fragment页面需要验证用户是否登录.若没登陆调用登录页面,后返回fragment. 这个问题解决 sessionId = SharePreferenceUtils.getSessionId(); ...
- [程序人生]前途无"亮‘’的大学
转眼之间就到大四了,今天晚上很迷茫,很纠结,想了好多,好多,真的,长大之后,自从第一次失恋之后,第一次会想到这么的多. 嗯,先自我介绍哈吧,我是从云南的大山里走出来的孩子,什么样的大山,就是到 ...
- django使用笔记
django的具体使用可以看官方手册http://djangobook.py3k.cn,这里主要记录使用django中遇到的问题. 1.中文编码问题. 因为我们用到的东西基本上都有中文,在settin ...