Referencias a ensamblados y código personalizado en expresiones de un informe paginado en el Diseñador de informes (SSRS)
Se aplica a: Generador de informes en SQL Server Data Tools ❌ Power BI Report Builder ❌ Microsoft Report Builder (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.
Importante
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, consulte Referencias a las colecciones de variables de informe y de grupo (Generador de informes y SSRS).
El Diseñador de informes es el entorno de creación preferido para agregar código personalizado a un informe. El 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.
Nota
Puede crear y modificar los archivos de definición de informes paginados (.rdl) en el Generador de informes de Microsoft, en Power BI Report Builder y en el Diseñador de informes de SQL Server Data Tools.
Trabajar con código personalizado en el Generador de informes
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 SQL Server Data Tools (SSDT). Los ensamblados personalizados deben implementarse en el servidor de informes.
No puede realizar lo siguiente:
Agregar referencias o instancias de miembro de clase a un informe.
Obtener una vista previa de un informe con referencias a ensamblados personalizados en modo local.
Incluir referencias a funciones de uso frecuente
Use el cuadro de diálogo Expresión para ver una lista organizada por categorías de las funciones más comunes integradas en el Generador de informes. 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. En las funciones comunes se incluyen clases de los espacios de nombres Math y Convert de .NET Framework, así como funciones de 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. En el panel Descripción, aparece una descripción de la función; en el panel Ejemplo, aparece un ejemplo de la llamada a la función. En el panel de código, al escribir el nombre de la función seguido por un paréntesis izquierdo ( , la Ayuda de IntelliSense muestra la sintaxis válida 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 más información sobre cada función, vea Math, Converty Miembros de la biblioteca en tiempo de ejecución de Visual Basic en MSDN.
Incluir referencias a funciones de uso menos frecuente
Para incluir una referencia a otros espacios de nombres de CLR de uso menos frecuente es necesario usar una referencia completa (por ejemplo, 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.
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. Es imprescindible que los métodos en el código incrustado estén escritos en Microsoft Visual Basic y se basen en instancias. El procesador de informes agrega automáticamente referencias para los espacios de nombres System.Convert y System.Math. 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, consulte 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 poder acceder 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 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, 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 sobre las colecciones de objetos integradas y la inicialización, consulte Referencias integradas a campos globales y de usuario (Generador de informes y SSRS) e Inicializar objetos de ensamblados personalizados.
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. Pero 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:
**Pasar una colección entera de parámetros globales a código personalizado.**Esta función devuelve el valor de un parámetro específico de informe, MyParameter.
Referencia en la expresión =Code.DisplayAParameterValue(Parameters)
Definición del código personalizado
Public Function DisplayAParameterValue(ByVal parameters as Parameters) as Object
Return parameters("MyParameter").Value
End Function
Pasa un parámetro individual al código personalizado.
Referencia en la expresión =Code.ShowParametersValues(Parameters!DayOfTheWeek)
En este ejemplo se devuelve el valor del parámetro pasado. Si el parámetro es un parámetro de varios valores, la cadena devuelta es una concatenación de todos los valores.
Definición del código personalizado
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
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 hacer que esté disponible en el Generador de informes, vea Usar ensamblados personalizados con informes.
Para incluir en una expresión una referencia a código personalizado, debe llamar al miembro de una clase dentro 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 y vuelva a abrir Visual Studio, y obtendrá la vista previa del informe.
Para obtener más información sobre cómo tener acceso al código, vea Accessing Custom Assemblies Through Expressions.
Pasar colecciones integradas a ensamblados personalizados
Si quiere pasar colecciones integradas (como las colecciones Globals o Parameters ) a un ensamblado personalizado para su procesamiento, necesita 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. Consulte a continuación para más información.
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 las incluya en las llamadas al ensamblado personalizado (por ejemplo, en una variable miembro). La misma recomendación se aplica normalmente a todas las colecciones integradas.