Num artigo anterior, mostrei como utilizar Custom Code num relatório. Isto é muito útil se for necessário personalizar alguma coisa, mas se precisarmos de fazer esta operação em diversos relatórios ? Bem, podemos usar as Custom Assemblies.
Para usar Custom Assemblies num relatório, é apenas necessário criar um projecto do tipo Class Library, que irá originar um *.dll, e usar esta biblioteca em todos os relatórios.
Depois de criado o ficheiro/biblioteca, é necessário copiar o *.dll para as pastas Release/Debug da aplicação, e para a pasta PrivateAssemblies (no Visual Studio 2008 está normalmente em C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\)
Para este exemplo criei uma pequena classe, que irá cortar algum texto caso o tamanho do texto seja igual ou superior a 30:
Public Class rptClass
Public Function CutText(ByVal txt As String) As String
If txt.Length >= 30 Then
Return txt.Substring(0, 26) & " ..."
Else
Return txt
End If
End Function
Public Shared Function SharedCutText(ByVal txt As String) As String
If txt.Length >= 30 Then
Return txt.Substring(0, 26) & " ..."
Else
Return txt
End If
End Function
End Class
Depois, é necessário adicionar uma referência no relatório para a biblioteca. Abrir o relatório, e no menu Reports, seleccionar a opção Report Properties. No separador References, seleccionar o *.dll criado.
NOTA: O nome da biblioteca (Assembly Name) irá ser usado mais tarde no código
Nesta janela existem 2 grelhas:
References: Se forem usados métodos definidos como Shared, é possível invocá-los directamente
Classes: Se não forem usados métodos Shared, é necessário criar uma nova instância da classe (tem de ser escrito directamente na grelha)
Depois, no relatório, podemos usar da seguinte forma:
Como podem ver, se for criada uma nova instância da classe, é necessário definir como =Code.<instância criada>.<nome do método>
Finalmente, e no código, é necessário definir que a classe criada (biblioteca) é Trusted Code, usando o Assembly Name usado nas referências:
Me.ReportViewer1.LocalReport.AddTrustedCodeModuleInCurrentAppDomain( _
"ClassLibrary1, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null")
PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!
2 comentários:
Bom dia Jorge
Tenho a seguinte duvida.
Quando quiser fazer deploy do relatório como é que vão estas assemblies? Vão embutidas no própio relatório?
Olá Henrry,
Não, para isso podes usar o Custom Code, que guarda o código dentro do relatório(*.rldc). Neste caso é necessário incluir, e registar, o ficheiro DLL.
Enviar um comentário