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

Actualizado: 14 de abril de 2006

Se pueden agregar funciones personalizadas a un informe o agregar referencias a funciones que existen en ensamblados externos. El servidor de informes agrega referencias para los ensamblados Microsoft.VisualBasic, System.Convert y System.Math automáticamente. Se puede hacer referencia a ensamblados adicionales mediante el cuadro de diálogo Propiedades del informe o el elemento CodeModules de la definición de informe.

También se puede utilizar el cuadro de diálogo Propiedades del informe para definir nuevas funciones personalizadas. Para definir funciones personalizadas en la definición de informe, utilice el elemento Code. Sin embargo, no se pueden pasar a las funciones conjuntos de valores de datos; concretamente, no se admiten agregados personalizados.

Es posible escribir código personalizado para utilizarlo en expresiones en un informe. Existen dos maneras de hacerlo: incrustar código en un informe o hacer referencia a métodos dentro de un ensamblado personalizado. El código incrustado se utiliza para funciones complejas o funciones que se utilizan varias veces en un único informe. Los ensamblados de código, en cambio, se usan para mantener el código en un único lugar y compartirlo entre varios informes.

Código incrustado

Para utilizar código en un informe, es preciso agregar un bloque de código al informe. Dicho bloque de código puede contener varios métodos. Es imprescindible que los métodos del código incrustado estén escritos en Microsoft Visual Basic y se basen en instancias.

Para obtener más información sobre cómo agregar código a un informe, vea Cómo agregar código a un informe (Diseñador de informes).

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 en dólares:

=Code.ToUSD(Fields!StandardCost.Value)

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

=Report.Parameters!Param1

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 vista Constantes del Editor de expresiones (que sólo muestra las constantes integradas), se pueden agregar referencias a ellas desde cualquier expresión, como se indica 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 incluye la referencia a código y la implementación en el código de la función FixSpelling, que sustituye todas las apariciones del texto Bike por Bicycle en el valor del campo SubCategory.

=Code.FixSpelling(Fields!SubCategory.Value)

Cuando el código siguiente se incrusta en una definición de informe, muestra una implementación del método FixSpelling. La primera vez que se ejecute este código personalizado, un cuadro de mensaje mostrará el texto sustituido. En este ejemplo se indica cómo hacer referencia a las clases StringBuilder y System.Windows.Forms.MessageBox de Microsoft .NET Framework. Debe agregar una referencia a las propiedades de su informe para System.Windows.Forms. Para obtener más información, vea Cómo agregar código a un informe (Diseñador de informes) y Cómo agregar una referencia de ensamblado a un informe (Diseñador de informes).

Dim firstTime As Boolean = True 
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")
      If firstTime Then
        System.Windows.Forms.MessageBox.Show(strBuilder.ToString())
'       or MsgBox(strBuilder.ToString())
        firstTime = False
      End If
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Para obtener más información acerca de la inicialización y las colecciones de objetos globales, vea Usar colecciones globales en expresiones y Initializing Custom Assembly Objects.

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 hacerlo disponible en Reporting Services, vea Using Custom Assemblies with Reports. Para obtener instrucciones acerca de cómo agregar una referencia a un informe, vea Cómo agregar una referencia de ensamblado a un informe (Diseñador de informes).

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.

Vea también

Otros recursos

Usar expresiones en Reporting Services

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido nuevo:
  • Se agregaron ejemplos.

5 de diciembre de 2005

Contenido nuevo:
  • Agregar una referencia al objeto de informe para colecciones globales.