Aprende a usar componentes de búsqueda II

Al tener un solo componente podemos lanzar la búsqueda tanto en primer plano como en tercer plano ya que la diferencia de velocidad de carga de los registros es casi inapreciable. Pero ¿y si tenemos más de un componente por el que buscar? En este caso si o si tendremos que lanzar la búsqueda en tercer plano

¿Sabes el motivo? Sigue leyendo si quieres averiguarlo…

En el artículo anterior “Aprende a usar componente de búsqueda” vimos cómo podíamos condicionar componentes de búsqueda y lanzar ésta de una forma sencilla.

APRENDE A USAR COMPONENTES DE BÚSQUEDA II

¿Por qué mis búsquedas van lentas en primer plano?

Cuando comenzamos nuestros desarrollos con Velneo V7 normalmente las búsquedas las montamos como en el ejemplo del artículo anterior y si queremos buscar por otros campos… montamos otra búsqueda.

Además solemos programar en local porque es más rápido a la hora de probar, porque las comunicaciones son malas, porque los datos mejor en mi equipo que en la nube, porque… etc.. etc.. etc.. (mira, esto me ha dado una idea para otro post… ¿Por qué tenemos que programar en cloud?).

Bajo estas circunstancias, búsquedas con un solo componente y trabajando en local, da igual lanzar las búsquedas en primer o tercer plano.

El problema viene cuando a la búsqueda inicial le añadimos mas componentes y tú sigues ejecutando en local.

Te funcionará igual de bien, bueno un poco mas lento.. pero funcionará.

La lentitud en mostrar los registros aparecerá cuando esa aplicación la pongas en cloud o en un vServer fuera de tu máquina y te conectes a él y suele aparecer, generalmente, cuando lo instales en el cliente final… ¡gracias Murphy por tus valiosas enseñanzas!.

La razón es muy sencilla:

Si tenemos una búsqueda con tres componentes (y la lanzamos en primer plano):

  • Se lanza el primer componente y el vServer devuelve los registros que ha encontrado al cliente.
  • Se lanza el segundo componente y el vServer vuelve a devolver los registros que ha encontrado.
  • En el cliente se produce la “mezcla” de ambos componentes (cruzar, añadir o quitar los registros).
  • Multiplica esto por los n componentes que tengas en la búsqueda.

 

Entonces… ¿cuál es la solución para este problema?

Lanzar las búsquedas en tercer plano

  • Se lanza la búsqueda para ser ejecutada en el vServer.
  • En el vServer se resuelven las distintas “mezclas” de componentes.
  • El vServer devuelve la lista ya filtrada al cliente, que sólo se tendrá que encargar de mostrarla.

Pues ya tienes la solución, ¿a qué estás esperando para aplicarla?

Esto…. ahora tengo otro ploblema por mas que quiero lanzar la búsqueda en tercer plano, el velneo este no me deja, me dice que “No aplicable”

Vale… vamos a resolver también este problema.

Pasos para lanzar las búsqueda en tercer plano

Para el ejemplo que vamos a desarrollar, vamos a partir de un búsqueda similar a la del post anterior a la que le vamos a incluir un nuevo componente.

Si no incluimos ninguna palabra en la caja de búsqueda, nos devolverá todos los registros de la tabla. Si incluimos alguna, devolverá los registros que tengan esa palabra y además vamos a poder seleccionar un “Estado” en los registros:

Com_Bus_Men_II

Creando la búsqueda

En la tabla, hemos añadido un campo “Estado” enlazado con una tabla estática de estados. Esta tabla tiene los siguientes items:

Com_Bus_Tab_Est_II

Además hemos creado en la tabla un índice de tipo “Acepta repetidas” por este campo.

En la búsqueda, hemos creado una nueva variable local “Estado” de tipo alfabético. A esta variable le asignaremos el valor seleccionado por el usuario en el formulario de búsqueda. Los posibles valores son:

  • A: Abierto
  • C: Cerrado
  • E: En espera
  • T: Todos

