Accueil > .Net, ASP.Net, C#, MVC2, Sql Server, SSRS > [C#4 MVC2] SSRS et l’export de rapport

[C#4 MVC2] SSRS et l’export de rapport

Ca, c’est une chose qui m’a fait perdre un temps…considérable.

Honnêtement, c’est assez horrible d’avoir à intégrer les rapports de SSRS dans MVC2…

Bien sûr, il y a le report viewer qui fait tout.

Mais c’est un composant ASP.NET, pas un composant MVC (et dans notre projet, ça importait).

Du coup, on a travaillé avec 4 exports particuliers.

Les exports PDF et Excel ne posent pas de problèmes.

L’export au format image est….embêtant.

L’export au format HTML4.0…c’est pire…

Commençons par les bases.

Pour exporter, il faut appeler le service de SSRS.

Déjà, il faut donc que l’application MVC (son pool d’application) ai les autorisations pour. Comme on avait un Cube derrière, il faut que le user du pool ai aussi les autorisations sur le Cube.

Il est donc préférable d’avoir un seul et unique user de bout en bout. Sinon, c’est…je dirais pas impossible, mais faut avoir du temps à perdre (beaucoup de temps).

Ensuite, on veut exporter depuis un service, il faut donc construire en premier lieu son URL.

Pour nous, ça donnait :

http://<serveur>/ReportServer?/<Répertoire_Rapports><Rapport><Paramètres&gt;

Déjà, il faut savoir quels sont les paramètres liés au rapport et ensuite les paramètres dédiés à « la mise en forme » du rapport.

Dans notre cas, l’URL pouvait faire plus de 300 caractères, avec tous les paramètres…

Pour les paramètres, on avait une base fixe, qui permet de cadrer l’export :

&rs:Command=Render&r:Format=HTML4.0&rc:Parameters=false&rc:Toolbar=false

Voici des screenshots (le haut du rapport) qui permettent de voir ce que font les options Parameters et Toolbar

Parameters & Toolbar à « true » :

Toolbar = « true »; Parameters = « false »

Toolbar et Parameters à « false ».

C’est donc, pour une intégration dans une page web, la dernière option que nous avons retenue : il n’y a aucune toolbar génante.

Voici le code utilisé, dans le cadre d’un export HTML :

string stringUrl = GetUrl(reportName, parameters, "HTML4.0"); // méthode permettant de construire l’URL GetUrl(string, List<string>, string)
WebClient client = new WebClient();
client.Credentials = CredentialCache.DefaultCredentials;

System.IO.StreamReader sr = new System.IO.StreamReader(new System.IO.MemoryStream(buffer));
string content = sr.ReadLine();
sr.Close();

Dans la variable content, on aura donc les données exportées.

Seulement, c’est une page entière !!!
C’est-à-dire qu’il y a la balise <html>, la balise <head>…
Donc, si on veut l’intégrer dans une autre page, eh bien…il faut parser le code HTML…
Si on spécifie la Toolbar à true, alors on a en plus le Javascript (cf. screenshots plus haut) qui doit obligatoirement se positionner dans le <head> pour fonctionner. De même pour le style…

Dans le cadre d’un export au format image, il est possible d’injecter directement le résultat dans une balise <img>.
Cependant, il est pertinent de mettre l’image dans un <div> qui permettra de réduire la taille de l’image, puisque le rapport exporté n’est pas de la taille exact du contenu.
Du coup, il y a des marges blanches tout autour qui peuvent être bien plus grandes que le contenu en lui-même…
Dans notre cas, on avait une image de 200*200px pour une image exportée de la taille d’une page normale (A4).

Par contre, pour les exports Excel et PDF, c’est bien plus simple.

Et pour le coup, bien plus utilisable (autant pour le développeur que pour l’utilisateur final).

string stringUrl = GetUrl(reportName, parameters, "Excel");
name = string.Format("{0}.XLS", name);

WebClient client = new WebClient();
client.Credentials = CredentialCache.DefaultCredentials;
byte[] buffer = client.DownloadData(new Uri(stringUrl, UriKind.Absolute));

return File(buffer, "application/vnd.ms-excel", name);

Et voilà, c’est tout !

Pour l’export PDF, il suffit de changer l’extension et le type MIME, l’extension, « Excel » devant « PDF » et le tour est joué !

Catégories :.Net, ASP.Net, C#, MVC2, Sql Server, SSRS
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :