El documento describe las funciones y mejoras del objeto Query en Genexus, el cual permite crear consultas sobre bases de datos de aplicaciones para mejorar la extracción de información. Explica que Query permite refrescar consultas automáticamente, agregar interacción con el usuario a través de eventos de PivotTable, y personalizar salidas avanzadas a través de propiedades como Subtotals y CanDragToPages. El documento concluye resumiendo estas tres características principales: AutorefreshGroup, PivotTableEvents y AdvancedCustomizations.
4. ¿Para qué sirve? Crear consultas sobre la base de datos de la aplicación. Mejorar el valor de la información extraída de bases de datos. Mecanismo fácil de definir y de poner a disposición en la aplicación.
11. Refrescar consultas Quiero refrescar mis consultas a partir de las modificaciones que realizo en mi consulta principal. ¿Cómo puedo hacer? AutorefreshGroup
27. Cierre Conferencias relacionadas Una nueva forma de hacer consultas dinámicas con GXplorer– Gustavo Martínez - Sala 2A, 11:00 hs. Como Implementar un Data Warehousede manera paulatina - Enrique Iglesias, Credimas – Sala 2A, 11:45 hs. Federico Salomón - GeneXusSupportTeamfsalomon@genexus.com
…crear consultas sobre la base de datos de la aplicación en base a la estructura que se define en el mismo.Además, el valor de la información extraída de la BD es mejor ya que al generarse la consulta automáticamente la misma está optimizada.Es un mecanismo fácil de definir y de poner a disposición en nuestras aplicaciones.La creación de un nuevo objeto Query es similar a la de cualquier otro objeto GeneXus, new Object desde el menú o Ctrl + NEl objeto Query tiene tres secciones…
Estructura: es la sección donde definimos nuestra consulta (elementos, filtros, parámetros, etc.)En la consulta que se ve en pantalla lo que se hace es mostrar por cada país la cantidad de goles a favor que tuvo en la Copa América 2011.Para los ejemplos que les voy a mostrar durante la presentación se utilizó la KB de la Copa América (de la cual Uruguay es flamante campeón).Esta KB posee registro de jugadores, de estadios, de grupos y de cada uno de los partidos que se realizaron en la copa.
SQL Statement: permite visualizar la sentencia SQL que se genera en base a la definición de la consulta.Útil en los casos en los que se quiere chequear que se esté yendo sobre la tabla correcta, por ejemplo.
Preview: permite visualizar la consulta en diseño tal como se vería en ejecución.Esto tiene como beneficio que no tengo que ejecutar la aplicación para ver cómo quedó la salida de mi consulta, sino que puedo verla directamente en tiempo de diseño.¿Cómo utilizamos el objeto Query?, ¿cómo lo integramos a nuestra aplicación?...
Simple, mediante el User Control QueryViewer, que se distribuye como control estándar en GeneXus. El UC define cómo mostrar los datos obtenidos mediante la consulta definida (declarativamente mediante propiedades o programáticamente en runtime).Al arrastrar este control a un web panel, automáticamente se importan en la KB las dependencias necesarias (SDTs, dominios, etc.).También en la sección Events se genera un código de ejemplo para el seteo de parámetros de la consulta, y personalización de los QueryElements (atts. definidos en la estructura del control).Las dos propiedades más importantes del control son:Object: es la que me permite hacer el binding (enganche) con mi objeto Query.Type: define el tipo de salida que quiero darle a los datos objetidos mediante el Query.
Estos son los tres tipos de salida que tiene el control, esta es la misma consulta con las tres salidas diferentes seteadas.La diferencia entre la Table y la PivotTable es que la segunda es una tabla dinámica, es decir que me permite pivotear datos.
Supongamos esta situación: tengo varias consultas en mi pantalla con diferentes salidas, pero quiero que estas consultas se actualicen en base a los filtros que aplico. Basándonos en esta misma KB que les conté, supongamos este caso, quiero poder refrescar las consultas que tengo en mi panel cuando filtro los países, cuando me quedo con determinados países del total que tengo... ¿cómo hago?.A partir de Ev1 U6, podemos realizar esto fácilmente mediante la propiedad Autorefresh Group.
¿Qué es Autorefresh Group?Es la funcionalidad que permite refrescar diferentes controles QueryViewer en base al valor que se setea a esta propiedad.Esta propiedad permite refrescar diferentes controles (que pueden tener cualquier salida) dependiendo de las modificaciones que se realizan en la salida de un control que tenga como tipo de salidaPivotTable).¿Cómo funciona?Básicamente, los controles deben estar en el mismo grupo, es decir que en la propiedad de los controles del Web Panel que se desean refrescar debe estar seteado el mismo valor, por ejemplo: "group1". CasosPara el uso de esta propiedad podemos identificar dos casos puntuales:- Controles que tienen el mismo objeto Query en el binding (control "padre" y controles "hijos" con el mismo Queryseteado).- Controles padre e hijo donde el objeto Queryseteadosea diferente. Para este caso es necesario que el Query con el que se cargan los controles hijos reciba como parámetro el QueryElement (atributo) por el cual desea filtrarse la información.
Explicar qué consultas utilizo y para qué sirven.Explicar lo que se está haciendo en el video.
Bien, ahora analicemos este caso: tengo consultas funcionando correctamente pero quiero tener más interacción con la misma (quiero poder hacer algo más que pivotear datos y cambiar los filtros) para realizar otras variantes, por ejemplo un Drill Down.Haciendo referencia al ejemplo que les mostré en el video anterior, si yo quisiese ver el detalle del total de goles que hizo Uruguay, o sea en qué partidos y contra qué rival se hicieron los goles de Uruguay.¿Puedo hacer esto?También en Ev1 U6 tenemos disponibles eventos en la PivotTable para aumentar la interacción del control con el usuario.
Este es un ejemplo de cómo implementar el evento DragAndDrop.QueryViewer1 es el nombre del control al cual quiero definir el evento. Lo que se hace aquí es mostrar un mensaje en pantalla con el nombre del elemento en el que aplica el evento y el eje al que se movió.Como pueden ver la programación resulta simple, luego ustedes decidirán qué quieren lograr y con qué evento hacerlo.
El segundo punto a considerar es evitar que se arrastren ciertos campos al eje de las páginas. ¿Por qué quiero esto? – Porque tengo cierto formato predefinido en mi consulta que no quiero modificar.Otro caso: supongamos que tengo una consulta que tiene un campo Moneda y otro Monto y tengo varios tipos de moneda ingresados. Si yo arrastrase el campo Moneda hacia el eje de las páginas se aplicaría un sum sobre el campo y por lo tanto se estarían sumando montos de monedas diferentes, cosa que no es correcta.Para resolver el segundo punto, se presenta la propiedad CanDragToPages (también disponible a partir de U6)…
Por último, como sé que el Query me ofrece la posibilidad de exportar los datos obtenidos en mi consulta a diferentes formatos (xls, html, pdf, xml), me gustaría poder definir un cabezal (configurable desde el mismo control y no por fuera) para estos archivos exportados.Aquí es donde se presenta la propiedad ExportHeader.
Explicar el video.
Bueno, para ir finalizando vamos a ver las funcionalidades que tenemos en el Query a partir de Ev1 U6 para darle esa potencia y valor a nuestra aplicación.ARG para refrescar consultas en base a los cambios realizados en la PivotTable de nuestro panel.Eventos para interactuar más con el control.AdvancedCustomizations para mejorar la salida de la información obtenida mediante el Query.
Para cerrar, agradecerles primero a ustedes por venir e invitarlos a que se animen a hacer cosas con el objeto Query, a probar estas nuevas features y a experimentar con ellas.Les dejo aquí una conferencia interesante que les aconsejo escuchar si quieren crear consultas dinámicas para sus aplicaciones. El orador es Gustavo Martínez y es a continuación de esta.También los invito a presenciar la de Enrique Iglesias sobre implementación de DataWarehouses.En pantalla está mi nombre y mi correo, quedo abierto a cualquier consulta, sugerencia o problema que puedan llegar a tener, con gusto los voy a ayudar.Sin más, agradezco nuevamente, muchas gracias!