Como importar de JSON sin grabar en BBDD?


([N1] tcvsi) #1

He estado revisando todos los ejemplos de importaciones JSON y todas piden el archivo origen lo trocean y lo graban en la tabla correspondiente de la base de datos.
Yo quiero conseguir que pida el archivo, lo trocee y lo coloque en una cesta o en una lista que se devolverá como lista de salida del proceso.
registro.addRegister(); theRegisterListOut.append(registro);

si no utilizo el addRegister no me devuelve nada en la lista de salida. Pero si lo utilizo me graba en la base de datos, además de devolverme la lista.

Agradecería alguna pista de que clase utilizar o que propiedades o funciones.


([N3] pacosatu) #2

Hola Tomás.

En Velneo por diseño, las Listas, Fichas y Cestas siempre apuntan a registros físicos de la base de datos. No se pueden pasar datos serializados en memoria mediante VRegisterListIn y VRegisterListOut.

Inténtalo con una Tabla temporal, que se comporta como una tabla en disco pero desaparece al finalizar la aplicación. Tiene la limitación de que los registros solo son visibles desde el mismo plano en el que se crearon.

Saludos
Paco Satué


([N1] tcvsi) #3

Apreciado Paco:
Muchas gracias por tu respuesta. Me ha dejado algo chafado.
No alcanzo a comprender como el primer proceso que aprendemos a hacer en V7 que es cargar plurales y añadir lista a la salida no se pueda hacer en un proceso JS.

Releyendo mi post veo que no he señalado que en mi proceso tengo declarado como salida una lista referida a una tabla concreta. Es decir que no es un proceso generalista, sino destinado a usarlo con una tabla en concreto.

Claro que lo que yo pretendo es en vez de cargar plurales leer un archivo de texto y por cada linea desmenuzarla en los campos del registro de salida y añadir ese registro a la lista que saldrá.

Si no se pudieran retornar listas no existiría vRegisterListOut. Pero eso son solo suposiciones mías ya que mi desconocimiento del API es total.

Árduo camino este de adentrarse en el API.

Gracias


([N3] pacosatu) #4

Hola Tomás.

Si lees la definición de la clase vRegisterList entenderás perfectamente el comportamiento de theRegisterListOut.

Los objetos de esta clase representan una lista de fichas de una tabla.

Cuando usas Cargar Plurales (con la función theRegisterIn.loadPlurals) y los añades a la Salida (con theRegisterListOut.append), el objeto theRegisterListOut contendrá los registros de la tabla con los plurales.

En tu ejemplo de parseo de un string JSON, obtendrás valores en la memoria local del proceso. Estos valores los irás guardando en un objeto vRegister que habrás creado con :

 var oRegistro = new VRegister(theRoot);
 oRegistro.setTable("proyecto/tabla");

Para que oRegistro puedas añadirlo a theRegisterListOut, deberás hacerlo permanente en la base de datos mediante una transacción de Alta.

Así que, si añades el registro oRegistro a theRegisterListOut sin haberlo guardado en la base de datos, cuando se termina el proceso, el objeto theRegisterListOut estará vacío.

Las listas de Velneo no son más que un conjunto ordenado de punteros a los registros físicos de las tablas en el vServer. Así que si no hay puntero físico que apunta a un registro grabado en la tabla, nunca podrá haber una Lista con contenido.

Conclusión, lo estás haciendo correctamente. Solo te falta guardar los registros antes de pasarlos a theRegisterListOut.

Saludos
Paco Satué


([N1] tcvsi) #5

Uauuu, eso si que ha sido una lección magistral. Muchísimas gracias.
Me has dejado boquiabierto.
Pues al final hare lo de la tabla en memoria. Porque lo que hago es una utilidad para importar y exportar informes de vreport. Pero quiro controlar la existencia de los mismos en la importacion y dar la posibilidad de sobreescribir o no.