Estou aqui mais uma vez para compartilhar minhas experiencias, desta vez tive que criar um CustomAssembly (DLL) para usar dentro do SSRS 2008 R2, isto normalmente é bem simples de se fazer com os tutoriais, mas se você precisa fazer algo um pouco mais complexo como refenciar a DLL Windows.Forms você já vai precisar liberar algumas coisas a mais
Segue abaixo como fiz para criar a DLL que converte RTF para Texto limpo
OBS: Usei Visual Studio 2010 (.NET 4.0) para Criar Classe em C# mas compilando como (.NET 3.5) pois é o que o SSRS aceita.
- Crie um projeto do tipo Class Library
Segue abaixo Código, marquei em vermelho as 2 partes principais:
- a primeira é obrigatória
- a segunda ficou sendro obrigatório com o a referecia ao Windows.Forms, pois preciso fazer “Assert”, é como se eu estivesse dando uma permissão de uso da interface.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security;
[assembly:AllowPartiallyTrustedCallers]
namespace RTFtoText_WinComponent
{
/// <summary>
/// Classe usada no Reporting Services para limpeza de tags RTF para texto limpo
/// </summary>
public class RTFtoText
{
/// <summary>
/// Retorna texto ASCII de texto em RTF
/// </summary>
/// <param name=”TextoOriginal”>Texto origem</param>
/// <returns>Texto limpo</returns>
public static String GetTXTfromRTF(String TextoOriginal)
{
String retorno = “”;
System.Security.Permissions.UIPermission UIPermission = new System.Security.Permissions.UIPermission(System.Security.Permissions.PermissionState.Unrestricted);
UIPermission.Assert();
// Create the RichTextBox. (Requires a reference to System.Windows.Forms.dll.)
System.Windows.Forms.RichTextBox rtBox = new System.Windows.Forms.RichTextBox();
try
{
rtBox.Rtf = TextoOriginal;
retorno = rtBox.Text;
}
catch (Exception ex)
{
return TextoOriginal;
}
return retorno;
}
}
}
Não esquecer de mudar as propriedades do projeto colocando como framework 3.5
Compilado a DLL você precisa copiar a DLL para alguns lugares, já vi em blogs para se copiar para vários lugares inclusive o GAC. Mas é realmente necessário apenas 2 lugares
- Business Intelligence Development Studio
- C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies
- Reporting Services
- C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin
E para que o Reporting tenha permissão de usar esta DLL será necessário alterar os arquivos de configuração do Reporting
- C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\RSPreviewPolicy.config
<CodeGroup
class=”UnionCodeGroup”
version=”1″
PermissionSetName=”FullTrust”
Name=”MyCustomAssemblyCodeGroup”
Description=”Code group forRTFtoText_WinComponent”>
<IMembershipCondition class=”UrlMembershipCondition”
version=”1″
Url=”C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\RTFtoText_WinComponent.dll”
/>
</CodeGroup>
- C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\rssrvpolicy.config
<CodeGroup
class=”UnionCodeGroup”
version=”1″
PermissionSetName=”FullTrust”
Name=”MyCustomAssemblyCodeGroup”
Description=”Code group forRTFtoText_WinComponent”>
<IMembershipCondition class=”UrlMembershipCondition”
version=”1″
Url=”C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\RTFtoText_WinComponent.dll”
/>
</CodeGroup>
No Reporting basta fazer a referencia a DLL
e usar na Expression
=RTFtoText_WinComponent.RTFtoText.GetTXTfromRTF(Fields!RTF.Value)
Esta pronto
Oi Professor,
Suas dicas são muito úteis.
Abraços,