Referencias a ensamblados y código personalizado en expresiones en el Diseñador de informes (SSRS)

Puede agregar referencias al código personalizado incrustado en un informe o a los ensamblados personalizados que haya generado y guardado en el equipo e implementado en el servidor de informes. El código incrustado se utiliza en constantes, funciones complejas o funciones personalizadas que se usan varias veces en un único informe. Use ensamblados de código personalizados para mantener el código en un único lugar y compartirlo con el fin de utilizarlos en múltiples informes. El código personalizado puede incluir nuevas constantes, variables, funciones o subrutinas personalizadas. Puede incluir referencias de solo 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.

Nota de seguridadNota de seguridad

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, considere la posibilidad de usar una variable de informe o una variable de grupo. Para obtener más información, vea Usar referencias a las colecciones de variables de informe y de grupo (Generador de informes 3.0 y SSRS).

El Diseñador de informes es el entorno de creación preferido para agregar código personalizado a un informe. La versión 3.0 del Generador de informes admite el procesamiento de informes que tienen expresiones válidas o que incluyen referencias a ensamblados personalizados en un servidor de informes. El Generador de informes no proporciona un medio para agregar una referencia a un ensamblado personalizado.

Nota

Tenga en cuenta que durante la actualización de un servidor de informes, los informes que dependen de ensamblados personalizados pueden requerir pasos adicionales para completar la actualización. Para obtener más información, vea Usar el Asesor de actualizaciones para preparar las actualizaciones.

Nota

Puede crear y modificar las definiciones de informe (.rdl) en el Generador de informes 3.0 y en el Diseñador de informes en Business Intelligence Development Studio. Cada entorno de creación proporciona varias maneras de crear, abrir y guardar informes y elementos relacionados. Para obtener más información, vea la información sobre el diseño de informes en el Generador de informes 3.0 y el Administrador de informes (SSRS) en el sitio web microsoft.com.

En este artículo

Trabajar con código personalizado en el Generador de informes 3.0

Incluir referencias a funciones de uso frecuente

Incluir referencias a funciones de uso menos frecuente

Incluir referencias a ensamblados externos

Incluir código incrustado

Incluir referencias a parámetros desde el código

Incluir referencias al código desde ensamblados personalizados

Trabajar con código personalizado en el Generador de informes 3.0

En el Generador de informes, puede abrir un informe desde un servidor de informes que incluya referencias a ensamblados personalizados. Por ejemplo, puede modificar los informes creados e implementados mediante el uso del Diseñador de informes en Business Intelligence Development Studio. Los ensamblados personalizados deben implementarse en el servidor de informes.

No puede realizar lo siguiente:

  1. Agregar referencias o instancias de miembro de clase a un informe.

  2. Obtener una vista previa de un informe con referencias a ensamblados personalizados en modo local.

Icono de flecha usado con el vínculo Volver al principioVolver al principio

Incluir referencias a funciones de uso frecuente

Use el cuadro de diálogo Expresión para ver una lista organizada en categorías de las funciones de uso frecuente integradas en Reporting Services. Si expande Funciones comunes y hace clic en una categoría, el panel Elemento muestra la lista de funciones que puede incluir en una expresión. Las funciones comunes incluyen clases de los espacios de nombres de .NET Framework System..::..Math y System..::..Convert, y funciones de la biblioteca en tiempo de ejecución de Visual Basic. Para mayor comodidad, puede ver las funciones de uso más frecuente en el cuadro de diálogo Expresión, donde aparecen agrupadas por categorías: Texto, Fecha y hora, Matemáticas, Inspección, Flujo de programa, Agregado, Finanzas, Conversión y Varios. Las funciones de uso menos frecuente no aparecen en la lista, pero se pueden usar en una expresión.

Para usar una función integrada, haga doble clic en el nombre de la función en el panel Elemento. Una descripción de la función aparece en el panel Descripción y un ejemplo de la llamada a la función aparece en el panel Ejemplo. Al escribir el nombre de la función seguido de un paréntesis izquierdo (, en el panel de código, la Ayuda de IntelliSense muestra todas las sintaxis válidas para la llamada a la función. Por ejemplo, para calcular el valor máximo de un campo denominado Quantity en una tabla, agregue la expresión simple =Max( al panel de código y, a continuación, use las etiquetas inteligentes para ver todas las posibles sintaxis válidas para la llamada a la función. Para completar este ejemplo, escriba =Max(Fields!Quantity.Value). 

Para obtener más información sobre cada función, vea System..::..Math, System..::..Convert y Miembros de la biblioteca en tiempo de ejecución de Visual Basic en MSDN.

Icono de flecha usado con el vínculo Volver al principioVolver al principio

Incluir referencias a funciones de uso menos frecuente

Para incluir una referencia a otros espacios de nombres de CLR de uso menos frecuente, debe usar una referencia completa, por ejemplo, System.Text..::..StringBuilder. IntelliSense no se admite en el panel de código del cuadro de diálogo Expresión para estas funciones menos frecuentes.

Para obtener más información, vea Miembros de la biblioteca en tiempo de ejecución de Visual Basic en MSDN.

Incluir referencias a ensamblados externos

Para incluir una referencia a una clase de un ensamblado externo, debe identificar el ensamblado para el procesador de informes. Use la página Referencias del cuadro de diálogo Propiedades del informe para especificar el nombre completo del ensamblado que se va a agregar al informe. En la expresión, debe usar el nombre completo para la clase del ensamblado. Las clases de un ensamblado externo no aparecen en el cuadro de diálogo Expresión; es necesario que proporcione el nombre correcto de la clase. Un nombre completo incluye el espacio de nombres, el nombre de la clase y el nombre del miembro.

Icono de flecha usado con el vínculo Volver al principioVolver al principio

Incluir código incrustado

Para agregar código incrustado a un informe, use la pestaña Código del cuadro de diálogo Propiedades del informe. El bloque de código que cree puede contener varios métodos. Los métodos del código incrustado se deben escribir en Microsoft Visual Basic y deben basarse en las instancias. El procesador del informe agrega automáticamente referencias para los espacios de nombres System.Math y System.Convert. Use la página Referencias del cuadro de diálogo Propiedades del informe para agregar referencias adicionales al ensamblado. Para obtener más información, vea Agregar una referencia de ensamblado a un informe (SSRS).

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 integradas y su inicialización, vea Usar referencias a colecciones Globals y User integradas (Generador de informes 3.0 y SSRS) y Inicializar objetos de ensamblados personalizados.

Icono de flecha usado con el vínculo Volver al principioVolver al principio

Incluir referencias a parámetros desde el código

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 solo 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.

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

Icono de flecha usado con el vínculo Volver al principioVolver al principio

Incluir referencias al código desde 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 hacer referencia a código personalizado en una expresión, debe llamar al miembro de una clase en el 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.

Icono de flecha usado con el vínculo Volver al principioVolver al principio

Pasar colecciones integradas a ensamblados personalizados

Si desea pasar colecciones integradas, como la colección Globals o Parameters, a un ensamblado personalizado para su procesamiento, debe agregar una referencia de ensamblado de su proyecto de código al ensamblado que define las colecciones integradas y el acceso al espacio de nombres correcto. Dependiendo de si desarrolla el ensamblado personalizado para un informe que se ejecuta en un servidor de informes (informe de servidor) o para un informe que se ejecuta localmente en una aplicación .NET (informe local), el ensamblado al que debe hacerse referencia será diferente. A continuación se incluye información detallada.

  • Espacio de nombres: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

  • Ensamblado (informe local): Microsoft.ReportingServices.ProcessingObjectModel.dll

  • Ensamblado (informe de servidor): Microsoft.ReportViewer.ProcessingObjectModel.dll

Como el contenido de las colecciones Fields y ReportItems puede cambiar dinámicamente en tiempo de ejecución, no debe incluirlas en las llamadas al ensamblado personalizado (por ejemplo, en una variable miembro). La misma recomendación se aplica normalmente a todas las colecciones integradas.