代码
Dim
pUser
As
String
=
""
Dim pPwd As String = ""
Dim pParentFolder As String = " PR "
Dim pFilePath As String = " C:\Users\BruceWoo\Desktop\Reports\ "
Dim pDataSourceName As String = " DataSourcePR "
Dim pConnectionString As String = " Data Source=(local);Initial Catalog=PR "
Dim files( 0 to 0 ) As FileInfo
Dim mDefinition As [ Byte ]() = Nothing
Dim mWarnings As Warning() = Nothing
Dim mParentPath As String = " / " + pParentFolder
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim name As String
Dim items As CatalogItem() = Nothing
Dim folderExist, dataSourceExist As Boolean
' 列举PR根目录下所有项,判断目标目录是否已存在
Try
items = rs.ListChildren( " / " , True )
Dim i As Integer
For i = 0 To items.length - 1
If items(i).name.toUpper = pParentFolder.toUpper And items(i).Type = 1 Then ' 1 standfor Folder
folderExist = True
End If
If items(i).name.toUpper = pParentFolder.toUpper And items(i).Type = 5 Then ' 5 standfor DataSource
dataSourceExist = True
End If
Next
Catch e As SoapException
Console.WriteLine(e.Detail.InnerXml.ToString())
End Try
' 创建目标目录
If folderExist Then
Console.WriteLine( " FOLDER EXISTED! " )
Else
Try
rs.CreateFolder(pParentFolder, " / " , Nothing )
Console.WriteLine( " FOLDER:{0} CREATED SUCCESSFULLY! " , pParentFolder)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End If
' 创建数据源
If folderExist And dataSourceExist Then
Console.WriteLine( " DATA SOURCE EXISTED! " )
Else
CreateDataSource()
End If
Try
Dim di As DirectoryInfo
' If pFilePath = "" Then di = New DirectoryInfo(".") Else di = New DirectoryInfo(pFilePath)
files( 0 ) = New FileInfo( " C:\Users\BW\Desktop\Reports\RLS.rdl " )
Console.WriteLine( " TOTAL REPORT FILES: {0} " , files.Length)
Dim fiNext As FileInfo
For Each fiNext In files
' 部署报表
DeployReport(Microsoft.VisualBasic.Left(fiNext.name, fiNext.name.length - 4 ))
Next
Catch e As Exception
Console.WriteLine(e.ToString())
End Try
End Sub
' Func: 创建数据源
Public Sub CreateDataSource()
Dim name As String = pDataSourceName
Dim parent As String = " / " + pParentFolder
Dim mDefinition As New DataSourceDefinition()
If pUser <> "" And pPwd <> "" Then
mDefinition.CredentialRetrieval = CredentialRetrievalEnum.Store
mDefinition.UserName = pUser
mDefinition.Password = pPwd
Else
mDefinition.CredentialRetrieval = CredentialRetrievalEnum.Integrated
End If
mDefinition.ConnectString = pConnectionString
mDefinition.Enabled = True
mDefinition.EnabledSpecified = True
mDefinition.Extension = " SQL "
mDefinition.ImpersonateUser = False
mDefinition.ImpersonateUserSpecified = True
mDefinition.Prompt = Nothing
mDefinition.WindowsCredentials = False
Try
rs.CreateDataSource(name, parent, True , mDefinition, Nothing )
Console.WriteLine( " DATASOURCE:{0} CREATE SUCCESSFULLY! " , name)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
' Func: 部署报表
' Param:
' - reportName 报表名称
Public Sub DeployReport( ByVal reportName As String )
Try
' 这里 File.OpenRead() 很奇怪,必须通过 pFilePath + reportName + ".rdl" 这种组合形式传参,
' 而如果直接传入一个完整的路径,则rs.exe运行脚本时会出错(* 如果基于这种方式传参,则要确保所有 .rdl 文件都在同一目录)
Dim stream As FileStream = File.OpenRead(pFilePath + reportName + " .rdl " )
mDefinition = New [ Byte ](stream.Length - 1 ) {} ' 注意维度为“stream.Length - 1”!
stream.Read(mDefinition, 0 , CInt (stream.Length))
stream.Close()
Catch e As IOException
Console.WriteLine(e.Message)
End Try
Console.WriteLine(reportName)
Try
mWarnings = rs.CreateReport(reportName, mParentPath, True , mDefinition, Nothing )
If Not (mWarnings Is Nothing ) Then
Dim warning As Warning
For Each warning In mWarnings
Console.WriteLine(warning.Message)
Next warning
Else
Console.WriteLine( " DEPLOY REPORT:{0} SUCCESSFULLY! " , reportName)
End If
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
Dim pPwd As String = ""
Dim pParentFolder As String = " PR "
Dim pFilePath As String = " C:\Users\BruceWoo\Desktop\Reports\ "
Dim pDataSourceName As String = " DataSourcePR "
Dim pConnectionString As String = " Data Source=(local);Initial Catalog=PR "
Dim files( 0 to 0 ) As FileInfo
Dim mDefinition As [ Byte ]() = Nothing
Dim mWarnings As Warning() = Nothing
Dim mParentPath As String = " / " + pParentFolder
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim name As String
Dim items As CatalogItem() = Nothing
Dim folderExist, dataSourceExist As Boolean
' 列举PR根目录下所有项,判断目标目录是否已存在
Try
items = rs.ListChildren( " / " , True )
Dim i As Integer
For i = 0 To items.length - 1
If items(i).name.toUpper = pParentFolder.toUpper And items(i).Type = 1 Then ' 1 standfor Folder
folderExist = True
End If
If items(i).name.toUpper = pParentFolder.toUpper And items(i).Type = 5 Then ' 5 standfor DataSource
dataSourceExist = True
End If
Next
Catch e As SoapException
Console.WriteLine(e.Detail.InnerXml.ToString())
End Try
' 创建目标目录
If folderExist Then
Console.WriteLine( " FOLDER EXISTED! " )
Else
Try
rs.CreateFolder(pParentFolder, " / " , Nothing )
Console.WriteLine( " FOLDER:{0} CREATED SUCCESSFULLY! " , pParentFolder)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End If
' 创建数据源
If folderExist And dataSourceExist Then
Console.WriteLine( " DATA SOURCE EXISTED! " )
Else
CreateDataSource()
End If
Try
Dim di As DirectoryInfo
' If pFilePath = "" Then di = New DirectoryInfo(".") Else di = New DirectoryInfo(pFilePath)
files( 0 ) = New FileInfo( " C:\Users\BW\Desktop\Reports\RLS.rdl " )
Console.WriteLine( " TOTAL REPORT FILES: {0} " , files.Length)
Dim fiNext As FileInfo
For Each fiNext In files
' 部署报表
DeployReport(Microsoft.VisualBasic.Left(fiNext.name, fiNext.name.length - 4 ))
Next
Catch e As Exception
Console.WriteLine(e.ToString())
End Try
End Sub
' Func: 创建数据源
Public Sub CreateDataSource()
Dim name As String = pDataSourceName
Dim parent As String = " / " + pParentFolder
Dim mDefinition As New DataSourceDefinition()
If pUser <> "" And pPwd <> "" Then
mDefinition.CredentialRetrieval = CredentialRetrievalEnum.Store
mDefinition.UserName = pUser
mDefinition.Password = pPwd
Else
mDefinition.CredentialRetrieval = CredentialRetrievalEnum.Integrated
End If
mDefinition.ConnectString = pConnectionString
mDefinition.Enabled = True
mDefinition.EnabledSpecified = True
mDefinition.Extension = " SQL "
mDefinition.ImpersonateUser = False
mDefinition.ImpersonateUserSpecified = True
mDefinition.Prompt = Nothing
mDefinition.WindowsCredentials = False
Try
rs.CreateDataSource(name, parent, True , mDefinition, Nothing )
Console.WriteLine( " DATASOURCE:{0} CREATE SUCCESSFULLY! " , name)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
' Func: 部署报表
' Param:
' - reportName 报表名称
Public Sub DeployReport( ByVal reportName As String )
Try
' 这里 File.OpenRead() 很奇怪,必须通过 pFilePath + reportName + ".rdl" 这种组合形式传参,
' 而如果直接传入一个完整的路径,则rs.exe运行脚本时会出错(* 如果基于这种方式传参,则要确保所有 .rdl 文件都在同一目录)
Dim stream As FileStream = File.OpenRead(pFilePath + reportName + " .rdl " )
mDefinition = New [ Byte ](stream.Length - 1 ) {} ' 注意维度为“stream.Length - 1”!
stream.Read(mDefinition, 0 , CInt (stream.Length))
stream.Close()
Catch e As IOException
Console.WriteLine(e.Message)
End Try
Console.WriteLine(reportName)
Try
mWarnings = rs.CreateReport(reportName, mParentPath, True , mDefinition, Nothing )
If Not (mWarnings Is Nothing ) Then
Dim warning As Warning
For Each warning In mWarnings
Console.WriteLine(warning.Message)
Next warning
Else
Console.WriteLine( " DEPLOY REPORT:{0} SUCCESSFULLY! " , reportName)
End If
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub