2.10.Expresiones y métodos.

En el anterior post ya vimos como introducir algunas expresiones.
Hoy queremos meternos más de lleno con el tema de las expresiones en los informes.

Empezaremos con una expresión para cambiar el color de las filas del informe.
Para ello nos situaremos encima de la fila del tablix que queremos modificar.


Y nos iremos a sus propiedades para cambiarle el color de fondo.
En vez de introducirle un color por defecto lo que haremos será meterle una expresión.

 
Podemos ponerle un color seleccionándolo de la paleta de colores o introducirle uno en formato hexadecimal.

Esta misma expresión con formato hexadecimal sería algo así:

=IIF(RowNumber(Nothing) mod 2, "#FA08F2", "#FFFFFF")


 
Las expresiones más utilizadas son las que usamos para mostrar datos.
 
Primero tenemos que entender como le llegan los datos al informe.
 
Aquí tenemos una representación de como nos llegan los datos al informe.
 
 
 
Si observáis hay datos que se repiten en todas las líneas.
 
En la imagen podemos ver el diseño del informe SalesOrderConfirm.
 
Como podemos ver tenemos una cabecera y un cuerpo.
 
 
Tomaremos un campo de la cabecera para ver la expresión del campo.
 
Si miráis la expresión del campo, le está indicando que tome el primero que encuentre, eso lo hace con la palabra clave First.
 
 
 
Si recordáis los registros que teníamos en nuestro ejemplo se repetía en todas las líneas el identificador de la empresa y el nombre, con lo que si necesitamos recuperar una, nos daría igual de que línea tomarla por eso en la cabecera o campos que estén sueltos en el diseño utilizamos la palabra clave First.
 
Nota: En la imagen se puede ver como justo después del campo seleccionado incluye el nombre del DataSet, esto no es necesario si solamente existe un dataSet en el informe.
 
Bien, ahora miraremos un campo de una matriz, en este caso no se le indica ninguna palabra clave, tan sólo el campo.
Pensad que en la matriz/tabla se recorrerá todos los registros.
 
Para la siguiente palabra clave he tomado un ejemplo de este mismo blog. Es la palabra Sum que sirve para realizar una suma de la columna a la que hace referencia; ésta se utiliza cuando existe una agrupación, y realizará una suma de dicha columna.
 
Existe todo tipo de expresiones aquí tenemos algunos ejemplos.
 
-Para mostrar el valor de un campo.
=Fields!CompanyName.Value
 
-Expresiones de tipo booleano
=IIF(Fields!Total.Value > 100, True, False)
 
-Expresiones con funciones.
A parte de las ya vista como First o Sum existen multitud de ellas.
=Year(Fields!DueDate.Value)
 
-Funciones predefinidas.
=RowNumber(nothing)
 
 
El cuadro de expresiones.
 
Constantes: Donde podemos escribir textos fijos o expresiones como las indicadas anteriormente.
 
 
Campos integrados: Son campos referentes/propios del informe como el nombre del informe o el número de páginas.
 
 


Parámetros: Podremos tomar como valores para imprimir en el informe los parámetros, ya sean los del informe por defecto o los que hayamos creado.
 
 
Campos: Podremos seleccionar cualquier campo de nuestro dataset.

 
Conjunto de datos: Podremos seleccionar los campos del dataset pero en este caso tratándolos como si estuvieran en un grupo.
 
 
Variable: Donde podremos seleccionar cualquier variable que tengamos declarada en nuestro informe.
Operadores: Podremos seleccionar entre distintos operadores, por ejemplo de concatenación para poder unir dos textos en una celda.
 
 
Funciones comunes: Podremos elegir entre distintas funciones ya sean por ejemplo para convertir el texto en mayúsculas o funciones matemáticas como la ya vista Sum.
 
 
 
Seguiremos el post mostrando algún ejemplo más de como funcionan las expresiones.

Una captura de nuestro informe antes de empezar a modificar con las expresiones:

 
 
Vamos a crear un ejemplo muy simple para que podáis entender un poco las posibilidades de las expresiones en los SSRS Reports.
 
Nos situaremos en una celda, en mi caso la que contiene el campo SalesId e iremos a la propiedad hidden.
 
 
Esta propiedad sirve para ocultar campos.
Tiene tres posibles valores: True, False y Expresión, esta última es la que seleccionaremos.

 Escribiremos esta expresión.


Tenemos que entender que esta expresión es para esconder el campo ya que éste se muestra siempre.
Lo que le estamos indicando es que si la cuenta de facturación es igual al cliente MCP-00001 debe esconderla. En caso contrario, no.
 
