Partilhar via


Usando referências de código personalizado em expressões (Reporting Services)

É possível adicionar referências ao código personalizado incorporado em um relatório ou aos assemblies personalizados criados e implantados no cliente de relatório e no servidor de relatório. Use o código incorporado para constantes personalizadas, funções complexas ou funções usadas várias vezes em um único relatório. Use assemblies de código personalizado para manter o código em um único local e compartilhá-lo entre vários relatórios.

Para cálculos de detecção de hora avaliados uma vez em tempo de execução e que você deseja manter com o mesmo valor ao longo do processamento do relatório, considere se um relatório ou uma variável de grupo deve ser usada. Para obter mais informações, consulte Usando as referências do conjunto de variáveis de relatórios e grupos em expressões (Reporting Services).

O código personalizado pode incluir novas constantes, variáveis, funções ou sub-rotinas personalizadas. É possível incluir referências somente leitura em coleções internas, como a coleção de Parâmetros. No entanto, não é possível passar conjuntos de valores de dados do relatório para funções personalizadas. Especificamente, não há suporte para agregações personalizadas.

Código incorporado

Para adicionar código incorporado a um relatório, use a Página de código da caixa de diálogo Propriedades do Relatório. O bloco de código criado pode conter vários métodos. Os métodos no código incorporado devem ser gravados no MicrosoftVisual Basic e devem ser baseados em instância. O processador de relatório adiciona referências automaticamente para os namespaces System.Convert e System.Math. Use a página Referências da caixa de diálogo Propriedades do Relatório para adicionar referências adicionais do assembly. Para obter mais informações, consulte Como adicionar código a um relatório (Reporting Services) e Como adicionar uma referência de assembly a um relatório (Reporting Services).

Os métodos no código incorporado são disponibilizados por meio de um membro do Code definido globalmente. Você os acessa consultando o membro do Code e o nome do método. O exemplo a seguir chama o método ToUSD que converte o valor no campo StandardCost para um valor em dólar:

=Code.ToUSD(Fields!StandardCost.Value)

Para fazer referência às coleções internas no código personalizado, inclua uma referência no objeto Report interno:

=Report.Parameters!Param1.Value

Os exemplos a seguir mostram como definir algumas constantes e variáveis personalizadas.

Public Const MyNote = "Authored by Bob"
Public Const NCopies As Int32 = 2
Public Dim  MyVersion As String = "123.456"
Public Dim MyDoubleVersion As Double = 123.456

Embora as constantes personalizadas não apareçam na categoria de Constantes na caixa de diálogo Expressão (que exibe apenas constantes internas), é possível adicionar referências a elas a partir de qualquer expressão, conforme mostrado nos exemplos a seguir. Em uma expressão, uma constante personalizada é tratada como uma Variant.

=Code.MyNote
=Code.NCopies
=Code.MyVersion
=Code.MyDoubleVersion

O exemplo a seguir inclui a referência e a implementação de código da função FixSpelling que substitui o texto "Bicycle" para todas as ocorrências do texto "Bicicleta" no campo SubCategory.

=Code.FixSpelling(Fields!SubCategory.Value)

O código a seguir, quando incorporado em um bloco de código de definição de relatório, mostra uma implementação do método FixSpelling. Este exemplo mostra como usar uma referência totalmente qualificada para a classe StringBuilder do Microsoft.NET Framework.

Public Function FixSpelling(ByVal s As String) As String
   Dim strBuilder As New System.Text.StringBuilder(s)
   If s.Contains("Bike") Then
      strBuilder.Replace("Bike", "Bicycle")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Para obter mais informações sobre coleções de objetos internos e inicialização, consulte Usando coleções globais em expressões e Inicializando objetos assembly personalizados.

Exemplos de parâmetros de referência de código personalizado

É possível fazer referência à coleção de parâmetros globais por meio de código personalizado em um bloco de código da definição do relatório ou em um assembly personalizado fornecido. A coleção de parâmetros é somente leitura e não possui iteradores públicos. Não é possível usar uma construção de For Each do Visual Basic para percorrer a coleção. É preciso saber o nome do parâmetro definido na definição de relatório antes de referenciá-lo no código. No entanto, é possível iterar através de todos os valores de um parâmetro de vários valores. Para obter mais informações, consulte Usando referências de código personalizado em expressões (Reporting Services).

A tabela a seguir inclui exemplos de como fazer referência à coleção interna de Parameters no código personalizado:

Descrição

Referência em expressão

Definição de código personalizado

Passando uma coleção de parâmetros globais inteira para código personalizado.

Esta função retorna o valor de um parâmetro de relatório específico MyParameter.

=Code.DisplayAParameterValue(Parameters)

Public Function DisplayAParameterValue(

ByVal parameters as Parameters) as Object

Return parameters("MyParameter").Value

End Function

Passando um parâmetro individual para código personalizado.

Este exemplo retorna o valor do parâmetro passado. Se o parâmetro for um parâmetro de vários valores, a cadeia de caracteres de retorno será uma concatenação de todos os valores.

=Code.ShowParametersValues(Parameters!DayOfTheWeek)

Public Function ShowParameterValues(ByVal parameter as Parameter)
 as String
   Dim s as String 
   If parameter.IsMultiValue then
      s = "Multivalue: " 
      For i as integer = 0 to parameter.Count-1
         s = s + CStr(parameter.Value(i)) + " " 
      Next
   Else
      s = "Single value: " + CStr(parameter.Value)
   End If
   Return s
End Function

Assemblies personalizados

Para usar assemblies personalizados em um relatório, você deve primeiro criar o assembly, torná-lo disponível para o Designer de Relatórios, adicionar uma referência ao assembly no relatório e usar uma expressão no relatório para fazer referência aos métodos contidos nesse assembly. Quando o relatório é implantado no servidor de relatório, você deve também implantar o assembly personalizado no servidor de relatório.

Para obter informações sobre como criar um assembly personalizado e torná-lo disponível para o Reporting Services, consulte Usando assemblies personalizados com relatórios. Para obter instruções sobre como adicionar uma referência a um relatório, consulte Como adicionar uma referência de assembly a um relatório (Reporting Services).

Para consultar o código personalizado em uma expressão, você deve chamar o membro de uma classe dentro do assembly. A maneira de fazer isso depende do método ser estático ou baseado em instância. Os métodos estáticos dentro de um assembly personalizado estão disponíveis globalmente dentro do relatório. É possível acessar métodos estáticos em expressões especificando o namespace, a classe e o nome do método. O exemplo a seguir chama o método ToGBP que converte o valor do StandardCost de dólar em libra esterlina:

=CurrencyConversion.DollarCurrencyConversion.ToGBP(Fields!StandardCost.Value)

Os métodos baseados em instância estão disponíveis por meio de um membro do Code definido globalmente. Você os acessa fazendo referência ao membro do Code, seguido pelo nome da instância e do método. O exemplo a seguir chama o método da instância ToEUR, que converte o valor do StandardCost de dólar em euro:

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)
ObservaçãoObservação

No Designer de Relatório, um assembly personalizado é carregado uma vez e não é descarregado até que o Visual Studio seja fechado. Se você visualizar um relatório, fizer alterações em um assembly personalizado usado no relatório e visualizar o relatório novamente, as alterações não serão exibidas na segunda visualização. Para recarregar o assembly, feche e abra o Visual Studio novamente e visualize o relatório.

Para obter mais informações sobre como acessar o código, consulte Acessando assemblies personalizados por meio de expressões.