Reporting Services报表的发布

    在报表设计器中设计完成的报表,若要布署到生产环境中,目前有这样几种方式:
    1.使用报表管理器,创建报表目录、数据源,上传报表文件。这种方式仅适合非常少量的报表,或对个别报表进行更新时使用。
    2.使用开发环境的DEPLOY功能,指定TargetServerURL、TargetFolder等属性即可很方便地将所有报表发布到指定环境。这种方式虽然方便,但却要求开发环境,而这是不可能随时随地都能得以满足的。
    3.使用脚本文件和Reporting Services简单对象访问协议(SOAP)API ,只需将安装脚本文件及报表定义文件RDL拷贝到某一目录下,然后指定一些命令参数即可轻松完成报表的发布,当然您必须拥有RS实用工具的运行权限,以及在报表服务器上创建目录和上传文件的权限,而这些权限一般情况下都不成问题,正常情况下,Reporting Services安装完毕后,RS实用工具就已经在默认命令行的path中了。
    联机文件中提供了一个示例的脚本,我对其增加了一些功能,可以判断文件夹及数据源是否已经存在,从而防止重复创建,并可以自动遍历当前目录下的报表文件进行发布。
    注意:该脚本必须用Visual Studio VB.NET语言编写,象Left这样的函数必须完全指定名字空间才能正确编译通过。
None.gif ' parentFolder是用rs脚本命令行开关-v定义的全局变量
None.gif

None.gif
Dim  definition  As  [ Byte ]()  =   Nothing
None.gif
Dim  warnings  As  Warning()  =   Nothing
None.gif
Dim  parentPath  As   String   =   " / "   +  parentFolder
None.gif
Dim  filePath  As   String   =   ""   ' 当前目录
None.gif

ExpandedBlockStart.gifContractedBlock.gif
Public   Sub Main() Sub Main()
InBlock.gif
InBlock.gif    rs.Credentials 
= System.Net.CredentialCache.DefaultCredentials
InBlock.gif    
Dim name As String
InBlock.gif
InBlock.gif    
Dim items As CatalogItem() = Nothing
InBlock.gif    
dim FolderExist,DataSourceExist as boolean
InBlock.gif      
InBlock.gif    
Try
InBlock.gif        items 
= rs.ListChildren("/"True'假设本项目在ReportServer根目录下创建
InBlock.gif
        dim i as Integer
InBlock.gif        
for i=0 to items.length-1
InBlock.gif            
if items(i).name.toUpper=parentFolder.toUpper and items(i).Type=1 Then '1=Folder
InBlock.gif
                FolderExist=True
InBlock.gif            
end if
InBlock.gif            
if items(i).name.toUpper=parentFolder.toUpper and items(i).Type=5 Then '1=DataSource
InBlock.gif
                DataSourceExist=True
InBlock.gif            
end if
InBlock.gif        
next
InBlock.gif    
Catch e As SoapException
InBlock.gif       Console.
WriteLine(e.Detail.InnerXml.ToString())
InBlock.gif    
End Try
InBlock.gif
InBlock.gif    
if FolderExist THEN
InBlock.gif        Console.
WriteLine("文件夹已经存在!")
InBlock.gif    
ELSE
InBlock.gif        
Try
InBlock.gif            rs.CreateFolder(parentFolder, 
"/"Nothing)
InBlock.gif            Console.
WriteLine("文件夹: {0} 成功创建!", parentFolder)
InBlock.gif        
Catch e As Exception
InBlock.gif            Console.
WriteLine(e.Message)
InBlock.gif        
End Try
InBlock.gif    
END IF
InBlock.gif
InBlock.gif    
if FolderExist and DataSourceExist THEN
InBlock.gif        Console.
WriteLine("数据源已经存在!")
InBlock.gif    
else
InBlock.gif        CreateEstateDataSource()
InBlock.gif    
end if
InBlock.gif
InBlock.gif    
Try
InBlock.gif        
Dim di As DirectoryInfo
InBlock.gif        
if filePath="" then di = new DirectoryInfo("."else di = new DirectoryInfo(filePath)
InBlock.gif        
Dim files As FileInfo() = di.GetFiles("*.rdl")
InBlock.gif        Console.
WriteLine("共 {0} 个报表文件", files.Length)
InBlock.gif        
Dim fiNext As FileInfo
InBlock.gif        
For Each fiNext In files
InBlock.gif            PublishReport(Microsoft.VisualBasic.
Left(fiNext.name,fiNext.name.length-4))
InBlock.gif        
Next
InBlock.gif
InBlock.gif    
Catch e As Exception
InBlock.gif        Console.
WriteLine("搜索报表文件失败: {0}", e.ToString())
InBlock.gif    
End Try
InBlock.gif
ExpandedBlockEnd.gif
End Sub

None.gif
ExpandedBlockStart.gifContractedBlock.gif
Public   Sub CreateEstateDataSource() Sub CreateEstateDataSource()
InBlock.gif    
Dim name As String = parentFolder '数据源名与文件夹名相同
InBlock.gif
    Dim parent As String = "/" + parentFolder
InBlock.gif
InBlock.gif    
Dim definition As New DataSourceDefinition()
InBlock.gif    definition.CredentialRetrieval 
= CredentialRetrievalEnum.Store
InBlock.gif    definition.UserName
="sa"
InBlock.gif
    definition.Password="******"
InBlock.gif
    definition.ConnectString = "data source=(local);initial catalog=" & parentFolder '假设数据库名也与文件夹名相同
InBlock.gif
    definition.Enabled = True
InBlock.gif    definition.EnabledSpecified 
= True
InBlock.gif    definition.Extension 
= "SQL"
InBlock.gif
    definition.ImpersonateUser = False
InBlock.gif    definition.ImpersonateUserSpecified 
= True
InBlock.gif    definition.Prompt 
= Nothing
InBlock.gif    definition.WindowsCredentials 
= False
InBlock.gif
InBlock.gif    
Try
InBlock.gif        rs.CreateDataSource(name, parent, 
False, definition, Nothing)
InBlock.gif        Console.
WriteLine("数据源: {0} 成功创建!", name)
InBlock.gif    
Catch e As Exception
InBlock.gif        Console.
WriteLine(e.Message)
InBlock.gif    
End Try
InBlock.gif    
ExpandedBlockEnd.gif
End Sub
 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
Public   Sub PublishReport() Sub PublishReport(ByVal reportName As String)
InBlock.gif    
Try
InBlock.gif        
Dim stream As FileStream = File.OpenRead(filePath + reportName + ".rdl")
InBlock.gif        definition 
= New [Byte](stream.Length) {}
InBlock.gif        stream.Read(definition, 
0CInt(stream.Length))
InBlock.gif        stream.Close()
InBlock.gif    
Catch e As IOException
InBlock.gif        Console.
WriteLine(e.Message)
InBlock.gif    
End Try
InBlock.gif
InBlock.gif    
Try
InBlock.gif        warnings 
= rs.CreateReport(reportName, parentPath, True, definition, Nothing)
InBlock.gif
InBlock.gif        
If Not (warnings Is NothingThen
InBlock.gif            
Dim warning As Warning
InBlock.gif            
For Each warning In warnings
InBlock.gif                Console.
WriteLine(warning.Message)
InBlock.gif            
Next warning
InBlock.gif        
Else
InBlock.gif            Console.
WriteLine("报表: {0} 成功布署!", reportName)
InBlock.gif        
End If
InBlock.gif    
Catch e As Exception
InBlock.gif        Console.
WriteLine(e.Message)
InBlock.gif    
End Try
ExpandedBlockEnd.gif
End Sub
 
None.gif

    将以上脚本(假设为sample.rss)与报表定义文件rdl放在同一目录下,执行类似这样的命令即可:
None.gif rs  - i sample.rss  - s http: // localhost / reportserver  - v parentFolder = " sampleFolder "

转载于:https://www.cnblogs.com/dotAge/archive/2005/09/07/231912.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值