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

Pedro Porlán
pporlan@gmail.com

Pedro Porlán es Ingeniero Técnico Industrial y trabaja como programador en Click Aplicaciones, donde desarrolla y mantiene aplicaciones en Velneo 6x y 7. Además ha trabajado en diversas empresas creando y manteniendo soluciones basadas VB6, C++, LAMP, Oracle APEX...

13 Comments
  • Gabri
    Posted at 10:59h, 28 septiembre Responder

    Que bueno,
    Me lo apunto para releer con calma

  • Paco Satué
    Posted at 11:29h, 28 septiembre Responder

    Un plugin realmente útil.

    Gracias por el aporte.

  • Luis Palomo
    Posted at 12:57h, 28 septiembre Responder

    Hola,
    He probado el plugin, y hay un error.
    Si la tabla contiene campos que apuntan una tabla Estática, ésta no se carga y devuelve error script, no añadiendo mas campos.
    Saludos, Luis

    • Francisco José Vila Martín
      Posted at 14:03h, 28 septiembre Responder

      Hola Luís:

      Ya está detectado el error. En breve subiré una actualización corrigiéndolo.

      Gracias por tu comentario

  • Fernando
    Posted at 13:15h, 28 septiembre Responder

    Gracias Pedro. Muy buen aporte.
    Estoy deseando probarlo.

    Gracias por tu trabajo.

  • Paco Satué
    Posted at 17:09h, 28 septiembre Responder

    Hola Pedro.

    He visto, además de la función addStaticTable(), que la función addField() se usa en tres sitios distintos y con distinto número de parámetros que no concuerdan con el tipo esperado.

    El tema de poder gestionar plantillas es un gran valor añadido al plugin de Exportación.

    Yo tengo un módulo de exportación básico a JSON, con campos enlazado a maestros de n niveles y conversión de campos imagen y binario a Base64.
    Haré un MIX de mi módulo con tu plugin y publico el resultado.

    Saludos
    Paco Satué

  • Luis Palomo
    Posted at 18:22h, 28 septiembre Responder

    Hola de nuevo,
    Si un campo texto tiene “;;” punto y coma), éste lo separa y lo agrega a una nueva columna. No sería mejor hacer la separación de campos mediante Tabulador?
    Saludos y gracias.
    Gran trabajo

  • Francisco José Vila Martín
    Posted at 09:44h, 29 septiembre Responder

    Hola a todos:

    Se ha subido una nueva versión con modificaciones realizadas por Fernando Maltrana en “exp_tre.js“.

    Había un bug al enlazar con tablas estáticas.

    Además también ha documentado toda la función.

    Muchas gracias por tu colaboración

  • HENRY GARCÍA
    Posted at 15:33h, 29 septiembre Responder

    Lo probaré y les cuento. Como sea mil gracias por el aporte tan valioso.

  • VictorGT
    Posted at 12:59h, 04 octubre Responder

    Pinta ser algo MUY util. Mil gracias por ponerlo a nuestra disposicion.

    Me muero de ganas de probarlo… En la proxima exportacion que tenga que hacer, sin duda lo probare.

  • Fausto Ribera
    Posted at 18:50h, 05 octubre Responder

    Muchas gracias. Muy buen aporte.
    Primero un tema que he visto, si exportas un campo objeto texto y hay saltos de linea, no se genera bien el fichero exportado, No se si tiene algún tipo de solución.
    En segundo lugar, me gustaría, que al seleccionar uno de los campos exportados, se pudiera cambiar la descripción del campo, pero no tengo ni idea de como hacerlo. Desconozco Javascrip y aunque llevo mucho queriendo dedicarle tiempo me es imposible, así que si podéis orientarme, gracias.

  • Fausto Ribera
    Posted at 18:52h, 05 octubre Responder

    Lo he podido hacer cambiando el valor en la descripción de la variable, pero eso a nivel de usuario lo veo un poco inviable. Gracias.

  • Manuel Cabrera
    Posted at 13:25h, 21 octubre Responder

    Buenos días.
    Llevo usando el Exportador desde sus primeras versiones, con un resultado excelente, aunque con algunos problemas:
    – Exportación de Fechas.
    – Extraer el contenido de nombres de las tablas estáticas.
    – Manejo de Tablas de extensión. No reconoce el tipo de objeto.
    Le he dedicado un poco de tiempo a esta versión y tengo que reconocer que resuelve los problemas indicados, aunque aún estén pendientes algunas funcionalidades ya expresadas en el foro.
    Me he encontrado con un problema al manejar estáticas cuyo código sean letras, no extrae la descripción, con números funciona bien. Expongo el caso concreto por si arroja luz.
    Parto de una tabla de extensión y preparo una plantilla que extrae datos tanto de esta como de su maestra, todo funciona bien, excepto al extraer la descripción desde una estática en la tabla maestra cuyos códigos son letras, H Hombre y M Mujer. Otra tabla estática en la tabla maestra pero con códigos numéricos lo extrae bien.
    Como ando un poco oxidado con JavaScript, os lo pongo para ver algún alma caritativa lo resuelve.
    Gracias.

Post A Comment

Pin It on Pinterest