Sébastien Pertus
Reporting Services. Déploiement automatisé
Article sur le déploiement automatisé d'un rapport Reporting Services.
Par Sébastien Pertus publié le 02/09/2007 à 23:06, lu 10869 fois, 7 pages
 4 | Projet setup. Action personnalisée
Nous allons utiliser un projet de setup classique pour déployer nos rapports.
En ce qui concerne nos rapports, j'ai choisi de partir sur une solution incluant une action personnalisée lancée à partir du Setup, qui aura pour effet de lancer une nouvelle fenêtre Windows Forms, depuis une assembly .NET
Ce qui est important ici, c'est de bien penser à embarquer nos rapports dans le projet de Setup.
Ainsi lors du déploiement, nous pourrons :
  1. Déployer les Rapports contenus dans le Setup, dans un répertoire cible.
  2. Parcourir l'ensemble de ces rapports et les déployer sur le serveur cible.
La chose intéressante ici, c'est de garder une trace des rapports (les rapports copiés sur le disque) sur le serveur d'installation. Les administrateurs réseau sont très sensibles sur ce genre de points ;)
Nous avons décidé de partir sur une solution à base d'actions personnalisées.
Avant d'aller plus loin, il est bon de comprendre comment fonctionne le système d'action personnalisées.
Tout d'abord, les actions personnalisées dans les Projet de Setup sont des actions chargées depuis une assembly référencée dans votre Projet de Setup.
Vous pouvez déterminer quand votre action personnalisée doit être lancée, que ce soit lors de l'installation, tout comme lors de la désinstallation, ou encore lors d'une annulation en cours d'installation.
Cette assembly doit être référencée dans votre projet de Setup.
Pour parvenir à référencer cette assembly, il va nous falloir créer un nouveau projet.
Une fois votre assembly référencée, l'ensemble des paramètres à fournir se trouve dans l'onglet Custom Actions de votre projet Setup.
L'assembly chargée à la volée doit contenir au moins une classe héritant de la classe Installer.
Le Setup chargera notre classe et lui passera dans un contexte "tout un tas" de paramètres (chemin d'installation, paramètres de configurations, paramètres personnalisés etc...)
Récapitulatif de notre Processus de création d'une action personnalisée
  1. Création du projet Installer
  2. Ajout d'une classe héritant d'Installer
  3. Référencement de l'assembly Installer dans le projet de Setup
  4. Configuration de l'action personnalisée depuis le projet de Setup
  5. Passage des paramètres nécessaires
Création du projet Installer
Nous allons rajouter à notre solution un nouveau projet de type Assembly.
Dans ce projet, nous allons rajouter une class de type Installer.
Cette classe a la particularité d'hériter d'une classe de base Installer.
 
Classe héritant d'Installer

Classe héritant d'Installer

 
Nous allons pouvoir maintenant surcharger l'ensemble des méthodes disponibles depuis la class Installer :

[RunInstaller(true)]

public partial class ReportCustomInstaller : Installer

{

    public ReportCustomInstaller()

    {

        InitializeComponent();

    }

    public override void Install(System.Collections.IDictionary stateSaver)

    {

        base.Install(stateSaver);

    }

    public override void Rollback(System.Collections.IDictionary savedState)

    {

        base.Rollback(savedState);

    }

    public override void Uninstall(System.Collections.IDictionary savedState)

    {

        base.Uninstall(savedState);

    }

}

Dans notre cas, nous allons uniquement nous servir dans cette classe de la surcharge de la méthode Install()
Note : Il est important de comprendre comment le Setup exécute les actions personnalisées.
Lors du lancement d'une action personnalisée, le Setup charge l'assembly et par réflexion, va exécuter l'ensemble des classes héritant de la classe de base Installer.
De ce fait, si votre classe contient plusieurs classes héritant de la classe de base Installer, elles seront toutes exécutées !
Dans notre cas, le problème ne se pose pas, nous n'avons qu'une action personnalisée à lancer. Mais nous savons bien que dans un environnement de production, sur des applications qui nécessitent plus d'actions à réaliser pour un déploiement optimal, il se peut que vous ayez plusieurs actions personnalisées à lancer.
Pour contourner ce problème, j'ai le choix, lors du lancement de l'action personnalisée, de passer un paramètre de contexte, contenant une valeur définie à l'avance. Je vais utiliser ce mécanisme pour générer l'unicité de mes actions personnalisées.
Je récupère ainsi cette valeur dans l'ensemble de mes classes Installers, et je suis ainsi capable de dire si l'action se poursuit ou non.
Dans notre exemple, je vais définir une chaine qui se nommera "ClassName" avec une valeur "ActionForReports" :

public override void Install(System.Collections.IDictionary stateSaver)

{

    if (Context.Parameters["ClassName"] == null || Context.Parameters["ClassName"] != "ActionForReports")

        return;

 

    base.Install(stateSaver);

 

}

Nous reviendrons plus tard sur le code qui lui va effectuer tout le travail de déploiement des rapports.
Référencement de l'assembly dans le Setup
Notre assembly est prête (du moins son squelette) à être intégrée dans notre Setup
Il nous suffit de référencer l'assembly dans les Output Path du projet
 
Ajout des sorties d'une assembly dans un setup

Ajout des sorties d'une assembly dans un setup

 
Création de l'action personnalisée
Notre assembly référencée, il faut maintenant créer l'action personnalisée, depuis l'onglet Custom Actions :
 
/content/f0717e7f-ba9b-4d9d-9c29-e72e76ffcfe1/CustomActionPanelsCompress.jpg
 
Nous avons établi que l'action se déroulera lors de la phase d'installation, je la rajoute donc au dossier correspondant :
 
/content/f0717e7f-ba9b-4d9d-9c29-e72e76ffcfe1/CustomActionPanels02.JPG
 
Une fois créée, je peux la renommer, le nom par défaut n'étant pas très explicite :
 
/content/f0717e7f-ba9b-4d9d-9c29-e72e76ffcfe1/CustomActionPanels03.JPG
 
Passage du paramètre à l'action personnalisée
Il ne reste plus qu'à créer notre fameux paramètre ClassName qui doit contenir la valeur ActionForReports.
Les paramètres sont renseignés, pour chaque action personnalisée, depuis la propriété CustomActionData.
Il y a une certaine ressemblance avec les QueryString d'une url. La règle de passage des paramètres est :
  • /[Nom Du Paramètre]=[Valeur du paramètre][Espace]
Dans notre cas, nous allons avoir :
  • /ClassName=ActionsForReports
 
/content/f0717e7f-ba9b-4d9d-9c29-e72e76ffcfe1/CustomActionPanels04.JPG
 
Notre action personnalisée sera donc bien lancée à l'étape Installation de notre Setup.
 
» Démarrer une discussion
 
Discussion démarée par SalemAnis le 24/08/2012 à 10:32, 1 commentaire(s).
Discussion démarée par pilote35 le 04/02/2010 à 16:08, 1 commentaire(s).
Discussion démarée par Geof75 le 13/11/2007 à 12:25, 1 commentaire(s).