2014-09-23 45 views
3

我是SSRS部署的新手,我一直在四处搜寻,但无法完全找到适用于我的情况的确切场景。我已经部署在不同的子文件夹在SSRS 2012例如几个报告:使用命令行在子文件夹中删除多个SSRS报告?

  • 销售/ salesReport1
  • 销售/ salesReport2
  • 金融/ finReport1
  • 金融/ finReport2
  • 杂项/ miscReport1
  • Misc/miscReport2

由于s有时SSRS不喜欢被覆盖的报告文件,我想在部署任何新报告之前删除实例中的所有报告文件。我可以通过调用使用rs.exe这个脚本成功删除文件夹及其内容:

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 

问题就在于,如果任何这些文件夹不存在,该脚本将停止。我试图确定处理这个问题的最佳方法。最好的方法是清空文件夹并将它们留在那里,或者找到一种方法来忽略错误并继续?

根据答案,我将如何在此脚本中调用它?

回答

2

您可以通过运行父文件夹中的项目并查找具有预期名称的任何子文件夹来检查文件夹是否存在。然后,只有存在这种情况,请尝试删除该文件夹。

这应该解决您的问题,即您只有在知道它存在时才会删除。

您的代码可能看起来像:

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 

这只检查/文件夹 - 您可能需要调整,以符合你的配置。

+0

这正是我正在寻找的 - 谢谢。一个小的编辑 - 你会用'Item.TypeName =“Folder”'得到一个错误,所以你需要改变它:'If item.Type = ItemTypeEnum.Folder'。 – edgesrazor 2014-09-24 13:28:04

相关问题