SQL Server Reporting Service - 一步部署 TFS 项目报表

上次介绍了 SQL Server Reporting Service 命令行部署报表的基本内容, 利用这些知识我们可以轻松的部署报表, 然而在 TFS 中, 每个项目都有它对应的报表, 这些报表如果要一个个的更新也是件痛苦的事情, 现在我也遇到了这个问题, 针对 TFS 开发了两张报表, 但是如何将这些报表应用到所有项目上呢? 结合之前的部署脚本知识, 我们可以使用下面方法实现:

首先建立一个批处理文件ImportWIT.bat, 用来更新某个项目的Work Item定义文件:

 

SQL Server Reporting Service - 一步部署 TFS 项目报表@ECHO OFF 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表CALL 
"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表witimport 
/%1 /%2 /f WorkItemDefinitions\Task.xml 
SQL Server Reporting Service - 一步部署 TFS 项目报表witimport 
/%1 /%2 /f WorkItemDefinitions\Bug.xml 
SQL Server Reporting Service - 一步部署 TFS 项目报表witimport 
/%1 /%2 /f WorkItemDefinitions\Scenario.xml 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表rem 
/%1 /%2 
SQL Server Reporting Service - 一步部署 TFS 项目报表rem echo Hit any key to 
continueSQL Server Reporting Service - 一步部署 TFS 项目报表 
SQL Server Reporting Service - 一步部署 TFS 项目报表rem PAUSE
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表

在WorkItemDefinitions目录下将所有对应Work Item定义文件放入:

SQL Server Reporting Service - 一步部署 TFS 项目报表

然后建立一个Reports目录, 将所有需要的报表文件放入, 如下图:

SQL Server Reporting Service - 一步部署 TFS 项目报表

然后创建一个脚本文件PublishReports.rss, 内容如下:

 

SQL Server Reporting Service - 一步部署 TFS 项目报表'============================================================================= 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
  File:      PublishSampleReports.rss 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
  Summary:  Demonstrates a script that can be used with RS.exe to 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
         publish the sample reports that ship with Reporting Services. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
--------------------------------------------------------------------- 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 This file is part of Microsoft SQL Server Code Samples. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
  Copyright (C) Microsoft Corporation.  All rights reserved. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 This source code is intended only as a supplement to Microsoft 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 Development Tools and/or on-line documentation.  See these other 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 materials for detailed information regarding Microsoft code samples. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 PARTICULAR PURPOSE. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
============================================================================= 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 1.0 Documentation 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 Read the following in order to familiarize yourself with the sample script. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 1.1 Overview 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 This sample script uses a script file (.rss) and the script environment to run 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 Web service operations on a specified report server. The script creates a folder 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 that you specify as a command-prompt variable using the 杤 switch, and then 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 publishes the sample reports that ship with Reporting Services to a report server. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 Depending on the location of your sample reports, you may need to modify the 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 value of the filePath variable, which references the path to your sample reports. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 1.2 Script Variables 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 Variables that are passed on the command line with the -v switch: 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 (a) parentFolder - corresponds to the folder that the script creates and uses 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
     to contain your published reports 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 1.3 Sample Command Lines 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 1.3.1 Use the script to publish the sample reports to an AdventureWorks Sample Reports folder. 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
       rs -i PublishSampleReports.rss -s http://myserver/reportserver 
SQL Server Reporting Service - 一步部署 TFS 项目报表'
 
SQL Server Reporting Service - 一步部署 TFS 项目报表

SQL Server Reporting Service - 一步部署 TFS 项目报表
Dim definition As [Byte]() = Nothing 
SQL Server Reporting Service - 一步部署 TFS 项目报表
Dim warnings As Warning() = Nothing 
SQL Server Reporting Service - 一步部署 TFS 项目报表
Dim parentFolder As String = "" 
SQL Server Reporting Service - 一步部署 TFS 项目报表
Dim parentPath As String = "/" + parentFolder 
SQL Server Reporting Service - 一步部署 TFS 项目报表
Dim filePath As String = "Reports\" 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表SQL Server Reporting Service - 一步部署 TFS 项目报表
Public Sub Main()Sub Main() 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表    rs.Credentials 
= System.Net.CredentialCache.DefaultCredentials 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表    
''Create the parent folder 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    'Try 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    '    rs.CreateFolder(parentFolder, "/", Nothing) 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    '    Console.WriteLine("Parent folder {0} created successfully", parentFolder) 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    'Catch e As Exception 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    '    Console.WriteLine(e.Message) 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    'End Try 
SQL Server Reporting Service - 一步部署 TFS 项目报表

