Localizador de objetos

Cada día intentamos que nuestras aplicaciones en Velneo sean más dinámicas y personalizables. Para facilitar la tarea de seleccionar objetos en tiempo de ejecución os presentamos el componente “Localizador de objetos“.

Localizador de Objetos

Requisitos del “Localizador de Objetos”

Para especificar los requisitos del objeto a seleccionar podemos parametrizar el localizador con el origen, destino, tipo de objeto, proyecto donde buscar…

Ejecutar localizador de objetos

Origen

IO_TYPE_IN (-1) cualquier, (0) sin origen, (1) registro, (2) lista
TBL_ID_REF_IN Referencia de la tabla de entrada (velneo_verp_dat/VTA_FAC_G)

Destino

IO_TYPE_OUT (-1) cualquier, (0) sin origen, (1) registro, (2) lista
TBL_ID_REF_OUT Referencia de la tabla de entrada (velneo_verp_dat/VTA_FAC_G)

Tipo de objeto

OBJ_TYPE Ver clase VObjectInfo VObjectInfo.TypeTable, VObjectInfo.TypeNone, VObjectInfo.TypeForm...

Alias o tipo de proyecto

PRJ_ID Alias del proyecto (velneo_verp_dat)
PRJ_TYPE Ver clase VProjectInfo VProjectInfo.TypeDat, VProjectInfo.TypeApp, VObjectInfo.TypeForm...

 

En el .vin que adjuntamos se incluyen más ejemplos de parametrización.

DEMO – Opciones del localizador objetos

Posibles mejoras del “Localizar de Objetos”

Entre las posibles modificaciones y mejoras para este componente se nos han ocurrido las siguientes:

  • Especificar varios tipos de objeto a seleccionar, por ejemplo, si queremos seleccionar un visor de lista así podremos elegir indistintamente entre rejillas, casilleros…
  • Prefijo/Sufijo: es muy común usar prefijos o sufijos para definir módulos dentro de un proyecto, por ejemplo, vERP utiliza los sufijos “C”, “G”, “M” y “W”, podrían añadirse como opciones al filtro.

¿Te atreves con ellas?

¿A qué esperas para descargarte el “Localizador de Objetos”del Profesor vBacterio?

Pruébalo y déjame un comentario mas abajo

La entrada Localizador de objetos aparece primero en AyudaVelneo.

Localizador de objetos

Cada día intentamos que nuestras aplicaciones en Velneo sean más dinámicas y personalizables. Para facilitar la tarea de seleccionar objetos en tiempo de ejecución os presentamos el componente “Localizador de objetos“.

Localizador de Objetos

Requisitos del “Localizador de Objetos”

Para especificar los requisitos del objeto a seleccionar podemos parametrizar el localizador con el origen, destino, tipo de objeto, proyecto donde buscar…

Ejecutar localizador de objetos

Origen

IO_TYPE_IN (-1) cualquier, (0) sin origen, (1) registro, (2) lista
TBL_ID_REF_IN Referencia de la tabla de entrada (velneo_verp_dat/VTA_FAC_G)

Destino

IO_TYPE_OUT (-1) cualquier, (0) sin origen, (1) registro, (2) lista
TBL_ID_REF_OUT Referencia de la tabla de entrada (velneo_verp_dat/VTA_FAC_G)

Tipo de objeto

OBJ_TYPE Ver clase VObjectInfo VObjectInfo.TypeTable, VObjectInfo.TypeNone, VObjectInfo.TypeForm...

Alias o tipo de proyecto

PRJ_ID Alias del proyecto (velneo_verp_dat)
PRJ_TYPE Ver clase VProjectInfo VProjectInfo.TypeDat, VProjectInfo.TypeApp, VObjectInfo.TypeForm...

 

En el .vin que adjuntamos se incluyen más ejemplos de parametrización.

DEMO – Opciones del localizador objetos

Posibles mejoras del “Localizar de Objetos”

Entre las posibles modificaciones y mejoras para este componente se nos han ocurrido las siguientes:

  • Especificar varios tipos de objeto a seleccionar, por ejemplo, si queremos seleccionar un visor de lista así podremos elegir indistintamente entre rejillas, casilleros…
  • Prefijo/Sufijo: es muy común usar prefijos o sufijos para definir módulos dentro de un proyecto, por ejemplo, vERP utiliza los sufijos “C”, “G”, “M” y “W”, podrían añadirse como opciones al filtro.

¿Te atreves con ellas?

¿A qué esperas para descargarte el “Localizador de Objetos”del Profesor vBacterio?

Pruébalo y déjame un comentario mas abajo

La entrada Localizador de objetos aparece primero en AyudaVelneo.

Exportador dinámico 2.0

