Comment spécifier la culture (langue) lors d’un appel à SSRS via le Report Server Proxy de SharePoint

Dans une entrée de blogue précédente, j’expliquais comment faire pour lancer l’export d’un rapport SSRS intégré à SharePoint vers un format tel PDF, Word, Excel etc.

Construire un hyperlien pour lancer l’export d’un rapport SSRS en mode intégré à SharePoint

En gros, il fallait utiliser un hyperlien dans ce format:

http://<SharePoint_site>/_vti_bin/ReportServer?
http://<SharePoint_site>/<SharePoint_Document_Library>/
<Report_Name>&rs:Command=Render&rs:Format=MHTML

L’inconvénient de cette méthode c’est que contrairement aux appels via RSViewerPage.aspx …

http://<SharePoint_site>/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/<SharePoint_Document_Library>/<Report_Name>.rdl

… la langue du site SharePoint n’est pas automatiquement assignée à la variable User!Languagedans les rapports SSRS.

C’est très fâcheux car cette variable est normalement utilisée pour spécifier la culture du rapport ainsi que pour obtenir des libellés selon la langue (ex. libellés stockés dans un fichier de ressource *.resx).

Si vous utilisez votre fureteur (ex. IE) pour accéder au Report Server Proxy, c’est votre préférence de culture qui sera utilisée:

image

Mais si vous y allez de manière programmatique via l’objet WebRequest, la variable User!Language contiendra plutôt la langue par défautdu Report Server qui est déterminée par la valeur choisie lors de la création des bases de données du Report Server:

image

La solution est d’ajouter une en-tête HTTP Accept-Language à l’objet WebRequest (ex. sCulture = « fr-CA »):

if (!String.IsNullOrEmpty(sCulture))
{
pRequest.Headers.Add(« Accept-Language », sCulture);
}

Voici un extrait plus complet:

Exemple de variables d’entrée:

Variable Valeur
sBaseUrl http://<server>/<SPSite>/_vti_bin/ReportServer
sAbsoluteReportUrl http://<server>/<SPSite>/<SPDocLib>/<Report>.rdl
sCulture fr-CA
sQueryString Param1=Param1Value&Param2=Param2Value&rs:Command=Render&rs:Format=XML

string sRequestUrl = sBaseUrl + « ? » + sAbsoluteReportUrl;
WebRequest pRequest = WebRequest.Create(sRequestUrl);

if (String.IsNullOrEmpty(msUserName) || String.IsNullOrEmpty(msPassword))
{
pRequest.Credentials = CredentialCache.DefaultCredentials;
pRequest.UseDefaultCredentials = true;
}
else
{
NetworkCredential pNetworkCredentials = !String.IsNullOrEmpty(msDomain) ? new NetworkCredential(msUserName, msPassword, msDomain) : new NetworkCredential(msUserName, msPassword);
pRequest.PreAuthenticate = true; // Avoid one round trip: says to the server, let’s authenticate
pRequest.UseDefaultCredentials = false;
pRequest.Credentials = pNetworkCredentials;
}

// Prepare query string

pRequest.Method = « POST »;

if (!String.IsNullOrEmpty(sCulture))
{
pRequest.Headers.Add(« Accept-Language », sCulture);
}

pRequest.ContentLength =  sQueryString.Length;
pRequest.ContentType = « application/x-www-form-urlencoded »;
byte[] abytPOSTData = Encoding.UTF8.GetBytes(sQueryString);
Stream pDataStream = pRequest.GetRequestStream();
pDataStream.Write(abytPOSTData, 0, abytPOSTData.Length);
pDataStream.Close();

// The response will need to be closed by callers

return pRequest.GetResponse();

Si vous avez des questions sur nos produits et services, n’hésitez pas à nous contacter.

Une réflexion sur “Comment spécifier la culture (langue) lors d’un appel à SSRS via le Report Server Proxy de SharePoint

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