¿Cómo accedo a la Lista o Ficha de cualquier Vista de datos de mi Aplicación?

Una de las tareas que inicialmente más me costó asimilar fue cómo se podía acceder a los registros de un objeto Vista de datos.

Sigue leyendo para averiguar el porqué.

Cuando uno descubre Velneo, viniendo de un entorno de programación totalmente diferente, debe asumir que va a tener que aprender un nuevo paradigma de programación y esto conlleva algunas dificultades para entender algunos aspectos esenciales del nuevo lenguaje.

vista de datos

 

Como ya sabemos un objeto Vista de datos es un objeto del Proyecto de aplicación que nos permite mostrar en el Interfaz un conjunto de registros de una tabla del Proyecto de datos.

En Velneo se denomina Lista al conjunto de registros y Ficha a un solo registro.

Primero me hice una serie de preguntas en lo que respecta al acceso y gestión de las Listas y Fichas que están contenidas en los objetos gráficos de la Aplicación.

Respondiendo a estas preguntas entenderemos el mecanismo de Velneo y quedará resuelto el problema planteado.

1ª ¿Dónde puedo colocar el objeto Vista de datos en el Interfaz de mi Aplicación?

Los objetos de Vista de datos normalmente irán insertados en un formulario a través de un control de tipo Vista de datos.

También podemos colocar un objeto Vista de datos en un formulario de un Dock del objeto autoexec.

Las Cestas globales también contienen una Lista que podemos mostrar como una Rejilla en un Dock del autoexec.

2ª ¿Desde dónde puedo acceder a la Lista o Ficha de una determinada Vista de datos?

Si no usamos el API, en Velneo solo tenemos acceso a los controles de un formulario desde los manejadores de evento del propio formulario.

Desde un proceso solo tenemos acceso a los controles de objeto autoexec.

3ª ¿Qué comando o comandos me permiten dicho acceso?

En Velneo se entiende por Procesar como la acción de acceder a la Lista o Ficha de la Vista de datos.

Disponemos del comando Interfaz:Procesar que, tal como dice la ayuda, permite acceder a los datos de un control de tipo objeto usado en un formulario o en cualquiera de los subformularios del mismo.

En un control de tipo objeto podremos presentar una ficha o una lista de registros de una tabla.

Mediante este comando podremos acceder a los datos de dicho control e interactuar con ellos, ya sea para leerlos, modificarlos, borrarlos, etc.

En un proceso usaremos este comando para acceder a los objetos Vista de datos de un Dock del autoexec.

Para procesar la Lista de una Cesta global disponemos del comando Cesta:Procesar.

4ª ¿Tiene algo que ver esto con los conceptos de Origen y Destino de los procesos en Velneo?

Por supuesto, si entendemos los conceptos de Origen y Destino, entenderemos porqué necesitamos el comando Procesar.

Cuando ejecutamos el comando Interfaz:Procesar o Cesta:Procesar se crea un nuevo subproceso dentro del manejador de evento o proceso actual. El subproceso cambiará el Origen a la Ficha o la Lista de la Vista de datos que hayamos seleccionado y de esa forma tenemos acceso inmediato.

Cuando finaliza el subproceso, se vuelve a recuperar el Origen que había antes de ejecutar el comando Procesar.

 

Para resumir:

  • En Velneo programamos mediante manejadores de evento y procesos cuyo Origen determina a qué Lista o Ficha tenemos acceso.
  • El comando Procesar crea un nuevo proceso (en realidad es un subproceso) que cambia el Origen a la Lista o Ficha de la Vista de datos.
  • La única condición a tener en cuenta es que la Vista de datos sea accesible desde el manejador de evento o proceso.

 

Una vez entendido cómo funciona el comando Procesar, nos daremos cuenta de la gran potencia de esta forma de programar.

¿Alguna duda en la sala sobre la vista de datos y el comando procesar?

Si es así, cuéntamela dejándome un comentario mas abajo.

La entrada ¿Cómo accedo a la Lista o Ficha de cualquier Vista de datos de mi Aplicación? aparece primero en AyudaVelneo.

Sabías que … (3)

Vamos con una nueva entrega de nuestro mítico juego… “Sabías que” en este post veremos curiosidades sobre búsquedas, cestas y listas.

