自动部署报表到报表服务器-阿里云开发者社区

开发者社区> 大数据> 正文

自动部署报表到报表服务器

简介:

 以下脚本对网上搜到的(见上篇转载文章)做了一些修改。首先,取消数据源的发布。在原脚本中将发布一个定义的数据源,然后所有报表的数据源同时指向这个发布的数据源。这在现实环境中是不现实的,所以修改后的脚本不再发布数据源。默认所有的数据源已发布到服务器指定的目录中(脚本中定义的datasourceFolderName)。另外,原脚本中只支持一张报表有一个数据源,而现实中很可能会出现一张报表联到多个数据源的情况。此时运行原脚本则所有的数据源都会被改成相同的而导致实际上报表无法正常运行。改进后的脚本允许一张报表中含有多个数据源的情况。在发布报表时会将报表中的数据源替换为数据源目录下的同名数据源。因此,在发布报表之前需要先将所有的数据源先发布到报表服务器上。


 

deploy.bat


  1. @echo off 
  2. REM configure file with the path 
  3. set config="deployReport.rss" 
  4. REM target reporting services 
  5. set server="http://dc1/reportserver" 
  6. REM report folder 
  7. set filePath="C:\\reports\\" 
  8. REM target reporting services folder 
  9. set reportsFolderName="test" 
  10. REM target data sources folder 
  11. set datasourceFolderName="Data Sources" 
  12. REM execute log 
  13. set log="C:\log.txt" 
  14.  
  15. rs -i %config%  -s %server% -v filePath=%filePath% -v reportsFolderName=%reportsFolderName% -v datasourceFolderName=%datasourceFolderName% >%log% 
  16.  
  17. rem pause 

deployReport.rss

  1. Dim definition As [Byte]() = Nothing 
  2. Dim warnings As Warning() = Nothing 
  3. Dim datasourceFolderPath As String = "/" + datasourceFolderName 
  4. Dim reportsFolderPath As String = "/" + reportsFolderName 
  5.  Public Sub Main() 
  6.     rs.Credentials = System.Net.CredentialCache.DefaultCredentials 
  7.     CreateReportFolder(reportsFolderName) 
  8.     DeployRepors(filePath) 
  9. End Sub 
  10. Public Sub CreateReportFolder(ByVal reportFolder As String
  11.     Try 
  12.         rs.CreateFolder(reportFolder,"/",Nothing
  13.         Console.WriteLine("Parent Folder Created:{0}",reportFolder) 
  14.     Catch e As Exception 
  15.         Console.WriteLine(e.Message) 
  16.     End Try
  17. End Sub
  18. Public Sub DeployRepors(ByVal filePath As String
  19.     Dim tempFileAry As String() 
  20.     Dim reportFilePath as String 
  21.     tempFileAry = Directory.GetFiles(filepath) 
  22.     For Each reportFilePath In tempFileAry 
  23.         Dim fileName As String 
  24.         fileName = reportFilePath.Substring(reportFilePath.LastIndexOf("\") + 1) 
  25.         Dim fileSuffix As String 
  26.       fileSuffix = fileName.Substring(fileName.LastIndexOf(".") + 1) 
  27.         Select Case fileSuffix 
  28.             Case "rdl" 
  29.                 PublishReport(fileName,fileSuffix) 
  30.         End Select 
  31.     Next 
  32. End Sub 
  33. Public Sub PublishReport(ByVal reportName As String,ByVal fileSuffix As String
  34.     Try 
  35.         Dim stream As FileStream = File.OpenRead(filePath + reportName) 
  36.         definition= New [Byte](stream.Length) {} 
  37.         stream.Read(definition, 0, CInt(stream.Length)) 
  38.         stream.Close() 
  39.     Catch e As IOException 
  40.         Console.WriteLine(e.Message) 
  41.     End Try
  42.     Try 
  43.       If(fileSuffix="rdl"Then 
  44.         warnings = rs.CreateReport(reportName.Substring(0,reportName.LastIndexOf(".")),reportsFolderPath, true, definition, Nothing
  45.          SetReportDataSourceRef(reportName.Substring(0,reportName.LastIndexOf("."))) 
  46.       End If 
  1.         If Not (warnings Is NothingThen 
  2.             Dim warning As Warning 
  3.             For Each warning In warnings 
  4.                 Console.WriteLine(warning.Message) 
  5.             Next warning 
  6.         Else 
  7.             Console.WriteLine("Report: {0} published successfully with no warnings", reportName) 
  8.         End If
  9.     Catch e As Exception 
  10.         Console.WriteLine(e.Message) 
  11.     End Try 
  12. End Sub 
  13. Public Sub SetReportDataSourceRef(ByVal reportName As String
  14. Try 
  15. Dim datasources As [DataSource]() = rs.GetItemDataSources(reportsFolderPath + "/" + ReportName) 
  16. dim i as integer 
  17. for i=0 to  datasources.getlength(0)-1 
  18. Dim Item1 as DataSourceReference = New DataSourceReference 
  19. Item1.Reference = "/Data Sources/"+datasources(i).name 
  20. datasources(i).Item = Item1 
  21.  next i 
  22. rs.SetItemDataSources(reportsFolderPath + "/" + ReportName, datasources) 
  23. Catch _exception As Exception 
  24.      Console.WriteLine(_exception) 
  25.  End Try 
  26. End Sub   









本文转自 boyi55 51CTO博客,原文链接:http://blog.51cto.com/boyi55/450776,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
大数据
使用钉钉扫一扫加入圈子
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

其他文章