命令行部署Reporting services报表

来源:互联网 发布:c语言字符串比较函数 编辑:程序博客网 时间:2024/04/30 01:36

1. 在命令运行的目录下新建report目录, 把要发布的报表放到此目录下

2. 建PublishReport.rss文件, 代码如下

  Const userID as String = "MTRCORP/ctsuat"  Const dbServer as String = "hqsdbprd03"  Const dbName as String = "CTSDB"  Const parentFolder as String = "CTS.Report"  Const roleName as String = "Browser"        dim filePath as String  dim cnt as Integer  Dim definition As [Byte]() = Nothing  Dim warnings As Warning() = Nothing  Dim parentPath As String = "/" + parentFolder    Public Sub Main()        rs.Credentials = System.Net.CredentialCache.DefaultCredentials        Dim name As StringfilePath = Environment.CurrentDirectory + "/report/"cnt = 0       CreateFolder()        CreateDataSource()        PublishFromFolder()                CreateUser()    End Sub        '************************************************************    ' Create Parent Folder    '************************************************************    Public Sub CreateFolder()     dim alreadyExists as Boolean = FalseDim items As CatalogItem() = NothingDim condition As New SearchCondition()condition.Condition = ConditionEnum.Equalscondition.ConditionSpecified = Truecondition.Name = "Name"condition.Value = parentFolderDim conditions(0) As SearchConditionconditions(0) = conditionitems = rs.FindItems("/", BooleanOperatorEnum.And, conditions)If Not (items Is Nothing) ThenDim ci As CatalogItemFor Each ci In  itemsif ci.Type=ItemTypeEnum.Folder thenalreadyExists=trueend ifNext ciEnd Ifif alreadyExists=False then        Try            rs.CreateFolder(parentFolder, "/", Nothing)            Console.WriteLine("Parent folder created: {0}", parentFolder)        Catch e As Exception            Console.WriteLine(e.Message)        End Tryend if    End Sub    '************************************************************    ' Create DataSource    '************************************************************    Public Sub CreateDataSource()        Dim name As String = dbName        Dim parent As String = "/" + parentFolder        'Define the data source definition.        Dim definition As New DataSourceDefinition        definition.CredentialRetrieval = CredentialRetrievalEnum.Integrated        definition.ConnectString = "data source=" & dbServer & ";initial catalog=" & dbNamedefinition.Enabled = Truedefinition.EnabledSpecified = Truedefinition.Extension = "SQL"definition.ImpersonateUser = Falsedefinition.ImpersonateUserSpecified = True'Use the default prompt string.definition.Prompt = Nothingdefinition.WindowsCredentials = False        Try            rs.CreateDataSource(name, parent, True, definition, Nothing)            Console.WriteLine("Report data source created: {0}", name)        Catch e As Exception            Console.WriteLine(e.Message)        End Try    End Sub    '*************************************************************    ' Read Report File from Folder    '*************************************************************    Public Sub PublishFromFolder()        Try            ' Get files from specific path            Dim ArrayName As String()            Dim dirs As String() = Directory.GetFiles(filePath + "/", "*.rdl")            Console.WriteLine("{0} reports will be deploy:", dirs.Length)            Dim file As String    Dim reportname as String            For Each file In dirs                ArrayName = file.Split("/")reportname = ArrayName(ArrayName.GetUpperBound(0))reportname = reportname.Replace(".rdl","")                PublishReport(reportname)            Next                        Console.WriteLine("{0} reports had be deploy!", cnt)        Catch e As Exception            Console.WriteLine("The process failed: {0}", e.ToString())        End Try    End Sub    '*************************************************************    ' Delpoyment of Reports to Server    '*************************************************************    Public Sub PublishReport(ByVal reportName As String)Console.WriteLine("Deploy: {0}", reportName)        Try            Dim stream As FileStream = File.OpenRead(filePath + "/" + reportName + ".rdl")            definition = New [Byte](stream.Length) {}            stream.Read(definition, 0, CInt(stream.Length))            stream.Close()        Catch e As IOException            Console.WriteLine(e.Message)        End Try        Try            warnings = rs.CreateReport(reportName, parentPath, True, definition, Nothing)            If Not (warnings Is Nothing) Then                Dim warning As Warning                For Each warning In warnings                    Console.WriteLine("     warning:" + warning.Message)                Next warning            End Ifcnt = cnt + 1        Catch e As Exception            Console.WriteLine(e.Message)        End Try    End Sub        Public Sub CreateUser()dim pols_old() as Policydim pol as Policydim hasExists as Boolean = falsepols_old = rs.GetPolicies("/" + parentFolder,false)For Each pol In  pols_oldif pol.GroupUserName=userID thenhasExists = trueend if        Next pol                if hasExists=false then                dim r as new Roledim roles(0) as Roledim newPolicy  as new Policyr.Name=roleNameroles(0) = rnewPolicy.GroupUserName=userIDnewPolicy.Roles=rolesDim cnt as Integercnt = pols_old.Lengthdim pols_new(cnt) as PolicyDim i As Integer    For i = 0 To cnt - 1         pols_new(i) = pols_old(i)      Next i       pols_new(cnt) = newPolicyTryrs.SetPolicies("/" + parentFolder, pols_new)Console.WriteLine("Grant ""{1}"" role permission on ""{2}"" folder to ""{0}"" user!", userID, roleName, parentFolder)Catch e As Exception            Console.WriteLine(e.Message)        End Try        end ifEnd Sub
 
3. 建cmd文件 CTS_Report_Migration.bat, 代码如下
@echo offrem ===== update the parameter BGN =====set REPORT_SERVER=hqsdbprd03rem ===== update the parameter END =====rs -i ./PublishReport.rss -s http://%REPORT_SERVER%/reportserver > report_deploy.log
 
4. 当然就是运行第三步中的文件罗
原创粉丝点击