Además le hemos añadido un nuevo componente por este índice “Estado” y lo hemos condicionado a que la variable “Estado” sea distinta de “T” (si el usuario ha seleccionado “Todos los registros” en el formulario, no hará falta lanzar este componente).

Com_Bus_Comp_II

Creando el proceso necesario para lanzar la búsqueda en tercer plano

Como os he comentado al principio del artículo, una búsqueda NUNCA la podremos lanzar en tercer plano por sí sola.

Si queremos lanzar una búsqueda en tercer plano, tendremos que crear un “Manejador de objeto” de dicha búsqueda en un proceso, que será el que lanzaremos en tercer plano.

Este proceso “intermedio” recibirá las distintas variables desde el formulario de búsqueda y se las pasará a la búsqueda por medio de la instrucción “Set variable local de objeto”

Por lo tanto tendremos que crear en el proceso tantas variables como espera recibir la búsqueda.

¡No os olvidéis de crearlas del mismo tipo!

Este proceso será, en este caso, sin origen y con destino la lista de los registros que queramos devolver.

Com_Bus_Pro_II

¿Desde dónde lanzamos el proceso en tercer plano?

En este caso llamaremos al proceso en tercer plano (recordad que será el que lance la búsqueda en el vServer) desde un “Manejador de evento” del formulario principal (el que actúa a modo de menú).

Previamente en este formulario también tendremos que crear una variable para “pasarle” al proceso el valor del “Estado” que queremos buscar.

Este es el código del “Manejador de evento” llamado “Refrescar”:

ref_com_bus

  • 1.- Creamos una cesta local de la tabla en la que estamos realizando la búsqueda
  • 2.- Creamos el manejador de objeto del proceso que hemos creado anteriormente
  • 3.- Le pasamos al proceso las variables introducidas en el formulario
  • 4.- Disparamos el objeto… EN TERCER PLANO
  • 5.- Los registros devueltos por la búsqueda los guardamos en la cesta
  • 6.- Procesamos la lista que tenemos en pantalla
  • 7.- Le pasamos a la lista los registros guardados en la cesta

Con este montaje ya tendremos perfectamente optimizada la búsqueda de registros en tercer plano.

Sólo nos faltará crear unos cuantos controles de tipo “Botón de radio” en el formulario principal, en la propiedad “Contenido” le asignaremos la variable “Estado” y en la propiedad “Valor” indicarle los distintos valores de la tabla estática.

Si te ha parecido interesante este artículo puedes dejarme un comentario mas abajo.

 

Francisco José Vila Martín
ayudavelneo@ayudavelneo.com

Francisco José Vila es autor del blog Ayudavelneo desde donde ayuda a desarrolladores que se están iniciando en Velneo a acortar su curva de aprendizaje para que obtengan beneficios y sean rentables desde el minuto 1. Además es programador certificado y formador en la plataforma de desarrollo de aplicaciones empresariales Velneo V7. Ampliar información

2 Comments
  • Walter
    Posted at 17:11h, 27 abril Responder

    Buen dia. No entiendo a partir de esta punto. ¿Qué es “LST” ?
    Otra pregunta… ¿Dónde se definen la búsqueda y el Proceso para un mejor rendimiento? ¿en el Proyecto de aplicación o mejor en el proyecto de datos?

    • Francisco José Vila Martín
      Posted at 17:22h, 27 abril Responder

      Hola Walter:
      LST es el identificador de la vista de datos a la que voy a devolver los registros. Por eso utilizo la instrucción “Interfaz: Procesar (LST, Todas)”

      Después corto la lista para asegurarme de que no hay ningún registro en dicha vista de datos y con la instrucción “Cesta: Agregar a la lista en curso” paso los registros obtenidos en la búsqueda a la vista de datos del formulario para visualizarlos.

      Espero que ahora esté mas claro.

      Un saludo y gracias por pasarte por mi blog

Post A Comment

Pin It on Pinterest