Como exibir a tela do controle ReportViewer no idioma do usuário em uma aplicação hospedada no Windows Azure

By: Rodrigo Gomes – Support Engineer CTS Latam / Technical Reviewer: Ivanov Cepeda

Quando criamos uma aplicação ASP.Net que irá usar os controles do ReportViewer para exibir relatórios vindo de um servidor de SQL Reporting Services é comum configurar toda a interface para que seja exibida em apenas um idioma.

Se todos os menus e conteúdos de sua aplicação, bem como os dados dos relatórios estão em Português, talvez você também queira exibir a interface dos controles no mesmo idioma.

Primeiro, para qualquer aplicação web temos que configurar no desenvolvimento da aplicação as propriedades de 'Culture' e 'UICulture' para os formulários.

Uma forma generalizada de fazer isso é definir a tag <globalization> no arquivo web.config

 <system.web>
  <globalization culture="pt-BR" uiCulture="pt-BR" requestEncoding="utf-8"  responseEncoding="utf-8" enableClientBasedCulture="true" />
</system.web>

Depois disso temos que instalar no servidor que irá hospedar nossa aplicação a versão Redistributable do Report Viewer (reportviewer.exe) e o Language Pack para o idioma que queremos.

Como o Português é uma das linguas suportadas pelo Visual Studio, nós temos um Language Pack especifico.

Mas como fazer isso em uma aplicação ASP.Net hospedada no Windows Azure?

Se realizarmos a instalação manual desses dois pacotes em cada instância teremos problemas futuros, pois essas modificações não são persistentes.

Para garantir que mesmo em caso que nossas instâncias precisem ser reiniciadas ou movidas para outros servidores fisicos nossa aplicação continuará funcionando com todos os requisitos configurados.

Para isso temos o uso de startup tasks.

Essa task irá garantir que caso sua aplicação seja movida para um novo servidor os pacotes necessários serão instalados.

Para criar uma startup task você deve seguir os seguintes passos:

1. No arquivo ServiceDefinition.csdef adicione a seguinte tag:

 <WebRole>
  <Startup>
    <Task commandLine="InstalaReport.cmd" executionContext="elevated" taskType="simple" />
  </Startup>
</WebRole>

2. Crie um arquivo com o nome ‘InstalaReport.cmd’ na pasta raiz de sua aplicação.

3. Copie os arquivos de instalação necessários para a mesma pasta que está o InstalaReport.cmd. No nosso caso seria o arquivo ReportViewer.exe e ReportViewerLP.exe (os links para download estão abaixo)

4. Pelo Visual Studio modifique a propriedade 'Copy to Output Directory' para 'Copy always' dos arquivos acima.

5. O código do arquivo InstalaReport.cmd ficaria assim:

 ECHO "Instalando Report Viewer Redistributable" >> log.txt
reportviewer.exe /q /log %temp%\123.txt
 
Echo "Instalando Report Viewer Language Pack" >> log.txt
reportviewerLP.exe /q /log %temp%\456.txt
 
Echo "Install completed" >> log.txt

Pronto. Feito isso quando você realizar o deploy dessa aplicação para o Windows Azure o arquivo InstalaReport.cmd será executado antes mesmo de qualquer código de sua aplicação.

E mesmo que suas máquinas virtuais precisem ser reiniciadas, por qualquer motivo, temos a certeza que o Report Viewer será reinstalado sem necessitar de intervenção manual.

Download do ReportViewer.exe

https://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6442

Download do ReportViewerLP.exe para Português Brasil:

https://www.microsoft.com/downloads/details.aspx?familyid=28af0789-9b20-4cba-9f76-d30dbf9a8c53&displaylang=pt-br