¿Como puedo cargar el plural de una tabla en JS?

Buenas, estoy intentando dar de alta una serie de registros a traves de un JSON que me envian, la cosa es que debo de cargar sus plurales para insertar sus sub-registros. Lo que tengo es esto y no se como debería de cargarlos para insertarlos a continuación.

var body = theRequest.body();
var res = JSON.parse(body);

var traspasos = res[0].transfer;

for (var  i = 0; i<traspasos.length;i++)
{

	theRoot.beginTrans("Alta");
	var registro = new VRegister( theRoot );
	registro.setTable("prueba_dat/TRASPASOS");
	registro.setField("FECHA", traspasos[i].date);
	registro.setField("EAN", traspasos[i].ean);
	registro.setField("ORIGEN", traspasos[i].origin);
	registro.setField("DESTINO", traspasos[i].destination);
	registro.setField("QTY",traspasos[i].qty);
	registro.addRegister();
	theRoot.commitTrans();
}

Hola fran_garcia.

Ahora dispones de un conjunto de funciones y comandos para la gestión de cadenas en formato JSON.

Si ya dominas la gestión de las tablas Velneo, lo de importar datos desde JSON será un juego de niños.

Saludos
Paco Satué

Buenas pacosatu.

Si he mirado esas funciones nativas de JSON, esas las uso para otro tipo de fines, antes de hacer lo que comento en el post, probé con esas funciones pero no me dieron resultado y opté por JS, lo que pretendo realizar es capturar una respuesta de un body (En este caso es formato JSON y me la envian en el raw de POSTMAN). Es decir, hacer la función de como si yo fuera una API a la que le pasan datos, el problema es que esos registros dependen de otras tablas como por ejemplo: Un pedido y las lineas de ese pedido. Y busco la forma de poder cargar su plural para ir insertando las lineas dentro de ese pedido. Desconozco si mediante funciones nativas se puede hacer lo que comento, pero creo que no.

Hola fran_garcia.

Mediante la clase VProcess puedes combinar perfectamente código javascript de tu API webservice con el código nativo de Velneo, en el que todo lo relacionado con la gestión de tablas es muy sencillo de programar.

Pásale al proceso nativo el JSON y que sean los comandos nativos de Velneo los que procesen los datos.

Dices:

… el problema es que esos registros dependen de otras tablas como por ejemplo: Un pedido y las lineas de ese pedido. Y busco la forma de poder cargar su plural para ir insertando las lineas dentro de ese pedido. Desconozco si mediante funciones nativas se puede hacer lo que comento, pero creo que no.

No entiendo nada de lo que quieres hacer, pero hablas de registros relacionados, de cargar plurales, de insertar líneas dentro del pedido … y todo eso es lo que precisamente Velneo nativo hace muy bien.

Saludos
Paco Satué

Buenas pacosatu.

Perdón si no me he explicado bien, aún soy novato con esto de Veleno, lo que quiero hacer es insertar una serie de registros que recibo desde un JSON. He estado mirando lo que me comentaste y he probado a hacer lo siguiente:

Por un lado mi JavaScript:

importClass("VProcess");
var json = theRequest.body();
var prer = JSON.parse(json);
var proceso = new VProcess(theRoot);
proceso.setProcess("prueba_app/RECOGIDA_JSON");
proceso.setVar("JSON",JSON.stringify(prer));
proceso.exec();

Y por otro lado mi proceso Velneo a que llamo desde mi JavaScript pasandole el JSON que recibo:

Rem ( RECOGEMOS EL JSON )
Set ( JSON_SIZE, jsonGetArrayItem(JSON, 0) )
Set ( VENTAS_SIZE, jsonGetValue(JSON_SIZE, "ventas") )
Set ( VENTAS, jsonGetArrayLength(VENTAS_SIZE) )
For ( X, 0, X<VENTAS, 1 )
Set ( VENTAS_LINEA, jsonGetArrayItem(VENTAS_SIZE, X) )
Crear nueva ficha en memoria ( ficha, VENTAS@prueba_dat )
Modificar campo ( ARTICULO, jsonGetValue(VENTAS_LINEA, "articulo") )
Modificar campo ( CANTIDAD, jsonGetValue(VENTAS_LINEA, "cantidad") )
Modificar campo ( CENTRO, jsonGetValue(VENTAS_LINEA, "centro") )
Modificar campo ( DESCUENTO, jsonGetValue(VENTAS_LINEA, "descuento") )
Modificar campo ( FECHA, jsonGetValue(VENTAS_LINEA, "fecha") )
Modificar campo ( IMPORTE, jsonGetValue(VENTAS_LINEA, "importe") )
Modificar campo ( NETO, jsonGetValue(VENTAS_LINEA, "neto") )
Modificar campo ( PRECIO, jsonGetValue(VENTAS_LINEA, "precio") )
Modificar campo ( TIPO, jsonGetValue(VENTAS_LINEA, "tipo") )
Alta de ficha ( ficha )