Ahora al imprimir el informe no se mostrará el campo pedido de ventas para los registros cuya cuenta de facturación sea la indicada en la expresión.
 
 

Creo que con lo explicado uno se puede hacer a la idea de la múltiples posibilidades que nos brindan las expresiones.
 
 
Métodos
 
De la misma manera que existen métodos en Ax ya sea en clases, formularios o tablas también existen en los informes.
 
Para crear uno tan únicamente debemos situarnos encima del nodo Data Methods y darle con el botón derecho del ratón para crearnos un nuevo método.
 
Lo renombraremos con un nombre que sea acorde a lo que va a realizar.
En mi caso lo he llamado Title porque mi intención es que este método me devuelva un título para mi informe.
 
 
Una vez creado el método deberemos presionar dos veces con el ratón encima de éste para que nos cree las clases para el bussines logic.
 
 
A la vez que se crea nuestra clase nos creará un método.
El atributo [DataMethod] le indica que es un método.
El valor de retorno es un string pero lo podemos modificar ya que puede devolver cualquier tipo  que soporte .NET.
 
Este primer ejemplo será algo muy sencillo, le indicaremos que nos devuelva el texto "Facturas".
 

Ahora únicamente nos faltará agregar este nuevo método al diseño del informe.
En mi caso como lo que pretendo es cambiar el texto del título de mi informe, lo que haré es ir a la expresión del cuadro de texto que tiene mi título.

 
Y en él cambiaremos la expresión por la que sigue.
 


Así de fácil es llamar a un método en nuestro informe.

De la misma manera debemos generar nuestra solución e implementarla para que A la vea; lo mismo sucede con los métodos, esto ya lo hará automáticamente si le damos a generar solución, pero en caso de no querer generarla toda tenemos la posibilidad de compilar los métodos creados al habilitarse una nueva función en el menú de visual.


 
El siguiente paso será probar un método pasándole unos parámetros por defecto.

Para este fin he modificado un poco el informe añadiendo algunas columnas como el importe de venta y los impuestos.


 He creado una columna llamado total con una expresión a la cual le indicaremos que el total es la suma del precio de venta + los impuestos.
 
 
Al crear una celda nueva y sobretodo si escribimos una expresión, en vez de seleccionar un campo directamente, será asegurarse de que tipo será el campo a devolver, esto lo podemos hacer mediante las propiedades de la celda.
 
 
Hemos creado una columna con una expresión que nos devuelve el importe total ahora haremos lo mismo con un método.

Para ello crearemos un método llamado total.

 
Una vez creado el método si compilamos podremos ver aparte del nombre del método los parámetros necesarios para éste.
 
 
En el método escribiremos lo que sigue:


En él podemos ver que le pasamos por parámetros dos valores de tipo double y nos devuelve un double que es la suma de estos dos valores.

¿Como llamaremos a este método desde el diseño?

Para llamarlo me he creado otra columna llamada Total método que nos devolverá el resultado de ese método.

 
Efectivamente le indicaremos el nombre del método y le indicaremos los dos parámetros que necesita el método.
 
 
 
Al final tenemos nuestro informe con tres columnas que nos devuelven el importe de la factura, la primera de las tres obtiene el valor del campo invoiceAmout de nuestra tabla temporal que ha sido calculado mediante las clases data provider, el segundo lo obtiene de una expresióin puesta en la celda y el tercero de un método creado en el informe.
 
¿ Cual es la mejor opción? Por supuesto la que sea más fácil y haga que el informe sea más fluido así que lo que yo haría sería intentar siempre meter todos los campos que pudiera en la tabla temporal para luego mostrarlos en el informe, incluso si son campos calculados.
 
Voy a mostrar un último ejemplo con métodos para mostrar cosas que se pueden hacer.
 
He creado otro método en el nodo Data Methods del informe llamado Name.
 
En mi informe he creado una nueva columna que será el nombre del cliente.
La expresión del cual llamará a nuestro nuevo método, al que le pasaremos el nombre y éste no lo devolverá en mayúsculas.
 
 
 
Con todo esto espero que se entienda las diferencias entre métodos y expresiones y como utilizarlos.
 
Diferencia entre Expresiones y Data Method.
 
Las expresiones son utilizadas para escribir lógicas simples y están limitadas en el número de líneas 
en que pueden ser utilizadas, no son reutilizables y no hay posibilidad de incluir cualquier referencia externa del .NET.
 
Un método supera estas desventajas, los datos se pueden llamar desde expresiones y ofrecen la flexibilidad necesaria para incluir referencias externa, pueden escribirse cálculos mayores, y el compilador detecta errores con mayor detalle.

Comentarios