vJavascript listas


([N3] Humber) #1

Buenas a todos, vengo con una pequeña duda de vJavascript, estaba buscando en la documentación, pero bueehh…

tengo una cadena de este estilo “1,3,6,19,21” (ID’s), la paso a un array y necesito cargar la lista de estos registros para eliminarlos, imagino que la única es cargarlos uno por uno no? como cualquier proceso… Esta parte ya la tengo lista con un while recorriendo el array. pero por si hay una manera, pues no está de mas preguntar.

Lo otro es como hacer un “recorrer lista eliminando fichas” en vJavascript, por los momentos lo hice con readAt() y eliminando, pero como hago para eliminar la lista que cargué?

Saludos.


([N3] pacosatu) #2

Hola Humber.

No entiendo tu pregunta ( … como hago para eliminar la lista que cargué?).

  • Tienes un array de ID’s y quieres borrar físicamente los registros de la tabla.

Tienes 2 opciones, entre otras muchas:
1 - Recorre el array y vas instanciando VRegister y usando deleteRegister()
2 - Rellena una lista VRegisterList desde el array y haces lo mismo que en la opción 1, recorre la Lista

Yo creo que siempre tendrás que recorrer las Listas de forma secuencial para hacer operaciones en disco.
No existen todavía operaciones globales como VRegisterList.deleteAll()

Para gestión de Listas de ID’s guardadas en Local tenemos nuevas funciones en la 7.16.

Saludos
Paco Satué


([N3] Humber) #3

Buenas tardes Paco, haz contestado a mi pregunta, tal vez no tan clara como creia que estaba jeje

Esto es lo que estoy haciendo, alguna corrección, un paso que podría saltarme o un comentario?


seleccionados = seleccionados.split(",");
var nselected = seleccionados.length;
if(nselected){
	if (theRoot.beginTrans("eliminamos los registros")){
	while(nselected--){
		var registros = new VRegisterList(theRoot);
		registros.setTable("BeneficiosDat/ANTIGUEDADES");
		registros.load("ID", [seleccionados[nselected]]);
		var antiguedad = registros.readAt(0);
		antiguedad.deleteRegister();
	}
	theRoot.commitTrans();
	}

Saludos.


([N3] Humber) #4

PD: por ser nivel 1 no tengo acceso al vServer, vdataclient y vinstallbuilder. Así que por los momentos me toca quedarme todavía con la 7.15 que al menos tengo los componentes.

Saludos.


([N3] pacosatu) #5

Hola Humber.

Está bien aunque puedes hacerlo también usando la opción 1ª, sin necesidad de usar VRegisterList

seleccionados = seleccionados.split(",");
var nselected = seleccionados.length;
var antiguedad = new VRegister(theRoot);
antiguedad.setTable(“BeneficiosDat/ANTIGUEDADES”);

if(nselected){
if (theRoot.beginTrans(“eliminamos los registros”)){
while(nselected–){
if (antiguedad.readRegister(“ID”, [seleccionados[nselected]], VRegister.SearchThis)) {
antiguedad.deleteRegister();
};
};
theRoot.commitTrans();
};
};

Saludos
Paco Satué


([N3] Humber) #6

Gracias por tus comentarios Paco, funcionan las dos, alguna ventaja sobre alguna o en teoria usar una u otra da igual?

aunque me gusta que pueda hacer el set table una sola vez, a simple vista está mas optimizada la versión que me pasa, muchas gracias.

no había visto el leer registro de esa manera.


([N3] pacosatu) #7

Hola Humber.

Si vas a hacer consultas sobre el ID, es más lógico usar VRegister.readRegister() porque el resultado siempre va a ser uno o ninguno. Por lo demás los dos códigos son perfectamente válidos.

Saludos
Paco Satué


([N3] Humber) #8

Ok, gracias por la aclaratoria Paco, voy a cambiar un par de procesos entonces también.

Saludos.