Vb.net 是否使用命令行跨子文件夹删除多个SSRS报告?
我是SSRS部署的新手,我已经在四处搜索,但找不到适用于我的情况的确切场景。在SSRS 2012中,我在不同的子文件夹中部署了多个报告。例如:Vb.net 是否使用命令行跨子文件夹删除多个SSRS报告?,vb.net,reporting-services,sql-server-2012,rs.exe,Vb.net,Reporting Services,Sql Server 2012,Rs.exe,我是SSRS部署的新手,我已经在四处搜索,但找不到适用于我的情况的确切场景。在SSRS 2012中,我在不同的子文件夹中部署了多个报告。例如: 销售/销售报告1 销售/销售报告2 财务/财务报告1 财务/财务报告2 杂项/杂项报告1 杂项/杂项报告2 由于有时候SSRS不喜欢被覆盖的报表文件,所以我希望在部署任何新报表之前删除实例中的所有报表文件。通过使用rs.exe调用此脚本,我可以成功删除文件夹及其内容: Public Sub Main() rs.Credentials = S
- 销售/销售报告1
- 销售/销售报告2
- 财务/财务报告1
- 财务/财务报告2
- 杂项/杂项报告1
- 杂项/杂项报告2
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim bh As New BatchHeader()
bh.BatchID = rs.CreateBatch()
rs.BatchHeaderValue = bh
'Delete all reports from Main Folder and sub folders.Note:The Folders will be deleted also.
'If do not want to delete the folder, we could use rs.CreateFolder(“Folder name”, “/Main Folder”, “nothing”) to create a new one with nothing.
rs.DeleteItem("/Sales")
rs.DeleteItem("/Finance")
rs.DeleteItem("/Misc")
'Delete all reports from a sub folder, and delete the sub folder
'rs.DeleteItem("/Main Folder/Sub Folder ")
rs.BatchHeaderValue = bh
' Delete folders using batch header.
Try
rs.ExecuteBatch()
Console.WriteLine("Folders deleted successfully.")
Catch e As SoapException
Console.WriteLine(e.Detail.InnerXml.ToString())
Finally
rs.BatchHeaderValue = Nothing
End Try
End Sub 'Main
问题在于,如果这些文件夹中的任何一个不存在,脚本将停止。我正在努力确定处理这件事的最佳方法。最好的方法是清空文件夹并将其留在那里,还是找到忽略错误并继续的方法
根据答案,我将如何在此脚本中调用它?您可以通过运行父文件夹中的项目并查找任何具有预期名称的子文件夹来检查该文件夹是否存在。然后,仅当该文件夹存在时,才尝试删除该文件夹 这应该可以解决您的问题,也就是说,您只有在知道它存在时才删除它 您的代码可能类似于:
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
DeleteFolder("Sales")
DeleteFolder("Finance")
End Sub
Public Sub DeleteFolder(ByVal folderName As String)
Dim items() as CatalogItem
Dim item As CatalogItem
Dim folderExists As Boolean = False
items = rs.ListChildren("/", False)
For Each item In items
If item.TypeName = "Folder" And item.Name.Equals(folderName)
folderExists = True
End If
Next
If folderExists
Try
rs.DeleteItem("/" + folderName)
Console.WriteLine("Deleted folder {0}", folderName)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
Else
Console.WriteLine("Folder {0} does not exist", folderName)
End If
End Sub
这仅检查
/
文件夹-您可能需要调整以匹配您的设置。我完成了接受的答案以支持:
- 删除不在根目录中的文件夹
- 仅删除文件夹的内容
- 支持SSRS 2017
- 也可以用作rs.exe工具中使用的rss文件
Dim TargetRSFolder As String = vTARGETRSFOLDER
Dim TargetRSRoot As String = vTARGETROOT
Dim DeleteContentOnly As Boolean = vDeleteContentOnly
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
DeleteFolder(TargetRSFolder)
End Sub
Public Sub DeleteFolder(ByVal folderName As String)
Dim items() as CatalogItem
Dim item As CatalogItem
Dim folderExists As Boolean = False
Dim path As String = TargetRSRoot
IF (path = "")
path = "/"
END IF
items = rs.ListChildren(path, False)
For Each item In items
If item.Type.ToString() = "Folder" And item.Name.ToLower() = folderName.ToLower()
folderExists = True
End If
Next
If folderExists
Try
IF (DeleteContentOnly = True)
items = rs.ListChildren(TargetRSRoot + "/" + folderName, False)
For Each item In items
rs.DeleteItem(item.Path)
Next
Console.WriteLine("Deleted folder's contetnts : {0}", folderName)
ELSE
rs.DeleteItem(TargetRSRoot + "/" + folderName)
Console.WriteLine("Deleted folder :{0}", folderName)
END IF
Catch e As Exception
Console.WriteLine(e.Message)
End Try
Else
Console.WriteLine("Folder {0} does not exist", folderName)
End If
End Sub
假设我们在DeleteServerReportFolder.rss
文件中有上述代码,并且我们有“/bb/cc”
文件夹
bb
文件夹:这正是我想要的-谢谢。一次小的编辑-使用
Item.TypeName=“Folder”
会出现错误,因此您需要将其更改为:如果Item.Type=ItemTypeEnum.Folder
。