SQL Server Reporting Service - 一步部署 TFS 项目报表    
''Create the AdventureWorks shared data source 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    'CreateSampleDataSource("AdventureWorks", "SQL", "data source=(local);initial catalog=AdventureWorks") 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    'CreateSampleDataSource("AdventureWorksDW", "OLEDB-MD", _ 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    '    "data source=localhost;initial catalog=Adventure Works DW") 
SQL Server Reporting Service - 一步部署 TFS 项目报表

SQL Server Reporting Service - 一步部署 TFS 项目报表    
'Publish the sample reports 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    Dim sreader As New System.IO.StreamReader("ProjectInfo.ini"
SQL Server Reporting Service - 一步部署 TFS 项目报表    
Dim pName As String = "" 
SQL Server Reporting Service - 一步部署 TFS 项目报表    pName 
= sreader.ReadLine() 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表    PublishReport(
"SSW Progress Report", pName) 
SQL Server Reporting Service - 一步部署 TFS 项目报表    PublishReport(
"SSW Release Plan", pName) 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表
End Sub
 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表SQL Server Reporting Service - 一步部署 TFS 项目报表
Public Sub CreateSampleDataSource()Sub CreateSampleDataSource(ByVal name As StringByVal extension As StringByVal connectionString As String
SQL Server Reporting Service - 一步部署 TFS 项目报表    
'Define the data source definition. 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    Dim definition As New DataSourceDefinition() 
SQL Server Reporting Service - 一步部署 TFS 项目报表    definition.CredentialRetrieval 
= CredentialRetrievalEnum.Integrated 
SQL Server Reporting Service - 一步部署 TFS 项目报表    definition.ConnectString 
= connectionString 
SQL Server Reporting Service - 一步部署 TFS 项目报表    definition.Enabled 
= True 
SQL Server Reporting Service - 一步部署 TFS 项目报表    definition.EnabledSpecified 
= True 
SQL Server Reporting Service - 一步部署 TFS 项目报表    definition.Extension 
= extension 
SQL Server Reporting Service - 一步部署 TFS 项目报表    definition.ImpersonateUser 
= False 
SQL Server Reporting Service - 一步部署 TFS 项目报表    definition.ImpersonateUserSpecified 
= True 
SQL Server Reporting Service - 一步部署 TFS 项目报表    
'Use the default prompt string. 
SQL Server Reporting Service - 一步部署 TFS 项目报表
    definition.Prompt = Nothing 
SQL Server Reporting Service - 一步部署 TFS 项目报表    definition.WindowsCredentials 
= False 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表    
Try 
SQL Server Reporting Service - 一步部署 TFS 项目报表        rs.CreateDataSource(name, parentPath, 
False, definition, Nothing
SQL Server Reporting Service - 一步部署 TFS 项目报表        Console.WriteLine(
"Data source {0} created successfully", name) 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表    
Catch e As Exception 
SQL Server Reporting Service - 一步部署 TFS 项目报表        Console.WriteLine(e.Message) 
SQL Server Reporting Service - 一步部署 TFS 项目报表    
End Try 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表
End Sub
 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表SQL Server Reporting Service - 一步部署 TFS 项目报表
Public Sub PublishReport()Sub PublishReport(ByVal reportName As StringByVal projectName As String
SQL Server Reporting Service - 一步部署 TFS 项目报表    
Try 
SQL Server Reporting Service - 一步部署 TFS 项目报表        
Dim stream As FileStream = File.OpenRead(filePath + reportName + ".rdl"
SQL Server Reporting Service - 一步部署 TFS 项目报表        definition 
= New [Byte](stream.Length) {} 
SQL Server Reporting Service - 一步部署 TFS 项目报表        stream.Read(definition, 
0CInt(stream.Length)) 
SQL Server Reporting Service - 一步部署 TFS 项目报表        stream.Close() 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表    
Catch e As IOException 
SQL Server Reporting Service - 一步部署 TFS 项目报表        Console.WriteLine(e.Message) 
SQL Server Reporting Service - 一步部署 TFS 项目报表    
End Try 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表    
Try 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表        parentPath 
= "/" + projectName 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表        warnings 
= rs.CreateReport(reportName, parentPath, False, definition, Nothing
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表        
If Not (warnings Is NothingThen 
SQL Server Reporting Service - 一步部署 TFS 项目报表            
Dim warning As Warning 
SQL Server Reporting Service - 一步部署 TFS 项目报表            
For Each warning In warnings 
SQL Server Reporting Service - 一步部署 TFS 项目报表                Console.WriteLine(warning.Message) 
SQL Server Reporting Service - 一步部署 TFS 项目报表            
Next warning 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表        
Else 
SQL Server Reporting Service - 一步部署 TFS 项目报表            Console.WriteLine(
"Report: {0} published successfully with no warnings", reportName) 
SQL Server Reporting Service - 一步部署 TFS 项目报表        
End If 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表    
Catch e As Exception 
SQL Server Reporting Service - 一步部署 TFS 项目报表        Console.WriteLine(e.Message) 
SQL Server Reporting Service - 一步部署 TFS 项目报表    
End Try 
SQL Server Reporting Service - 一步部署 TFS 项目报表
End Sub

SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表

根据上面的代码可以看到需要一个保存项目名的文件, 最后我们就创建一个ProjectInfo.ini文件, 该文件内容留空即可.

上述文件都船舰好了之后接着创建一个总体的脚本, 命名为Update.bat, 内容为:

SQL Server Reporting Service - 一步部署 TFS 项目报表@ECHO OFF 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表copy nul ProjectInfo.ini 
/
SQL Server Reporting Service - 一步部署 TFS 项目报表echo 
%2>>ProjectInfo.ini 
SQL Server Reporting Service - 一步部署 TFS 项目报表
SQL Server Reporting Service - 一步部署 TFS 项目报表RS 
-"PublishReports.rss" -"http://%1/ReportServer/" 
SQL Server Reporting Service - 一步部署 TFS 项目报表ImportWIT.bat 
%1 %2
SQL Server Reporting Service - 一步部署 TFS 项目报表

 

以上就是所有需要创建的内容, 如下:

SQL Server Reporting Service - 一步部署 TFS 项目报表

其中RS.EXE文件可以在SQL Server安装目录中找到.

接下来我们来执行升级某个Team Project的具体操作:

打开CMD, 输入如下命令:

SQL Server Reporting Service - 一步部署 TFS 项目报表update.bat [TFSServerName] [TeamProjectName]

 

这样就可以将一个Team Project中的工作项和报表更新成脚本中提到的内容.

完整升级包下载: http://files.cnblogs.com/WilsonWu/TFS_2008_SSWTemplateUpdateScript_ver1-1.zip

上一篇:[Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test)


下一篇:浅谈sqlserver中的“锁”