Usar referencias de código personalizado en expresiones (Reporting Services)

Puede agregar referencias al código personalizado incrustado en un informe o a los ensamblados personalizados que se hayan generado e implementado en el servidor de informes y en el cliente del informe. El código incrustado se utiliza en constantes, funciones complejas o funciones personalizadas que se usan varias veces en un único informe. Los ensamblados de código personalizados, en cambio, se usan para mantener el código en un único lugar y compartirlo entre varios informes.

Para cálculos dependientes del tiempo que se evalúan una sola vez en tiempo de ejecución y cuyo valor desea conservar a lo largo del procesamiento del informe, plantéese la posibilidad de usar una variable de informe o de grupo. Para obtener más información, vea Usar referencias a las colecciones de variables de informe y de grupo en expresiones (Reporting Services).

El código personalizado puede incluir nuevas constantes, variables, funciones o subrutinas personalizadas. Puede incluir referencias de sólo lectura en las colecciones integradas, como la colección Parameters. Sin embargo, no puede pasar conjuntos de valores de datos de informe a las funciones personalizadas; concretamente, no se admiten agregados personalizados.

Código incrustado

Para agregar código incrustado a un informe, use la página Código del cuadro de diálogo Propiedades del informe. El bloque de código que cree puede contener varios métodos. Es imprescindible que los métodos del código incrustado estén escritos en MicrosoftVisual Basic y que estén basados en instancias. El procesador de informes agrega referencias para los espacios de nombres System.Convert y System.Math automáticamente. Use la página Referencias del cuadro de diálogo Propiedades del informe para agregar referencias de ensamblado adicionales. Para obtener más información, vea Cómo agregar código a un informe (Reporting Services) y Cómo agregar una referencia de ensamblado a un informe (Reporting Services).

Los métodos del código incrustado están disponibles a través del miembro Code definido globalmente. Para tener acceso a ellos, se hace referencia al miembro Code y al nombre del método. En el siguiente ejemplo, se llama al método ToUSD, que convierte el valor del campo StandardCost en un valor de moneda:

=Code.ToUSD(Fields!StandardCost.Value)

Para hacer referencia a colecciones integradas en el código personalizado, incluya una referencia al objeto integrado Report:

=Report.Parameters!Param1.Value

En los ejemplos siguientes se muestra cómo definir algunas constantes y variables 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

Aunque las constantes personalizadas no aparecen en la categoría Constantes del cuadro de diálogo Expresión (que solo muestra las constantes integradas), se pueden agregar referencias a ellas desde cualquier expresión, tal y como se muestra en los ejemplos siguientes. En una expresión, una constante personalizada se trata como Variant.

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

En el ejemplo siguiente se incluyen tanto la referencia a código como la implementación en el código de la función FixSpelling, que sustituye por el texto "Bicycle" todas las repeticiones del texto "Bike" en el campo SubCategory.

=Code.FixSpelling(Fields!SubCategory.Value)

Cuando el código siguiente se incrusta en un bloque de código de la definición de informe, muestra una implementación del método FixSpelling. En este ejemplo se muestra cómo usar una referencia completa a la clase StringBuilder de 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 obtener más información acerca de las colecciones de objetos integrados y de su inicialización, vea Usar colecciones globales en expresiones y Inicializar objetos de ensamblados personalizados.

Ejemplos de referencias a Parameters desde código personalizado

Se puede hacer referencia a la colección global Parameters mediante código personalizado en un bloque de código de la definición de informe o en un ensamblado personalizado proporcionado por el usuario. La colección Parameters es de sólo lectura y no tiene iteradores públicos. No se puede usar una construcción For Each de Visual Basic para recorrer la colección. Debe conocer el nombre del parámetro definido en la definición de informe para poder hacer referencia a él en el código. No obstante, puede recorrer en iteración todos los valores de un parámetro de varios valores. Para obtener más información, vea Usar referencias de código personalizado en expresiones (Reporting Services).

En la tabla siguiente se incluyen ejemplos de referencias a la colección integrada Parameters desde código personalizado:

Descripción

Referencia en la expresión

Definición del código personalizado

Pasa la totalidad de la colección global Parameters al código personalizado.

Esta función devuelve el valor de un parámetro de informe determinado, MyParameter.

=Code.DisplayAParameterValue(Parameters)

Public Function DisplayAParameterValue(

ByVal parameters as Parameters) as Object

Return parameters("MyParameter").Value

End Function

Pasa un parámetro individual al código personalizado.

Este ejemplo devuelve el valor del parámetro pasado. Si se trata de un parámetro de varios valores, la cadena devuelta es una concatenación de todos ellos.

=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

Ensamblados personalizados

Para utilizar ensamblados personalizados en un informe, primero debe crear el ensamblado, hacer que esté disponible para el Diseñador de informes, agregar una referencia a él en el informe y, a continuación, utilizar una expresión en el informe que haga referencia a los métodos de dicho ensamblado. Cuando implemente el informe en el servidor de informes, también debe implementar el ensamblado personalizado.

Para obtener información sobre cómo crear un ensamblado personalizado y ponerlo a disposición de Reporting Services, vea Usar ensamblados personalizados con informes. Para obtener instrucciones acerca de cómo agregar una referencia a un informe, vea Cómo agregar una referencia de ensamblado a un informe (Reporting Services).

Para incluir en una expresión una referencia a código personalizado, debe llamar al miembro de una clase del ensamblado. La manera de hacerlo depende de si el método es estático o se basa en instancias. Los métodos estáticos de un ensamblado de código están disponibles globalmente en el informe. El acceso a estos métodos estáticos en expresiones se lleva a cabo a través de la especificación del espacio de nombres, la clase y el nombre del método. En el siguiente ejemplo, se llama al método ToGBP, que convierte el valor del campo StandardCost de dólares a libras esterlinas:

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

Los métodos basados en instancias están disponibles a través del miembro Code definido globalmente. Para tener acceso a estos métodos, debe hacerse referencia al miembro Code, seguido del nombre de la instancia y del método. En el siguiente ejemplo, se llama al método ToEUR, que convierte el valor del campo StandardCost de dólares a euros:

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)

[!NOTA]

En el Diseñador de informes, un ensamblado personalizado se carga una vez y no se descarga hasta que se cierra Visual Studio. Si se obtiene la vista previa de un informe, se realizan cambios en un ensamblado personalizado que se utiliza en el informe y, después, se vuelve a obtener la vista previa del informe, los cambios no aparecerán en la segunda vista previa. Para volver a cargar el ensamblado, cierre Visual Studio, vuelva a abrirlo y obtenga la vista previa del informe.

Para obtener más información sobre cómo tener acceso al código, vea Acceso a los ensamblados personalizados a través de expresiones.