[SSRS] Scripts deploiement SSRS

Voici un article donnant un exemple possible de script de déploiement de rapports dans le serveur de rapports sans passer par BIDS.

Dans le cas présent, nous supposons que la datasource est déjà déployée et qu'elle ne nécéssite pas de redéploiement.

  1. La première chose à faire est de créer un fichier bat (Ex:"mon_bat.bat") qui nous permettra de lancer et de paramétrer le déploiement des rapports (code disponible à la fin de l'article).
  2. Il faut ensuite créer le fichier script  "mon_script.rss".  Ce fichier contient le code VB de déploiement des rapports. Il contient également la liste des rapports à déployer.
Les différents éléments paramétrables sont les suivants:
  • Le nom du projet SSRS
  • Le nom du serveur cible
  • Le chemin vers le fichier de déploiement (.rss)
  • Le chemin vers le dossier contenant l'ensemble des rapports rdl
  • Le nom du dossier cible 1 sur le serveur de rapports
  • Le nom du dossier cible 2 sur le serveur de rapports
  • Le nom et le chemin de la source de données dans le serveur de rapports
  • La liste des noms des rapports à déployer (dans le fichier .rss)

Une fois tous ces éléments mis en place, il suffit de lancer le .bat pour que les rapports soient déployés.



@ECHO off

SET PROJET=Mon_Projet
SET ScriptPATH=D:\0-Projets\Tuto\2-Scripts_Deploiement\1-Script_Deploy_SSRS.rss
SET RapportsPATH=D:\0-Projets\Tuto\1-SSRS\MonProjetSSRS\
SET DossierA=mon_dossier_cible_1
SET DossierB=mon_dossier_cible_2

ECHO.
ECHO 1. Serveur local
ECHO 2. Serveur de prod XXXX
SET /p ServeurType=Choisir le serveur cible:

IF "%ServeurType%"=="1" SET TargetServer=http://localhost/reportserver
IF "%ServeurType%"=="2" SET TargetServer=http://XXXX/reportserver
IF NOT "%ServeurType%"=="" GOTO Erreur

ECHO.
Echo Deploiement des rapports du projet: %PROJET%
ECHO Sur le serveur cible: %TargetServer%
ECHO On Continue ?
Pause

ECHO.
ECHO 1. Rapports destination cible = %DossierA%
ECHO 2. Rapports destination cible = %DossierB%
SET /p RapportType=Choisir le type de rapport a deployer:

IF "%RapportType%"=="1" GOTO EnCours
IF "%RapportType%"=="2" GOTO Valide
IF NOT "%RapportType%"=="" GOTO Erreur

GOTO FIN
:EnCours
rs -i %ScriptPATH% -s %TargetServer% -v RapportsPATH=%RapportsPATH% -v RapportType=%RapportType% -v parentFolder=%DossierA%
ECHO.
GOTO FIN
:Valide
rs -i %ScriptPATH% -s %TargetServer% -v RapportsPATH=%RapportsPATH% -v RapportType=%RapportType% -v parentFolder=%DossierB%
ECHO.
GOTO FIN
:Erreur
ECHO Mauvaise saisie
GOTO FIN
:FIN
pause
exit


Voici le code du fichier mon_script.rss (VB):



'Fic: mon_script.rss
Dim definition As [Byte]() = Nothing
Dim warnings As Warning() = Nothing
Dim parentPath As String = "/" + parentFolder

Public Sub Main()

'Cr&ation si necéssaire du dossier cible
    Try
        rs.CreateFolder(parentFolder, "/", Nothing)
        Console.WriteLine("Parent folder {0} created successfully", parentFolder)
    Catch e As Exception
        Console.WriteLine(e.Message)
    End Try
rs.Credentials = System.Net.CredentialCache.DefaultCredentials

'Publication des rapports
IF RapportType = 1 THEN
     'Liste des rapports à publier dans le dossier cible 1
     PublishReport("my_repport_1")
     PublishReport("my_repport_2")
END IF
IF RapportType = 2 THEN
     'Liste des rapports à publier dans le dossier cible 2
     PublishReport("my_repport_3")
     PublishReport("my_repport_4")
END IF
End Sub

'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Public Sub PublishReport(ByVal reportName As String)
Try
     Dim stream As FileStream = File.OpenRead(RapportsPATH + reportName + ".rdl")
     definition = New [Byte](stream.Length - 1) {}
     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.Message)
         Next warning
     Else
         Console.WriteLine("Report: {0} published successfully with no warnings", reportName)
     End If
    
     'Attachement de la datasource
     Dim Item1 as DataSourceReference = New DataSourceReference
     Item1.Reference = TargetDataSource
    
     Dim datasources As [DataSource]() = rs.GetItemDataSources(parentPath + "/" + ReportName)
     datasources(0).Item = Item1
     rs.SetItemDataSources(parentPath + "/" + ReportName, datasources)
    
     Catch e As Exception
     Console.WriteLine(e.Message)
End Try
End Sub
 

Aucun commentaire:

Enregistrer un commentaire