• 命令行部署Reporting Services项目


    首先可以下载自带的部署例子PublishReports.zip

    在PublishReports.rss中,需要修改相关的报表项目信息:

    'Variables need to be modified
    Dim parentFolder As String = "fooFolder"
    Dim connectString as String = "data source=(local);initial catalog=Test" 'Connect String
    Dim DataSourceName = "Test_DB"
    Dim userName as String = "administrator"
    Dim password as String = "pass@word1" 


    包括报表项目的文件夹名称,连接数据的名称,连接字符串,连接数据库的用户名和密码。
    几个辅助的函数:CreateDataSource负责根据相关信息建立数据源连接;PublishReport用于发布PublishReports.rss所在目录的所有以rdl为扩展名的报表文件;PublishImage用于发布所在目录的图片文件。rss文件也对错误处理进行了相应的优化,显示较为友好的处理信息。

     

    之后批处理

    rs -i PublishReports.rss -s http://myserver/reportserver



    因为项目中Reporting Services报表需要自动部署,所以网上找了找

    有现成的代码,但发现它还是有点问题

    于是动手把它做了修改。已适应项目的需求

    脚本如下

    Dim definition As [Byte]() = Nothing
    Dim warnings As Warning() = Nothing
    '远程报表数据源所在目录名,不支持中文 [此项需要修改]
    Dim datasourceFolderName As String = "Data Sources"

    '数据源名称 [此项需要修改]
    Dim datasourcefileName As String = "PTDS_PW_conn"

    '远程报表数据源所在目录路径
    Dim datasourceFolderPath As String = "/" + datasourceFolderName

    '报表目录名 所有发布的报表放在此目录 [此项需要修改]
    Dim reportsFolderName As String = "PW"

    '报表上级目录名 ,根目录为"/",只支持根目录以及根目录下一层.即报表上级目录名最多为如/aaa/   [此项需要修改]
    Dim reportsfatherPath As String = "/ptds_reports"

    '报表目录名 所有发布的报表放在此目录路径
    Dim reportsFolderPath As String = reportsfatherPath +"/"+ reportsFolderName

    '设计好的报表 存放的路径.即本地存放的报表路径 [此项需要修改]
    Dim filePath As String = "E:\Report Project1\"

    '链接字符串 [此项需要修改]
    Dim connectionString As String = "Data Source=192.168.1.4;Initial Catalog=PTDS3;Connect Timeout=120"

    '数据库用户名 [此项需要修改]
    Dim UsernameString As String = "sa"

    '数据库密码 [此项需要修改]
    Dim PasswordString As String = "sa12345"

    Public Sub Main()
    reportsFolderPath=reportsFolderPath.Replace("//", "/")
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials
        '创建报表目录,参数代表,(文件夹名,文件夹所在目录)
        CreateReportFolder(reportsFolderName,reportsfatherPath)
        '创建DataSource 目录
        CreateReportFolder(datasourceFolderName,datasourceFolderPath)
        '创建数据源
        CreateDataSource(datasourceFolderPath)
        '部署报表
        DeployRepors(filePath)
    End Sub

    '创建目录
    Public Sub CreateReportFolder(ByVal reportFolder As String,ByVal reportpath As String)
        Dim pathname As String
        Try
            'Create Reports Folder
       If (reportpath.Length>1) then
       Try
    pathname = reportpath.Substring(reportpath.LastIndexOf("/") + 1)
    rs.CreateFolder(pathname,"/",Nothing)
    Console.WriteLine("Create Folder success:{0}",pathname)
    Catch e As Exception
            Console.WriteLine("Create Folder Error.But is does not influence the Application"+e.message)
        End Try
    End If
            rs.CreateFolder(reportFolder,reportpath,Nothing)
            Console.WriteLine("Create Folder success:{0}",reportFolder)
        Catch e As Exception
            Console.WriteLine("Create Folder Error.But is does not influence the Application"+e.message)
        End Try

    End Sub

    '部署报表
    Public Sub DeployRepors(ByVal filePath As String)

        Dim tempFileAry As String()
        Dim reportFilePath as String
        tempFileAry = Directory.GetFiles(filepath)
        For Each reportFilePath In tempFileAry
            Dim fileName As String

            fileName = reportFilePath.Substring(reportFilePath.LastIndexOf("\") + 1)
            Dim fileSuffix As String
            fileSuffix = fileName.Substring(fileName.LastIndexOf(".") + 1)
            Select Case fileSuffix
                Case "rdl","png"
                    PublishReport(fileName,fileSuffix)
            End Select
        Next

    End Sub
    '******************************************************************
    '*****           创建数据源 (测试成功)                         **************
    '*******************************************************************
    Public Sub CreateDataSource(ByVal sourceFolder As String)

        Dim name As String = datasourcefileName
       'Define the data source definition.
        Dim definition As New DataSourceDefinition()
        Dim dSource As New DataSource()
        dsource.Item=definition
        definition.CredentialRetrieval = CredentialRetrievalEnum.Store 
        definition.ConnectString =connectionString
        definition.UserName=UsernameString
        definition.Password=PasswordString
        definition.Enabled = True
        definition.EnabledSpecified = True
        definition.Extension = "SQL"
        definition.ImpersonateUser = False
        definition.ImpersonateUserSpecified = True
        'Use the default prompt string.
        definition.Prompt = Nothing
        definition.WindowsCredentials = False
        dsource.Name=datasourceFolderPath

        Try
            rs.CreateDataSource(name, sourceFolder, true, definition, Nothing)
                Console.WriteLine("Create Data Source:{0} ERROR",name)
        Catch e As Exception
            Console.WriteLine("Create Data Source error"+e.message)
        End Try

    End Sub

    '******************************************************
    '******* 发布报表 *********
    '*******************************************************

    Public Sub PublishReport(ByVal reportName As String,ByVal fileSuffix As String)
        Try

            Dim stream As FileStream = File.OpenRead(filePath + reportName)
            definition= New [Byte](stream.Length) {}
            stream.Read(definition, 0, CInt(stream.Length))
            stream.Close()
        Catch e As IOException
            Console.WriteLine("report")
        End Try

        Try
          '**********************   parentPath
          If(fileSuffix="rdl") Then
    Dim str_reportname as String
    str_reportname=reportName.Substring(0,reportName.LastIndexOf("."))
    Console.WriteLine("str_reportname: {0} ", str_reportname)
            warnings = rs.CreateReport(str_reportname,reportsFolderPath, true, definition, Nothing)
             SetReportDataSourceRef(reportName)
            Else If(fileSuffix="png") Then
                    rs.CreateResource(reportName,reportsFolderPath,true,definition,"png",Nothing) 
          End If
            If Not (warnings Is Nothing) Then
                Dim warning As Warning
                For Each warning In warnings
                    Console.WriteLine("warning:"+warning.Message)
                Next warning

            Else
                Console.WriteLine("Report: {0} published successfully with no warnings", reportName)
            End If

        Catch e As Exception
            Console.WriteLine(e.message+"发布报表失败")
        End Try
    End Sub

    '************************************************************************
    '************* 设置报表数据源      **************************************
    '************************************************************************
    Public Sub SetReportDataSourceRef(ByVal reportName As String)
    Try
          Dim reference As DataSourceReference = New DataSourceReference
          Dim ds As DataSource = New DataSource
          reference.Reference=datasourceFolderPath+"/"+datasourcefileName
    Dim str_reportname as String
    str_reportname=reportName.Substring(0,reportName.LastIndexOf("."))
           Dim dsArray As DataSource()=rs.GetItemDataSources(reportsFolderPath+"/"+str_reportname)
          ds=dsArray(0)
           ds.Item = CType(reference, DataSourceReference)

          rs.SetItemDataSources(reportsFolderPath+"/"+str_reportname,dsArray)
    Catch _exception As Exception
         Console.WriteLine("aaa"+_exception.message)
    End Try
    End Sub

    使用说明:保存上面的脚本为deploy.rss

    新建deploy.dat 批处理文件 运行上面脚本

    deploy.bat 内容

    rs -i deploy.rss -s http://192.168.0.88/ReportServer -u userName -p password

    双击运行deploy.bat 报表将自动发布到http://192.168.0.88/ReportServer 服务器上。

    rs.exe参数说明

    RUN --CMD
    C:\Documents and Settings\junmy>rs /?
    Microsoft (R) Reporting Services RS
    版本 9.00.1399.00 x86
    根据指定的报表服务器执行脚本文件内容。
    RS -i 输入文件 -s serverURL [-u 用户名] [-p 密码]
       [-l 超时] [-b] [-e 端点] [-v var=value] [-t]

            -i 输入文件    要执行的脚本文件
            -s serverURL   执行脚本
                            所依据的 URL (包括服务器和 vroot)。
            -u 用户名      用于登录到服务器中的用户名。
            -p 密码        用于登录到服务器中的密码。
            -e 端点        要与脚本一起使用的 Web 服务端点。
                            选项为:
                            Exec2005 - ReportExecution2005 端点
                            Mgmt2005 - ReportService2005 端点
                            Mgmt2010 -  ReportService2008 r2 端点
            -l 超时        连接到服务器之前
                            超时的秒数。默认值为 60 秒,0 表示
                            无限长的超时。
            -b              作为批进行运行,且如果命令失败则回滚
            -v var=value   传递给脚本的变量和值
            -t 跟踪        在错误消息中包含跟踪信息

     

    参考:http://www.cnblogs.com/yeti/archive/2006/06/28/437537.html

    http://www.enet.com.cn/article/2007/1203/A20071203934101.shtml

    http://technet.microsoft.com/zh-cn/library/ms160854(v=sql.90).aspx

    http://hi.baidu.com/tokyou/item/e85d288e89d57dc798255faa

  • 相关阅读:
    Discuz 页面不能加载插件的原因和解决方法
    discuz 插件核心函数hookscript分析.
    比较容易犯的一些智障错误(不定时修改)
    浅谈树状数组入门
    图论的小总结
    usaco 2009 12 过路费
    0122(本来是想ak的但是因为智障只拿了200。)
    图论
    欧拉路
    bfs
  • 原文地址:https://www.cnblogs.com/GreenGrass/p/2771075.html
Copyright © 2020-2023  润新知