2014-09-23 3 views
3

Я новичок в развертывании SSRS, и я искал его, но не могу найти точный сценарий, который применим к моей ситуации. У меня есть несколько отчетов, развернутые в различных подпапках в SSRS 2012 Например:Удаление нескольких отчетов SSRS в подпапках с помощью командной строки?

  • Продажа/salesReport1
  • Продажа/salesReport2
  • Финансы/finReport1
  • Финансы/finReport2
  • Разное/miscReport1
  • Misc/miscReport2

В связи с тем, что s osetms 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

Смежные вопросы