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.

El rayo ordenador de listas

Que levante la mano el desarrollador que no haya escuchado la frase:

“A Velneo le cuesta ordenar listas.

Este ha sido un tema muy popular en el foro oficial de Velneo donde se han propuesto diferentes maneras de ordenar listas de registros utilizando tanto la instrucción nativa “Ordenar lista“, como las de la clase de “VRegisterList”.

 

Si ordenamos una lista por un campo y posteriormente queremos ordenar por otro campo, perdemos la primera ordenación… hasta ahora.

ordenar listas

Ordenar listas con vJavaScript

Hoy proponemos un script/proceso que permite ordenar una lista de registros utilizando distintos tipos de criterios:

Lista de campos

Una lista de campos especificados como cadena, imaginemos que tenemos una tabla de facturas enlazada con una tabla de clientes y queremos obtener los registros de la tabla de facturas ordenados por el nombre del cliente [A → Z, ascendiente] y por fecha de factura [antiguas → recientes, descendiente]

CLIENTE.NAME,A;FECHA,D

Función comparadora

Vamos a crear una función JS que recibe dos objetos VRegister como parámetros y devuelve -1, 0 ó +1 dependiendo de qué registro consideremos mayor o menor, aquí tenemos mayor libertad para definir un criterio de ordenamiento:

function(reg1, reg2){
 //Ordenamos de mayor a menor por longitud del nombre de cliente
 if(reg1.fieldToString(‘CLIENTE.NAME’).length > reg2.fieldToString(‘CLIENTE.NAME’).length)
  return +1;
 if(reg1.fieldToString(‘CLIENTE.NAME’).length < reg2.fieldToString(‘CLIENTE.NAME’).length)
  return -1;
 //Ordenamos de menor a mayor el valor absoluto del campo TEMP
 if(Math.abs(reg1.fieldToDouble(‘TEMP’)) > Math.abs(reg2.fieldToDouble(‘TEMP’)))
  return -1;
 if(Math.abs(reg1.fieldToDouble(‘TEMP’)) < Math.abs(reg2.fieldToDouble(‘TEMP’)))
  return +1;
 return 0;
}

Este método tiene una serie de limitaciones, que si os parece interesante podéis probar a resolver:

  • La ordenación por lista de campos los trata siempre como alfabéticos.
  • El proceso está basado en el algoritmo de ordenación por inserción, que tiene un orden de complejidad O(n2) por lo que el tiempo de ejecución aumenta notablemente con el tamaño de la lista a ordenar, podría sustituirse por un algoritmo quicksort.

Si queréis aportar mejoras o ideas estaré encantado de ir actualizando este experimento

 

¿Ordenas ya tus registros a la velocidad del rayo?

Pruébalo y déjame un comentario mas abajo

Foto: Abel Escobar

La entrada El rayo ordenador de listas aparece primero en AyudaVelneo.

El laboratorio del profesor vBacterio

En el laboratorio del profesor vBacterio nos pasamos el día haciendo experimentos con el vDevelop, mezclando código Velneo, JS y las ideas más disparatadas.

Así nos va, un día nos sale un exportador CSV y otro un crecepelo especial para bigote.

Laboratorio vBacterio(http://factoriadelcomic.blogspot.com.es/2015/12/apostamos-por-la-innovacion.html)

 

Disclaimer

Los códigos de esta sección no tienen garantía alguna, al igual que los experimentos del profesor Bacterio pueden tener resultados sorprendentes, catastróficos o ambos a la vez.

Esperamos que lo paséis bien con ellos.

La entrada El laboratorio del profesor vBacterio aparece primero en AyudaVelneo.