Por si te perdiste las dos primeras entregas del “juego”, no está de mas recordarlas:

¿Sabías que..?

En los objetos Búsqueda no sabemos a priori el campo por el que va a estar ordenada la lista de salida

    • Aunque esto ya está documentado en la ayuda, no está de más recordarlo. Para ordenar la salida de un objeto Búsqueda tendremos que usar siempre un comando Ordenar lista.
    • En procesos, funciones o manejadores de evento que disparen búsquedas, usaremos el comando Ordenar lista, en acciones que disparen búsquedas, incluiremos entre la Búsqueda y el objeto de lista de la salida un proceso, con origen y destino lista de la tabla de la búsqueda, que ordene y añada la lista a la salida, .

Las Cestas pierden la ordenación que tuviera establecida la Lista Origen

    • Si ordenamos la Lista de salida de una Búsqueda y la copiamos a una Cesta para poder volcarla a una Rejilla, entonces perderemos el orden establecido.
    • Por lo tanto, el comando Ordenar lista deberá ejecutarse después de copiar la Cesta a la Rejilla. Veamos un ejemplo:
Rem ( Ejecución de una Búsqueda para alimentar la Rejilla del formulario )
Rem ( Utilizamos la Cesta como bufer intermedio para rellenar la Rejilla con el resultado de la Búsqueda )
Cesta: Crear cesta local ( MI_BUSQUEDA@MiApp_app, oCesta )
Crear manejador de objeto ( oBuscar, Proceso PRO_BUSCAR@MiApp_app )
Libre
Set variable local de objeto ( oBuscar, DFECHA_INI, DFECHA_DES_INI )
Set variable local de objeto ( oBuscar, DFECHA_FIN, DFECHA_DES_FIN )
Libre
Disparar objeto ( oBuscar, 3º plano: Servidor (síncrono), )
   Set ( NNUM_REGISTROS, sysListSize )
   Rem ( ¡OJO! La Cesta pierde la ordenación que tuviera establecida la Lista Origen )
   Cesta: Agregar lista a la cesta ( oCesta )
