You are currently browsing the tag archive for the ‘C#’ tag.


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.

  1. Crie um projeto do tipo Class Library

image

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

image

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

image

e usar na Expression

=RTFtoText_WinComponent.RTFtoText.GetTXTfromRTF(Fields!RTF.Value)

 

Esta pronto

image