Los registros se insertan correctamente, pero tardan unos 9 segundos mientras que con JavaScript tarda segundo y medio los 2000 que son. No se si estoy poniendo alguna instrucción repetida o es posible optimizar más esto.

Hola fran_garcia.

No es necesario pedir perdón, faltaría más.
Ya irás aprendiendo con el tiempo que para dar una buena respuesta es imprecindible hacer bien la pregunta.

Ahora que has puesto el ejemplo, está clarísimo lo que quieres hacer y además has entendido perfectamente la forma de usar el API y los comandos nativos de manera simultánea.

Quizás el retardo de 9 segundos se deba a que el proceso se ejecuta en 1º plano. Pásale el parámetro VProcess.RunInServer (2) a la función exec() para ejecutarlo en 3º plano.

Luego puedes probar también con el comando Modificar campos desde JSON para modificar todos los campos de la Ficha en una sola línea de Código.

Prueba también a cargar en la variable local JSON el valor theRequest.body() directamente, sin ejecutar previamente un parse() y después un stringify()

Pruébalo.

Saludos
Paco Satué

Buenas pacosatu.

Al final he tirado por tus recomendaciones y he ido limpiando código y optimizando lo más posible.

Se me ha quedado tal que así:

Mi JavaScript:

importClass("VProcess");
var proceso = new VProcess(theRoot);
proceso.setProcess("prueba_app/RECOGIDA_JSON");
proceso.setVar("JSON",theRequest.body());
proceso.exec();
/* no me ejecuta el proceso
proceso.exec(VProcess.RunInServer(2));
*/

Mi Proyecto de Velneo:

Set ( VENTAS, jsonGetValue(jsonGetArrayItem(JSON, 0), "ventas") )
Cargar lista ( VENTAS@prueba_dat, ID, , , , )
Crear o modificar ficha desde JSON ( toUpper(VENTAS), Solo alta, VENTAS@prueba_dat, ID, , )
Libre

El proceso de Velneo mediante esa instrucción ha mejorado su tiempo de ejecución, en primer plano ha pasado de los 9 segundos que comentaba a 1,3 segundos en ingresar 3423 registros. El problema de esa instrucción es que debo de tener las claves del JSON en Mayúsculas (por eso lo del Upper).

Una cosa que no me ha funcionado ha sido la siguiente:

proceso.exec(VProcess.RunInServer(2));

No sé si la he puesto correctamente, pero directamente no se me ejecutaba el proceso.

Te doy las gracias por tu tiempo tomado en contestar y leer, Velneo es algo totalmente nuevo para mi que acabo de salir mis estudios, estoy acostumbrado a otro tipo de cosas y viendo esto aún tengo muchos fallos y mucho que aprender.

Hola fran_garcia.

Me alegro que vayas avanzando y espero que pronto le pilles el gusto a Velneo. Te aseguro que en gestión de datos de una manera LifeIsSoft es una herramienta imbatible.

La función exec() tiene como primer parámetro el plano de ejecución que se indica usando la Enumeración VProcess.RunInServer cuyo valor es la constante 2.

Puedes usar proceso.exec(VProcess.RunInServer) o proceso.exec(2) para ejecutar en 3º plano.

En los comandos nativos sobra el Cargar lista y el Índice ID ya que solo haces Altas.

Set ( VENTAS, jsonGetValue(jsonGetArrayItem(JSON, 0), "ventas") )
Crear o modificar ficha desde JSON ( toUpper(VENTAS), Solo alta, VENTAS@prueba_dat, , , )

Pruébalo.

Saludos
Paco Satué