Chamando um assembly .Net a partir de um relatório do SQL Server 2005 Reporting Services?

StackOverflow https://stackoverflow.com/questions/71488

  •  09-06-2019
  •  | 
  •  

Pergunta

Atualmente, tenho um conjunto de relatórios com diversas funções comuns em blocos de código nos arquivos .rdl.Obviamente, isso apresenta um problema de manutenção e gostaria de saber se alguém conhecia uma maneira de esses diferentes relatórios compartilharem uma biblioteca de código comum?

Idealmente, eu gostaria de ter um Assembly .Net anexado ao meu projeto Reporting Services, do qual todos os meus relatórios possam acessar e chamar funções.Isso evitaria a dor de cabeça de tentar atualizar e reimplantar cerca de 100 relatórios sempre que fosse necessária uma alteração em uma função comum.

Alguma sugestão?

Foi útil?

Solução

No Visual Studio, nas propriedades do relatório, na guia 'Referências', adicione os detalhes do assembly que contém o código gerenciado.Esse código pode ser chamado a partir de expressões em relatórios usando o nome da instância especificado.

Esse assembly pode ser armazenado no GAC ou no diretório PrivateAssemblies do Visual Studio e implantado no diretório 'bin' do Report Service no servidor Reporting Services.Para mais informações consulte Como usar assemblies personalizados ou código incorporado no Reporting Services

Outras dicas

Eu tive muita dor com isso, então espero que isso ajude alguém.Você pode obtê-lo no artigo do MSDN, mas há alguns pontos abaixo que acho que podem ajudar alguém a resolver isso um pouco mais rápido.

Não se esqueça de adicionar isto ao seu arquivo rssrvpolicy.config:

<CodeGroup class="UnionCodeGroup"
   version="1"
   PermissionSetName="FullTrust"
   Name="MyCodeGroup"
   Description="Code group for my data processing extension">
      <IMembershipCondition class="UrlMembershipCondition"
         version="1"
         Url="C:\pathtocustomassembly\customassembly.dll"
       />
</CodeGroup>

Esqueci de fazer isso e fiquei odiando por um tempo.

Além disso, não se esqueça de acessar as duas pastas a seguir para 2005 com sua nova dll:

Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies 
Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin

Além disso, não use log4net com sua montagem.Eu não consegui fazer funcionar.Talvez alguém possa, mas não eu.

Além disso, se você errar como eu, não poderá excluir os arquivos até fechar o Visual Studio.

Além disso, torne seus métodos compartilhados ou estáticos.É mais fácil.

Crie um arquivo em lote de implantação.Algo como:

@ECHO OFF
REM   Name: SRSDeploy_Local.bat
REM
REM   This batch files copies my custom assembly to my Reporting Services folders.
REM
REM   This is the SQL Server 2005 version:
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin"  

Por fim, crie seu relatório antes de visualizá-lo.

Se aumentar, você provavelmente está no caminho certo.

Exceto...

Você não pode implantá-lo em seu servidor de relatório de produção porque sempre receberá o seguinte erro:

Erro ao carregar módulo de código

É nisso que estou trabalhando agora.

O artigo a seguir lista praticamente todas as diferentes maneiras de chamar o código .Net de um relatório SSRS. Estendendo o Microsoft SQL Server 2000 Reporting Services com código personalizado

Se todos esses relatórios forem executados no mesmo servidor, outra opção a considerar seria usar procedimentos armazenados .Net no banco de dados para armazenar seu código.

Muito obrigado pessoal, agora posso chamar minha montagem a partir dos meus relatórios.

Pergunta complementar:Existe um namespace que eu possa incluir ao criar meu assembly que o torne ciente dos objetos no designer de relatórios, como campos e parâmetros?Seria ótimo se eu pudesse passar, digamos, uma coleção de campos de forma fortemente digitada para meu assembly.

E a resposta: Algumas horas de pesquisa revelam que adicionar \Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\Microsoft.ReportingServices.ProcessingObjectModel.dll como referência em meu assembly me permite acessar os vários tipos de Reporting Services, como Campos e Parâmetros.Observe que no Reporting Services 2008, o alterações de namespace.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top