Interfaz: Procesar ( GRD_DOCUMENTOS, Todas )
   Cortar lista ( 0, )
   Cesta: Agregar a la lista en curso ( oCesta )
   Rem ( Tenemos que ordenar la lista obtenida después de pasar por la Cesta porque ésta deshace la ordenación )
   Ordenar lista ( #F_REGISTRO, #ID, , , , )
   Invertir lista
   Seleccionar ficha por posición ( 1 )
Interfaz: Establecer foco ( GRD_DOCUMENTOS )

El comando “Modificar ficha de maestro” FUERZA EL refresco DE los campos DEL MAESTRO

    • En los controles del formulario, después de haber modificado la ficha del Maestro desde un proceso independiente, los campos de dicho maestro no refrescan los cambios porque el puntero a maestro no ha cambiado.
    • Para forzar la lectura de la ficha del maestro desde el servidor y actualizar la caché es suficiente con ejecutar el comando Modificar ficha de maestro desde un manejador de evento.
    • Este comando produce un refresco en el formulario de todos los campos del maestro.

El ancho y alto mínimos de los controles Caja de texto vienen determinados por la clase VMainWindow y las propiedades CSS min-weight y min-height

    • Si has fijado a un valor determinado las propiedades CSS min-weight y min-height de la clase VMainWindow comprobarás que los controles Cajas de texto de los formularios en modo Vista también se verán afectados.

El comando Set dato de retorno no funciona en los procesos, aunque hay una excepción

    • En los procesos que van a ser usados desde la web (con VModApache) la forma de devolver el dato al servicio de Apache es mediante el comando Set dato de retorno.
    • Esto ocurre cuando el Estilo del proceso lo fijamos a “Accesible Web“.

La propiedad Valor del control Botón de radio debemos expresarla como una Constante

    • El control Botón de radio tiene la propiedad Contenido (expresión de fórmula) y la propiedad Valor (valor constante).
    • Por lo tanto, si el contenido es numérico pondremos Valor = 9 y si es de tipo carácter pondremos Valor = A, sin las comillas.

La función HomePath() en Cloud nos permite crear directorios en tercer plano

    • Crear directorio” es un comando de Velneo que actúa a nivel de sistema operativo. Por esa razón en Cloud tenemos que acceder con al ruta completa homePath() + “/Velneo/datos/<<archivo.ext>>” que es la ruta del sistema Linux en el vServer.
    • SDV: Subir fichero al servidor” es un comando de Velneo de tipo Cliente/Servidor, por lo tanto la ruta donde guardamos el fichero es una ruta Virtual. Esa ruta Virtual se define en vAdmin en la opción de menú Datos. Por defecto disponemos de la ruta Virtual “datos/” que equivale a la ruta física homePath() + “/Velneo/datos/ en el vServer.

Si cruzamos 2 listas del mismo tamaño el resultado se ordena igual que la lista cargada en primer lugar

    • Ya sabemos que cuando cruzamos 2 listas, la lista resultante tendrá el mismo orden que la lista de mayor tamaño
    • Cuando cruzamos 2 listas, si éstas tienen el mismo tamaño, el orden de la lista resultante es el mismo que la lista que hayamos cargado primero

Por ejemplo:  Cargo la Lista1 y se añade a la Cesta1. Cargo nuevamente la Lista1 con el mismo número de registros pero en distinto orden y cruzo la Cesta1 con la Lista1.
El orden que prevalece es el de la Cesta1.

Podemos usar el selector CSS CLASE[objectName|=valor] para filtrar los controles de nuestra aplicación

    • Cuando queremos aplicar un determinado CSS a un objeto concreto de nuestra aplicación usamos el selector CLASE#IDENTIFICADOR
    • Sin embargo, podemos usar también un Selector que nos aporta una gran flexibilidad, es el selector CLASE[objectName|=<valor>] que funciona seleccionando los controles cuya propiedad Identificador comienza con <valor>.
      Veamos un ejemplo:

Queremos que el usuario identifique visualmente los campos obligatorios dentro de los formularios. Para ello usaremos un fondo amarillo brillante.
La selección en el CSS será QDoubleSpinBox[objectName|=NUM_O_], QDateEdit[objectName|=DAT_O_], QDateTimeEdit[objectName|=DAT_O_], QTimeEdit[objectName|=TIM_O_], QLineEdit[objectName|=TXT_O_] {background: yellow;}

De esta forma es suficiente con cambiar el Identificador de un control para que tenga fondo amarillo, sin tocar el CSS de la aplicación.

Otros ejemplos:

QPushButton:flat[objectName|=CMD_IMP_] {background-color: orange;}    /* Botones naranjas */
QLabel[objectName|=LBL_AZUL_] {color: SteelBlue;}                     /* Etiquetas azules */

Y ahora confiesa… ¿cuántas sabías? 

Déjame un comentario mas abajo y comenzamos el debate.

 

La entrada Sabías que … (3) aparece primero en AyudaVelneo.

Vista de datos: el poder de Velneo al alcance de tus listas

Velneo se define como “Plataforma de desarrollo de aplicaciones empresariales”. Al final el usuario quiere ver datos. Estos datos se muestran a través de listas de registros… y aquí es donde se muestra el poder de nuestro control vista de datos.

Vista de datos listas al alcance de tu mano

En post anteriores vimos como podíamos utilizar el control “vista de datos” para mostrar registros dentro de un menú o cómo optimizar la carga de registros en una vista de datos.

Hoy nos vamos a centrar en el propio control “vista de datos”.

Según la definición de Velneo, la vista de datos es un:

Control de Contenedores que permite incluir dentro de un formulario una acción, desde la que podremos disparar objetos de vista de datos, como por ejemplo, rejilla, formulario, multivista, etc.

 En esta definición aparecen dos de los conceptos fundamentales de Velneo:

  • Concepto de flujo (ya vimos este concepto aquí).
  • Concepto de abstracción o diferenciar el qué del cómo es decir, qué queremos mostrar (lista de registros) de cómo lo queremos mostrar (rejilla, formulario multivista, etc).

Vamos a ver como se aplican estos conceptos.

Crear la vista de datos en nuestro formulario

Hemos visto anteriormente, en la definición de la vista de datos, que éste es un control de los que podemos incluir dentro de un formulario.

Antes de crear los objetos necesarios para mostrar los registros, también deberemos tener en cuenta el flujo. Como ya sabemos, un formulario puede pertenecer a una tabla o ser un formulario sin origen. Por lo tanto deberemos tener en cuenta dónde nos encontramos y qué queremos mostrar.

Generalmente necesitaremos dos objetos para mostrar los registros en nuestra vista de datos:

Control vista de datos

  • En la propiedad “Objeto 1” indicaremos qué queremos mostrar (en este caso los registros que devuelve una búsqueda), por lo tanto una lista de registros: n registros, 1 o ninguno, dependiendo de la búsqueda.
  • En la propiedad “Objeto 2” le indicaremos cómo queremos mostrar esos registros. En este caso al ser la salida del “Objeto 1” una lista de registros, podemos seleccionar cualquier objeto de tipo lista de la tabla a la que hace referencia la búsqueda de dicho objeto.

Esta sería la manera mas sencilla de mostrar los registros de una tabla en una vista de datos… pero Velneo tiene sus peculiaridades.

Consejos antes de crear la vista de datos en nuestro formulario

Algunos consejos antes de crear vistas de datos a lo loco.

  • Si tu aplicación va a ser heredada por otras, nunca vas a saber donde se van a utilizar tus formularios… por lo tanto cuidado con la carga de registros.
  • Velneo carga todos los objetos incluidos en un formulario al crearlo. Es decir si tienes un formulario en el que muestras la ficha de un cliente y en ese formulario tienes un separador de pestañas en el que tienes los plurales de pedidos, albaranes y facturas de dicho cliente… todos esos datos, se cargarán al entrar en la ficha… por lo tanto cuidado con la carga de registros.
  • Si tienes un formulario sin origen que actúa como menú y en dicho formulario cargas n vistas de datos con miles de registros y cada una de ellas se resuelve con una búsqueda de varios componentes, también se cargarán todos los registros al entrar al formulario… por lo tanto cuidado con la carga de registros.
  • Siempre hemos dicho que las búsquedas (o procesos que cargan búsquedas), mejor resolverlas en tercer plano (es decir, en el servidor). Hay una salvedad. Si la búsqueda en cuestión es por un único componente, no vamos a notar diferencia de carga entre lanzarla en primer plano o lanzarla en tercer plano. Para todos los demás casos hay que lanzarlas siempre en el servidor.
  • Siempre que podamos utilizaremos la señal “on-show” del formulario para cargar los registros en la vista de datos mediante un manejador de evento.

Espero que con estos simples consejos no tengáis ningún retardo a la hora de mostrar los registros al usuario.

Utilización del control vista de datos a través de ejemplos prácticos

Particularmente siempre he tenido una “guerra” con los usuarios de mis aplicaciones a la hora de mostrar los registros de un determinado módulo. Están (mal)acostumbrados a que a la hora de entrar, por ejemplo en el módulo de clientes (sirve cualquier otro módulo que se te ocurra) a ver la lista de TODOS los clientes…

  • Si no ven la rejilla con datos… parece que no hay datos.
  • Si al final vas a seleccionar uno en concreto… ¿para que mostrar todos?
  • ¿no será mejor que selecciones primero el rango de los que quieran visualizar?

Como los caminos del Señor son infinitos, vamos a ver varios ejemplos con estas casuísticas.

1.- Mostrar en la vista de datos todos los registros de una tabla al entrar en el formulario que hace de menú.

Lo mas sencillo es hacerlo de la siguiente manera:

Hemos creado un proceso sin origen (ya que el formulario era sin origen) y con destino la lista de la tabla que queremos mostrar en la vista de datos.

Las instrucciones que tenemos en el proceso son:

  • Cargar lista de la tabla por el índice que mas nos interese
  • Añadir lista a la salida (el siguiente objeto en el flujo, recogerá la lista devuelta por el proceso).

Lo único que tendremos que hacer ahora es crear la vista de datos. Como “Objeto 1” pondremos este proceso, y como “Objeto 2” cualquiera de los de tipo lista de la tabla asociada. En este caso “Tareas”

2.- No mostrar en la vista de datos ningún registro de una tabla al entrar en el formulario que hace de menú.

Mi opción preferida… sólo mostramos registros cuando el usuario los seleccione.

En este caso, el proceso no vamos a necesitar igualmente… en el flujo, el “Objeto 2” de la vista de datos tiene que saber que mostrar. La única diferencia es que el proceso asociado no tendrá ninguna línea.

Vista de datos, sin datos

 

Parece increible pero si,  en velneo tenemos procesos que no hacen absolutamente nada… por lo menos aparentemente.

De esta forma, al entrar en el menú no aparecerá ningún registros y será al pulsar sobre un botón cuando se lance la búsqueda que devolverá los registros a la vista de datos.

Tienes el ejemplo completo aquí.

3.- Mostrar en un subformulario de una ficha, un plural (sin optimizar)

En esta caso, ya vamos a estar situados en una ficha, por lo tanto tenemos que tener cuidado con el flujo a la hora de crear los objetos asociados a la vista de datos.

Vista de datos con origen ficha

El montaje es similar a los casos anteriores.

Si recordáis, en uno de los consejos que hemos visto antes os decía que Velneo carga todos los objetos al entrar en este formulario. Por lo tanto los registros que existan en el plural “Desglose de horas” también se cargarán al entrar en la ficha… si tuviésemos 10 plurales mas (sin optimizar) también se cargarían y dependiendo del número de registros que tengamos en cada uno de ellos, es probable que la visualización de la ficha en cuestión se retarde… Y puede además que el usuario sólo quiera ver las “Horas presupuestadas”.

En este caso, lo más sencillo es esto:

Vista de datos de un plural sin optimizar

 

Lo primero es declarar el flujo del proceso, es decir de un origen ficha (de la tabla en la que nos encontremos) queremos mostrar una lista de la tabla destino.

La instrucción para conseguir esto en el proceso es:

  • Cargar el plural que nos interese de la ficha
  • Añadir lista a la salida (invertir lista es para que aparezcan los registros mas recientes al principio de la lista).

Este proceso será el “Objeto 1” de nuestra vista de datos y como “Objeto 2” podremos seleccionar cualquiera de tipo lista del plural en cuestión.

4.- Mostrar en un subformulario de una ficha, un plural (optimizado)

Vamos a realizar algún pequeño cambio para que este montaje esté optimizado y solamente se carguen los plurales al entrar en la pestaña en cuestión.

Vista de datos plural sin datos

 

El flujo del proceso será el mismo… sólo que no le incluiremos ninguna instrucción. De esta forma al entrar en la ficha no se cargará el plural correspondiente.

Ahora tendremos que conseguir que al entrar en la pestaña del plural se carguen en la vista de datos los registros existentes.

Para ello crearemos un “Manejador de evento” en el formulario con las siguientes instrucciones:

Manejador vista de datos

Crearemos una cesta local de la tabla plural que hará de “puente” entre los registros que devuelva el plural y nuestra vista de datos (los registros encontrados se guardarán en dicha cesta).

Con la instrucción “Interfaz: Procesar” accederemos a nuestra vista de datos añadiéndole los registros devueltos por el plural y guardados temporalmente en nuestra cesta con la instrucción “Cesta: Agregar a la lista en curso”.

Sólo nos faltará crear una “Conexión de evento” en el formulario con la señal “On-show” y disparar el manejador que acabamos de crear.

Con este montaje sólo se cargaran los datos de los distintos plurales al acceder a cada una de las pestañas.

 

Espero que a partir de ahora el control vista de datos ya no tenga ningún secreto para ti.

En un próximo artículo veremos todas las instrucciones de proceso que podemos utilizar con este control.

 

¿Alguna duda con respecto al control vista de datos? Si es así, déjame tu pregunta mas abajo en los comentarios.

La entrada Vista de datos: el poder de Velneo al alcance de tus listas aparece primero en AyudaVelneo.

¿Sabes utilizar los tipos de índices en Velneo V7?

Sabes que ha llegado el momento de definir y configurar correctamente los índices en Velneo V7 cuando ejecutas tu aplicación y notas que hasta que se cargan los datos, te da tiempo a tomarte un café.

Continuando con la serie que comenzamos con los tipos de tabla y tipos de campo, hoy vamos a continuarla con los tipos de indice que podemos definir en nuestras aplicaciones. Recordad que esta serie sobre la base de datos en Velneo V7 se complementa con el artículo en el que tratamos las actualizaciones y los triggers.

Índices en Velneo V7

¿Qué son y para qué sirven los índices en Velneo V7?

Según la definición de Velneo:

Se trata de una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla. Un índice puede estar compuesto por uno o varios campos, por fórmulas o por una combinación de ellos. A cada uno de estos componentes del índice se le llama parte.

Cómo crear los índices en Velneo V7

Para crear un índice en nuestras tablas, tenemos 3 formas de hacerlo:

  • Desde la toolbar superior de la tabla:
    Toolbar índices en VelneoEn este caso debemos pulsar el icono de la flecha hacia la derecha para crear un nuevo índice o bien seleccionando un campo y pulsando el icono siguiente con la flecha (ahora desactivado), nos creará un índice de dicho campo.
  • Desde el panel de subobjetos: Tendremos que pulsar sobre el icono con el símbolo + e indicar que queremos crear un índice.Panel de subobjetos en tipos de indice en Velneo V7
  • Pulsando el botón derecho del ratón sobre la tabla en cuestión se nos abrirá el menú contextual para poder crear nuevos objetos en dicha tabla.

Identificadores de índices en Velneo V7

A la hora de definir un índice, hay que tener en cuenta una serie de consideraciones con los identificadores:

  • El identificador: identifica de forma unívoca un índice dentro de una tabla. Este identificador lo utilizaremos en fórmulas o en aquellos sitios donde tengamos que resolver un índice.
  • El identificador constará de mayúsculas y números exclusivamente. Al identificar de forma unívoca un campo de una tabla no puede haber duplicidad.
  • Los identificadores ID y NAME son palabras reservadas: El identificador ID referencia el índice que es clave primaria de la tabla e identifica unívocamente cada registro. No debemos alterar este identificador si no queremos perder la funcionalidad implícita, aunque si podemos modificar sus descriptores, la propiedad Nombre (cita de la ayuda de velneo).

Tipos de índices en Velneo V7

El tipo de índice nos va a permitir definir de que forma van a ser indexados los datos en nuestras tablas. Los tipos de índice de que disponemos son:

  • Clave única: Cada registro tendrá un identificador único. Con este tipo de índice, Velneo no va a permitir registros duplicados.
  • Palabras: Velneo va a indexar en el índice las palabras que el usuario introduzca en las partes definidas en el índice. Por razones de optimización y rendimiento, solamente se indexarán los 9 primeros caracteres de cada palabra del campo o campos a indexar.
  • Múltiples claves: El registro es indexado desde cero claves hasta el número que el programador declare en la propiedad “Número de claves“. Los campos a indexar han de ser del mismo tipo y longitud.

    Un ejemplo muy claro para la utilización de este tipo de índice sería: Hemos creado en la tabla de entidades 3 campos para introducir los distintos teléfonos que puede tener dicha entidad (Móvil, Trabajo y Particular). Pondremos como partes del índice estos campos y cuando el usuario introduzca un determinado teléfono, el sistema lo buscará en cualquiera de estos tres campos.

  • Acepta repetidas: La ficha es indexada sólo una vez pero, al contrario que la clave única, se admiten repeticiones.
  • Trozos de palabras: El registro es indexado por cada grupo de 3 ó más caracteres de cada una de las partes que forman la clave.

Partes de índices en Velneo V7

Un índice estará compuesto por una o más partes. Para crear una parte de un índice pulsar el botón Subobjeto parte del índice de la barra de herramientas o abrir el menú “Objetos“, submenú “Nuevo sub-objeto“, opción “Parte índice“.

La propiedad “Modo” nos permitirá establecer de que forma se indexara la parte del índice. Sus posibles valores son:

  • Campo completo: La parte a indexar va a ser un campo y se indexará completo.
  • Campo porción: La parte a indexar va a ser un campo pero va a indexarse solamente una porción del mismo.
  • Fórmula: La parte a indexar va a ser una fórmula definible por el programador.

* NOTA *: Si el modo es Campo porción y el campo es de tipo alfabético ; en esta propiedad podremos hacer una conversión de la parte a una tabla de caracteres inferior.

Ejemplo: un campo de tipo alfa256 indexarlo convertido a alfa 64.

Consideraciones a tener en cuenta con los índices en Velneo V7

Podemos optimizar nuestra base de datos siguiendo una serie de recomendaciones muy sencillas:

  • 1.- Siempre será más óptimo un índice de “Clave única” que un índice de “Acepta repetidas”. Para convertir un índice de tipo “Acepta repetidas” en un índice de “Clave única”, bastará con añadirle el campo ID y cambiarle el tipo.
  • 2.- Los índices menos óptimos son los de tipo “Trozos” y tipo “Palabras”. Lógico. Velneo tiene que indexar todas las palabras de todos los registros para encontrar las palabras o trozos coincidentes.
  • 3.- Podemos mejorar el rendimiento de los índices en Velneo si en lugar de crear un índice por cada campo, agrupamos los campos a buscar en un solo índice. Es decir, si queremos buscar un dato en distintos campos (por ejemplo dentro del campo “Name”, dentro del campo “Descripción” y dentro del campo “Observaciones”) siempre será mas óptimo que creemos un indice con 3 partes (una por cada campo) que 3 índices (uno por cada campo).

Espero que después de aplicar todos estos consejos sobre los tipos de índices en Velneo V7, tus aplicaciones vuelen. Ya sabes que valoro tus opiniones sobre los artículos… puedes dejarla mas abajo en los comentarios.

La entrada ¿Sabes utilizar los tipos de índices en Velneo V7? aparece primero en AyudaVelneo.

¿En el proyecto de datos o en el proyecto de aplicación?

En Velneo V7 hay objetos que podemos crear tanto en el proyecto de aplicación como en el proyecto de datos, y la pregunta que te estarás haciendo es: “¿Dónde es mejor crearlos? ¿Dónde será más óptimo?”. En este post vamos a despejar esas dudas. Antes de enumerar esos objetos comunes a ambos proyectos, vamos con un par de consideraciones previas: 1.- Herencia: Hay que tener presente que mientras un proyecto de aplicación puede heredar, además de otros proyectos de aplicación, uno de datos; un proyecto de datos SÓLO hereda de otros proyectos de datos. 2.- Interacción con el usuario: En el proyecto de datos no podemos poner ningún objeto que pida interacción con el usuario puesto que se lanzará en el vAdmin. De momento no hay ningún estudio, al menos que yo conozca, que diga si es más óptimo crear un determinado objeto en un proyecto o en otro. Objetos disponibles en ambos proyectos Búsqueda Aunque podemos incluirlas en ambos proyectos, yo me decanto por crearlas en el proyecto de aplicación. Normalmente las uso desde manejadores de objeto para poder asignarle valor a las variables que tengo para alimentar los componentes de búsqueda. Hay que tener en cuenta que [...]

El artículo ¿En el proyecto de datos o en el proyecto de aplicación? fue publicado en Ayudavelneo por Francisco José Vila Martín

Aprende a usar componentes de búsqueda II

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. 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… ¿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 [...]

El artículo Aprende a usar componentes de búsqueda II fue publicado en Ayudavelneo por Francisco José Vila Martín

Aprende a usar componentes de búsqueda

En este artículo “Optimiza tus aplicaciones con búsquedas en tercer plano“, Juan Infante me pedía si podía detallar la utilización de los componentes de búsqueda y las búsquedas para cargar los datos en una rejilla… Pues vamos a ello Para empezar… ¿qué es un componente de búsqueda? Un componente de búsqueda es un subobjeto del objeto búsqueda que permite definir tanto el índice o índices por los que se realizará la búsqueda como el modo en el que ésta será realizada. Una vez que tenemos claro qué son los componentes de búsqueda, vamos a aprender a utilizarlos… En la definición del componente hemos visto que es un subobjeto que permite definir el índice por el que se realizará la búsqueda… pues es obvio que previamente tendremos que crear esos índices en la tabla en cuestión. Al crear el componente de búsqueda, tendremos que definir sus propiedades: Identificador: (obligatorio) tendremos que indicarle el identificador del componente de búsqueda. Nombre: (optativo) nombre descriptivo del componente. Estilos: (optativo) en esta propiedad podemos marcar si el componente de búsqueda es privado o no. Mezcla: (optativo) si añadimos más de un componente a la búsqueda, tendremos que definir como queremos que el componente [...]

El artículo Aprende a usar componentes de búsqueda fue publicado en Ayudavelneo por Francisco José Vila Martín

Aprende a usar índices complejos en Velneo V7

Joaquín Daneri después de ver el post sobre “¿Cómo integrar un panel de búsquedas avanzadas en un formulario?” quería ir un paso mas allá y planteaba en el foro de Velneo la siguiente cuestión: Tengo tabla pedidos que está asociada a la tabla clientes y a su vez a localidades, y con este método me gustaría ver todas las lineas de pedidos que se solicitaron de una localidad x. Además hoy marianoyana planteaba esta cuestión: Tengo dos tablas, una de ellas es ficha y la otra Establecimiento, por cada establecimiento existen diferentes fichas. En la Tabla ficha tengo un enlace y un índice, y lo que no consigo hacer es que me busque las fichas que tiene un establecimiento. Es decir tengo un índice llamado establecimiento, una búsqueda por este índice y un formulario que me lanza la búsqueda, pero no consigo que me lo haga, y lo hago por el nombre de la ficha si lo hace pero no por el nombre del establecimiento. La respuesta para las dos cuestiones es la misma: UTILIZANDO ÍNDICES COMPLEJOS Antes vayamos con un poco de teoría ¿Qué son los índices complejos? Resulta difícil dar una definición de lo que es [...]

El artículo Aprende a usar índices complejos en Velneo V7 fue publicado en Ayudavelneo por Francisco José Vila Martín

El peligro de las variables en Velneo V7

La semana pasada había un interesante debate en el foro de Velneo, en el que se preguntaba sobre el correcto uso de las variables en Velneo V7. En concreto se preguntaba sobre que era mas óptimo: el uso de variables globales en memoria o el uso de variables locales… Pues como diría un buen gallego “depende”… Como diría Jack “El destripador”… vayamos por partes. Tipos de variables en Velneo V7 En Velneo V7 tenemos dos tipos de variables: Variables globales Variables locales Variables globales Según vemos en la ayuda de Velneo V7: La variable global es un objeto cuyo contenido es global a la aplicación y común, en el ámbito de red, para todos los usuarios si su persistencia es en disco, y de carácter local si su persistencia es en memoria. Por lo tanto acabamos de ver que hay dos tipos de variables globales: en disco o en memoria. Variables globales en disco El contenido de una variable global en disco es común a todos los usuarios y planos de ejecución. Es decir, si un usuario modifica el contenido de una variable global en disco, este cambio afecta a todos los usuarios de la aplicación. [...]

El artículo El peligro de las variables en Velneo V7 fue publicado en Ayudavelneo por Francisco José Vila Martín

Optimiza tus aplicaciones lanzando las búsquedas en tercer plano

¿Tus aplicaciones son lentas a la hora de mostrar los registros en una rejilla? ¿Le da tiempo al usuario a tomarse un café mientras aparecen los datos solicitados en pantalla? !Tranquilo! Esto se ha terminado. En este artículo vamos a ver como lanzando las búsquedas en tercer plano al usuario no le dará tiempo ni a pestañear. 3.2.1 ¡Comenzamos!… Antes de comenzar con el desarrollo, vamos a ponernos en situación: Queremos, desde un menú tipo formulario, lanzar una búsqueda pasándole una serie de valores que el usuario elegirá desde un panel. Algo mas o menos como esto: Objetos necesarios para lanzar las búsquedas en tercer plano Para ejecutar correctamente la búsqueda en tercer plano necesitaremos los siguientes objetos: Un “Manejador de evento” en el formulario que se lanzará al pulsar el botón de “Buscar registros” Un “Proceso” que lanzaremos desde el evento anterior en tercer plano. Este proceso será el encargado de lanzar la búsqueda que queremos ejecutar Una “Búsqueda” que será la encargada de devolver los registros al formulario principal Crear los “Índices” necesarios en la tabla. Bueno pues ya tenemos los ingredientes para cocinar nuestro plato. Vamos a ponerlos a fuego lento… Vamos a comenzar por [...]

El artículo Optimiza tus aplicaciones lanzando las búsquedas en tercer plano fue publicado en Ayudavelneo por Francisco José Vila Martín