Hace algunos años apareció un magnífico plugin para nuestras aplicaciones Velneo, se trataba del exportador dinámico, un plugin realizado por TheSeedSC.

El “Exportador dinámico” permitía crear plantillas personalizadas para exportar los registros de una lista (una vista de datos normalmente) seleccionando entre los campos de la tabla y sus maestros.

Exportador dinámico

Además, disponía de otras funcionalidades muy interesantes:

  • guardar y recuperar plantillas
  • ocultar campos (lista negra)
  • distintos formatos (CSV, HTML, JSON)
  • poder exportar desde cualquier vista de datos con un manejador de evento y dos líneas de JS

Sin embargo, presentaba algunos inconvenientes:

  • La estructura completa de la BBDD se guardaba en tablas en disco y se traspasaba parte de ella a tablas en memoria cuando se quería crear una plantilla, esto hacía que si se cambiaba la estructura de la BBDD (añadir, modificar o eliminar campos y/o tablas) había que borrar las tablas y generar la estructura de nuevo.
  • Las listas negras también estaban guardadas en tablas, enlazadas con la estructura, lo que suponía que se perdían si había que regenerar la estructura.
  • El traspaso de información de las tablas de disco a tablas en memoria se ralentizaba en caso de tablas con muchos campos y enlaces maestros.

Por todo ello un día empezamos a pensar en cómo intentar solucionar algunos de los problemas que presentaba aprovechando novedades del API JS y el nuevo control TreeView, entonces decidimos no guardar la estructura de la BBDD, sino leerla cuando fuera necesario del proyecto Velneo (con VProjectInfo y VTableInfo), además optimizamos su carga, sólo se leen las tablas enlazadas cuando el usuario las abre.

Al no guardar la estructura en tablas no podíamos crear vistas de datos “rejillas” o “árboles” con objetos Velneo, así que usamos el control TreeView para representar tanto los campos disponibles como.

exportador dinámico

El exportador dinámico + “Life is soft”

Finalmente optamos por un enfoque algo más Life Is Soft a la hora de integrar el exportador con nuestras aplicaciones, en lugar de llamarlo con JS desde vistas de datos, preparamos tres procesos  para que pudieran ejecutarse desde cualquier origen lista (“Preparar plantilla”, “Generar datos” y “Preparar plantilla+Generar datos”), además, al estar divididos es posible utilizarlos de forma más flexible, si sólo necesitas que el usuario prepare una plantilla se ejecuta el primero (para guardarla como configuración), si ya tienes la plantilla guardada puedes recuperarla y ejecutar directamente el proceso de “Generar datos”.

También nos permite personalizar la ejecución del exportador:

  • Preparar plantilla
  • Realizar un proceso largo/costoso de búsqueda o generación de registros
  • Pasar el resultado al proceso de generar datos

Para que podáis probarlo vosotros mismos os adjuntamos un pequeño .vin con el código un par de tablas de ejemplos.

Algunas de las mejoras y funcionalidades interesantes para añadir pueden ser:

  • Listas negras de campos
  • Guardar y recuperar plantillas
  • Añadir opciones de formateo a los campos (formatos de tiempo/fecha/hora, eliminar saltos de línea en campos alfabéticos…)
  • Implementar otros formatos de salida (HTML, XML, JSON…)

Si queréis integrarlo con vuestras aplicaciones sólo tenéis que copiar los objetos (y ficheros de script) y modificar el fichero “exp_cfg.js” con el alias de vuestro proyecto.

¿A qué esperas para descargarte el exportador dinámico del Profesor vBacterio?

Pruébalo y déjame un comentario mas abajo

La entrada Exportador dinámico 2.0 aparece primero en AyudaVelneo.

¿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.

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.

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

Guarda y recupera listas de registros

Listas V7 Hasta ahora hemos manejado listas de registros en tablas en disco y en memoria, mediante búsquedas, localizadores, incluso almacenando las listas en cestas en memoria, pero a partir de ahora tienes el poder de guardar listas de registros en ficheros en disco, en variables en memoria e incluso en campos objeto.

Gracias a las sencillas y potentes nuevas funciones de serialización de la clase VRegisterList, podrás almacenar listas de registros en disco con saveToFile() en una variable de tipo ByteArray con la función saveToData() y recuperar dichas listas con las funciones loadFromFile() y loadFromData() para obtener un objeto de la VRegisterList cuando quieras.

Un ejemplo práctico de la potencia de estas nuevas funciones es la funcionalidad de listas virtuales incorporada en las nuevas vTools que aparecen también en esta versión integradas en Velneo vERP que te permiten sin programar guardar y recuperar listas virtuales desde el menú contextual de cualquier objeto de vista de datos.

The post Guarda y recupera listas de registros appeared first on Velneo V7.